king1027 发表于 2024-6-8 17:10

远程注入代码如何添加异常保护?

本帖最后由 king1027 于 2024-6-8 17:12 编辑

C++的注入代码已经学会了,大概就是
利用VirtualAllocEx / WriteProcessMemory 将启动函数的代码复制到目标进程
调用CreateRemoteThread (..., 启动函数指针, 参数指针...)来注入远程线程
现在有个问题,因为调用远程CALL给的参数不对或者调用时机不对,有时候可能会导致远程程序崩溃。但我看 @苏紫方璇大神发布的代码注入工具帖子(https://www.52pojie.cn/thread-963707-1-1.html),工具可以实现SEH保护。我在网上搜了一天,注入代码倒是挺多,跟我这大同小异,但有关如何整合异常保护的代码没有。

所以请问注入的代码如何实现远程异常保护防止程序崩溃?

苏紫方璇 发表于 2024-6-8 19:01

就是在注入的代码中插入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:02

本帖最后由 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:}



king1027 发表于 2024-6-8 20:13

然后我还试了“乐玩编程助手”,他也有个防崩溃模式,但他的就可以成功。我反汇编看他的代码,感觉他没有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                                    |

苏紫方璇 发表于 2024-6-9 00:43

我这个注入不了64位进程

苏紫方璇 发表于 2024-6-9 00:55

测试了一下,使用定时器似乎可以忽略异常

king1027 发表于 2024-6-16 20:37

自己研究出来了 https://www.52pojie.cn/thread-1935098-1-1.html
页: [1]
查看完整版本: 远程注入代码如何添加异常保护?