-
-
代码注入后出错,求解
-
发表于:
2011-3-27 11:34
6143
-
根据下面的连接进行了一个简单的代码注入实验
61fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3S2G2L8h3g2Q4x3X3g2A6L8X3k6Q4x3X3g2X3K9q4)9J5k6s2u0Z5k6h3W2F1i4K6u0V1M7$3W2W2k6#2)9J5k6h3c8W2i4K6u0r3i4K6N6q4K9h3E0S2M7X3W2E0x3Y4y4Q4x3V1k6Z5L8%4M7J5K9h3&6B7k6h3y4@1j5$3!0V1k6g2)9J5c8X3y4G2k6r3g2Q4y4h3k6A6L8X3A6W2j5%4c8Q4x3X3g2Z5N6r3#2D9
就是用OD在代码中添加了一个函数,然后让程序跳到这个函数执行,执行完后返回,然后程序就出错了。
作为实验,那个函数也只有简单的几句。进入函数前做了相关的寄存器入栈保护,返回后普通寄存器值和修改前是一样的。但ST0~ST7的值都被改变了,我把代码注入过程和注入前后软件附上,请大侠帮忙看看,谢谢了!
(1)在00401523处编写函数
(2)在源程序中添加call 00401523
添加前
0401560 . E8 55020000 call <jmp.&MFC42.#540>
00401565 8B46 60 mov eax, dword ptr [esi+60]
00401568 8D4C24 04 lea ecx, dword ptr [esp+4]
0040156C 50 push eax
0040156D 68 20304000 push 00403020
添加call后
00401560 . E8 55020000 call <jmp.&MFC42.#540>
00401565 . E8 B9FFFFFF call 00401523
0040156A . 90 nop
0040156B . 90 nop
0040156C . 50 push eax
0040156D . 68 20304000 push 00403020
(3)应为添加call 00401523后覆盖了两条语句,所以需要在00401523处将缺失的语句补上;又因为执行函数前保存了EIP,所以在函数中涉及到与esp相关的操作均要改为esp+4;下面是00401523处最终的函数
00401523 /$ 50 push eax
00401524 |. 56 push esi
00401525 |. 5E pop esi
00401526 |. 58 pop eax
00401527 |. 8B46 60 mov eax, dword ptr [esi+60]
0040152A |. 8D4C24 08 lea ecx, dword ptr [esp+8]
0040152E \. C3 retn
(4)下面给出程序正常执行到0040156C . 50 push eax和代码注入后程序执行到此处的寄存器数值截图,注意这里ST0~ST7都改变了,而其他普通寄存器都没变。

(5)单击执行代码注入后的程序,显示如下报错。注意代码注入前后0X73D34597处的代码是同样的,代码注入并未其发生改变

这么简单的一段代码注入,都没改变什么参数,竟然发生这种情况,实在想不通,苦思良久毫无结果,不知道什么地方做的不对,请大家帮忙看看....
[培训]科锐逆向工程师培训第53期2025年7月8日开班!