A:主程序中控台 》易语言exeB:DLL 数据通信 》易语言DLL
C:第三方服务端 》被操作的服务端
在本地电脑,使用 主程序 把 DLL注入> 服务端
远程注入的方式,然后远程调用函数,本地电脑可以正常执行。win11
换到云服务器第三方服务端就崩溃,经过排查,只要执行 远程调用函数 服务端就会崩溃闪退。
这种情况怎么办。
经过测试DLL 与主程序,里面的所有功能单独拿出来,在云服务器都能正常运行,且不会报错。
出问题的就在 远程调用函数调用后服务端崩溃 但是这个功能在本地电脑就没有任何问题。
|
远程注入_调用函数 | 逻辑型 | | |
进程ID | 整数型 | | | | 函数名 | 文本型 | | | | 参数一 | 字节集 | | | | 参数二 | 字节集 | | | | 参数三 | 字节集 | | | | 参数四 | 字节集 | | | | 参数五 | 字节集 | | | | 参数六 | 字节集 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 临时内存地址1 | 整数型 | | | 临时内存地址2 | 整数型 | | | GetProcAddress地址 | 整数型 | | | 汇编代码1 | 字节集 | | | 汇编代码2 | 字节集 | | | 函数地址 | 整数型 | | | 长度 | 整数型 | | | 指针地址 | 整数型 | | | 参数 | 整数型 | | 0 | i | 整数型 | | | 返回值 | 整数型 | | |
进程句柄 = OpenProcess ( #PROCESS_ALL_ACCESS, 假, 进程ID ) 临时内存地址1 = VirtualAllocEx (进程句柄, 0, 取文本长度 (函数名 ), #MEM_COMMIT, #PAGE_READWRITE ) 如果真 (临时内存地址1 = 0 ) CloseHandle (进程句柄 ) 返回 (假) WriteProcessMemory (进程句柄, 临时内存地址1, 到字节集 (函数名 ), 取文本长度 (函数名 ), 0 ) GetProcAddress地址 = GetProcAddress (GetModuleHandleA (“Kernel32.dll”), “GetProcAddress”)调试输出 (DLL句柄 ) 汇编代码1 = { 184 } + 到字节集 (GetProcAddress地址 ) + { 104 } + 到字节集 (临时内存地址1 ) + { 104 } + 到字节集 (DLL句柄 ) + { 255, 208, 195, 144 } 临时内存地址2 = VirtualAllocEx (进程句柄, 0, 取字节集长度 (汇编代码1 ), #MEM_COMMIT, #PAGE_READWRITE ) 如果真 (临时内存地址1 = 0 ) VirtualFreeEx (进程句柄, 临时内存地址1, 0, #MEM_RELEASE ) CloseHandle (进程句柄 ) 返回 (假) WriteProcessMemory (进程句柄, 临时内存地址2, 汇编代码1, 取字节集长度 (汇编代码1 ), 0 ) 线程句柄 = CreateRemoteThread (进程句柄, 0, 0, 临时内存地址2, 0, 0, 0 ) 如果真 (线程句柄 = 0 ) VirtualFreeEx (进程句柄, 临时内存地址1, 0, #MEM_RELEASE ) VirtualFreeEx (进程句柄, 临时内存地址2, 0, #MEM_RELEASE ) CloseHandle (进程句柄 ) 返回 (假)WaitForSingleObject (线程句柄, #DMUS_SEG_REPEAT_INFINITE ) GetExitCodeThread (线程句柄, 函数地址 ) VirtualFreeEx (进程句柄, 临时内存地址1, 0, #MEM_RELEASE )VirtualFreeEx (进程句柄, 临时内存地址2, 0, #MEM_RELEASE )CloseHandle (线程句柄 ) 如果真 (函数地址 = 0 ) CloseHandle (进程句柄 ) 返回 (假)
如果真 (参数一 ≠ { }) 长度 = 取字节集长度 (参数一 ) 如果 (长度 = 4 )  指针地址 = 取字节集数据 (参数一, #整数型, )  指针地址 = VirtualAllocEx (进程句柄, 0, 长度, #MEM_COMMIT, #PAGE_READWRITE ) WriteProcessMemory (进程句柄, 指针地址, 参数一, 长度, 0 ) 加入成员 (参数, 指针地址) 如果真 (参数二 ≠ { })  长度 = 取字节集长度 (参数二 )  如果 (长度 = 4 )   指针地址 = 取字节集数据 (参数二, #整数型, )   指针地址 = VirtualAllocEx (进程句柄, 0, 长度, #MEM_COMMIT, #PAGE_READWRITE )  WriteProcessMemory (进程句柄, 指针地址, 参数二, 长度, 0 ) 加入成员 (参数, 指针地址)  如果真 (参数三 ≠ { })   长度 = 取字节集长度 (参数三 )   如果 (长度 = 4 )    指针地址 = 取字节集数据 (参数三, #整数型, )    指针地址 = VirtualAllocEx (进程句柄, 0, 长度, #MEM_COMMIT, #PAGE_READWRITE )   WriteProcessMemory (进程句柄, 指针地址, 参数三, 长度, 0 )  加入成员 (参数, 指针地址)   如果真 (参数四 ≠ { })    长度 = 取字节集长度 (参数四 )    如果 (长度 = 4 )     指针地址 = 取字节集数据 (参数四, #整数型, )     指针地址 = VirtualAllocEx (进程句柄, 0, 长度, #MEM_COMMIT, #PAGE_READWRITE )    WriteProcessMemory (进程句柄, 指针地址, 参数四, 长度, 0 )   加入成员 (参数, 指针地址)    如果真 (参数五 ≠ { })     长度 = 取字节集长度 (参数五 )     如果 (长度 = 4 )      指针地址 = 取字节集数据 (参数五, #整数型, )      指针地址 = VirtualAllocEx (进程句柄, 0, 长度, #MEM_COMMIT, #PAGE_READWRITE )     WriteProcessMemory (进程句柄, 指针地址, 参数五, 长度, 0 )    加入成员 (参数, 指针地址)     如果真 (参数六 ≠ { })      长度 = 取字节集长度 (参数六 )      如果 (长度 = 4 )       指针地址 = 取字节集数据 (参数六, #整数型, )       指针地址 = VirtualAllocEx (进程句柄, 0, 长度, #MEM_COMMIT, #PAGE_READWRITE )      WriteProcessMemory (进程句柄, 指针地址, 参数六, 长度, 0 )     加入成员 (参数, 指针地址)                     汇编代码2 = { 184 } + 到字节集 (函数地址 ) 变量循环首 (取数组成员数 (参数 ), 1, -1, i )  汇编代码2 = 汇编代码2 + { 104 } + 到字节集 (参数 [i ]) 变量循环尾 ()汇编代码2 = 汇编代码2 + { 255, 208, 195, 144 } 指针地址 = VirtualAllocEx (进程句柄, 0, 取字节集长度 (汇编代码2 ), #MEM_COMMIT, #PAGE_READWRITE ) WriteProcessMemory (进程句柄, 指针地址, 汇编代码2, 取字节集长度 (汇编代码2 ), 0 ) 加入成员 (参数, 指针地址 ) 线程句柄 = CreateRemoteThread (进程句柄, 0, 0, 指针地址, 0, 0, 0 ) 如果真 (线程句柄 = 0 ) 计次循环首 (取数组成员数 (参数 ), i )  如果真 (参数 [i ] ≠ 0 )  VirtualFreeEx (进程句柄, 参数 [i ], 0, #MEM_RELEASE )    计次循环尾 () 清除数组 (参数 ) CloseHandle (进程句柄 ) 返回 (假) WaitForSingleObject (线程句柄, #DMUS_SEG_REPEAT_INFINITE ) GetExitCodeThread (线程句柄, 返回值 ) 计次循环首 (取数组成员数 (参数 ), i ) 如果真 (参数 [i ] ≠ 0 ) VirtualFreeEx (进程句柄, 参数 [i ], 0, #MEM_RELEASE )  计次循环尾 ()清除数组 (参数 )CloseHandle (线程句柄 )CloseHandle (进程句柄 )返回 (真)
补充内容 (2025-3-20 14:24):
不好意思,我刚刚解决了,论坛上找到一篇大佬设置的命令,已经解决了!
帖子链接:
https://bbs.125.la/forum.php?mod=viewthread&tid=1476... |