-
-
代码注入后出错,求解
-
发表于:
2011-3-27 11:34
6004
-
根据下面的连接进行了一个简单的代码注入实验http://home.inf.fh-rhein-sieg.de/~ikarim2s/how2injectcode/code_inject.html
就是用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处的代码是同样的,代码注入并未其发生改变
这么简单的一段代码注入,都没改变什么参数,竟然发生这种情况,实在想不通,苦思良久毫无结果,不知道什么地方做的不对,请大家帮忙看看....
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)