远程注入代码如何添加异常保护?
本帖最后由 king1027 于 2024-6-8 17:12 编辑C++的注入代码已经学会了,大概就是
利用VirtualAllocEx / WriteProcessMemory 将启动函数的代码复制到目标进程
调用CreateRemoteThread (..., 启动函数指针, 参数指针...)来注入远程线程
现在有个问题,因为调用远程CALL给的参数不对或者调用时机不对,有时候可能会导致远程程序崩溃。但我看 @苏紫方璇大神发布的代码注入工具帖子(https://www.52pojie.cn/thread-963707-1-1.html),工具可以实现SEH保护。我在网上搜了一天,注入代码倒是挺多,跟我这大同小异,但有关如何整合异常保护的代码没有。
所以请问注入的代码如何实现远程异常保护防止程序崩溃? 就是在注入的代码中插入seh相关的代码
例如
0040132C > 68 81134000 push x86test.00401381 ;构造SEH结构
00401331 64:FF35 00000>push dword ptr fs:
00401338 64:8925 00000>mov dword ptr fs:,esp
0040133F 8925 00144000 mov dword ptr ds:,esp ;保存堆栈指针
00401345 E8 5A000000 call x86test.004013A4 ;调用注入的代码
具体可以反汇编我的那个代码注入工具,看他注入了什么数据 本帖最后由 king1027 于 2024-6-8 20:13 编辑
苏紫方璇 发表于 2024-6-8 19:01
就是在注入的代码中插入seh相关的代码
例如
0040132C > 68 81134000 push x8 ...
大神,我刚实验了一下,用您的代码注入工具注入记事本,提示远程线程注入失败
然后我自己新建VS工程,用VC的默认C++ Windows窗口应用程序,设置如图,且关闭safeSEH
然后注入,程序直接退出了,没有触发SEH{:1_907:}
然后我还试了“乐玩编程助手”,他也有个防崩溃模式,但他的就可以成功。我反汇编看他的代码,感觉他没有mov dword ptr fs:,esp这个SEH关键代码,不知道他是怎么弄的
05100090 | 9C | pushfd |
05100091 | 60 | pushad |
05100092 | FF35 04001005 | push dword ptr ds: | 05100004:"@0"
05100098 | 68 E80C3700 | push 0x370CE8 |
0510009D | C7C0 5029A975 | mov eax,<user32.KillTimer> |
051000A3 | FFD0 | call eax |
051000A5 | 8B05 0C001005 | mov eax,dword ptr ds: |
051000AB | 81F8 00000000 | cmp eax,0x0 |
051000B1 | 75 22 | jne 0x51000D5 |
051000B3 | C7C0 01000000 | mov eax,0x1 |
051000B9 | 8905 0C001005 | mov dword ptr ds:,eax |
051000BF | C7C0 EA001005 | mov eax,0x51000EA |
051000C5 | FFD0 | call eax |
051000C7 | FF35 08001005 | push dword ptr ds: | 05100008:L"д"
051000CD | C7C0 2033D276 | mov eax,<kernel32.SetEvent> |
051000D3 | FFD0 | call eax |
051000D5 | 61 | popad |
051000D6 | 9D | popfd |
051000D7 | C3 | ret |
051000D8 | 0000 | add byte ptr ds:,al |
051000DA | 0000 | add byte ptr ds:,al |
051000DC | 0000 | add byte ptr ds:,al |
051000DE | 0000 | add byte ptr ds:,al |
051000E0 | 0000 | add byte ptr ds:,al |
051000E2 | 0000 | add byte ptr ds:,al |
051000E4 | 0000 | add byte ptr ds:,al |
051000E6 | 0000 | add byte ptr ds:,al |
051000E8 | 0000 | add byte ptr ds:,al |
051000EA | 9C | pushfd |
051000EB | 60 | pushad |
051000EC | E8 13FFC9FF | call 0x4DA0004 | 注入的汇编代码
051000F1 | 8905 00001005 | mov dword ptr ds:,eax |
051000F7 | 61 | popad |
051000F8 | 9D | popfd |
051000F9 | C3 | ret |
我这个注入不了64位进程 测试了一下,使用定时器似乎可以忽略异常 自己研究出来了 https://www.52pojie.cn/thread-1935098-1-1.html
页:
[1]