首页
社区
课程
招聘
请教各位牛人一个问题
2005-11-29 00:10 3697

请教各位牛人一个问题

2005-11-29 00:10
3697
目标进程中的一段代码如下:
0047E2A2   |> \5F       pop edi                                   ;  到此解密完毕
0047E2A3   |.  5E       pop esi
0047E2A4   |.  5B       pop ebx
0047E2A5   \.  C3       retn
0047E2A6       90       nop
0047E2A7       90       nop
0047E2A8       90       nop
0047E2A9       90       nop
0047E2AA       90       nop
0047E2AB       90       nop


现在我在我自己的程序中动态修改OO47E2A2处的代码
MOV EAX, 我自己定义的函数地址
JMP EAX

就是让目标进程在指定位置跳到我自己程序的函数中,以执行我自己定义的函数,我的函数的作用就是先还原目标代码,然后再CALL 0047E2A2以期望目标进程继续执行,可是现在的问题来了,我发现当执行到0047E2A5 retn后程序出现异常,就是RET到一个未知位置了,请问各位如何才能使我的程序正常返回,并使目标进程继续正常执行呢?请各位指教一下,感谢!
下面是我的程序中定义函数:(我把完整的注释给加上来今天,忘各位相助)

TMyProc = function:integer; stdcall;//这是MyProc的定义

function MyProc:integer; stdcall;   //这是MyProc实现
var
  dwSize: cardinal;
begin
  WriteProcessMemory(ProcessHandle, //目标进程句柄
                     AddOldProc,    //目标进程中被修改的地址,为0047E2A2
                     @OldProc[2],   //目标进程原数据保存结构体
                     8, 
                     dwSize);//整个这个函数的目的很简单,恢复目标进程中被修改的代码
  
  
*************问题就在这个调用里***********************
  Result := Old;  //Old的定义; AddOldProc := pointer($0047E2A2);
                  //            Old: TMyProc;
                  //            Old := AddOldProc;
                  //这个调用是希望跳到目标进程0047E2A2处,执行目标进程原始的代码
//问题的原因其实就的堆栈被破坏了,但是我不知道如何做才能不破坏堆栈,使目标进程继续执行
*************问题就在这个调用里***********************
  
  WriteProcessMemory(ProcessHandle, 目标进程0047E2A2处地址, @MyProc, 8, dwSize);  //再修改目标进程代码,以期望下一次继续跳到我的函数中

end;

不知道我的注释是不是很清楚了,烦请各位看一看,谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (6)
雪    币: 116
活跃值: (220)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
xIkUg 9 2005-11-29 00:19
2
0
堆栈被破坏了。。。楼主最好帖出完整的代码,才好帮你找问题。。。
雪    币: 513
活跃值: (2228)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
loveboom 53 2005-11-29 02:38
3
0
有借没还,肯定摆脸色你看
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
redphoenix 2005-11-29 09:12
4
0
看不懂 loveboom  老大的回帖是什么意思,呵呵,我太笨请谅解
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
prince 16 2005-11-29 10:44
5
0
Google 平衡堆栈
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
redphoenix 2005-11-29 12:39
6
0
虽然我知道堆栈平衡被破坏,但是还是不得要领。
要是修改目标进程CALL倒是不会出现问题,但是为什么这样就会出现这样的问题呢
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
redphoenix 2005-11-30 08:39
7
0
看来这个问题问题又要在无声沉小去了,不过我最后用了笨方法,手工平衡了堆栈,也算解决这个问题了吧
游客
登录 | 注册 方可回帖
返回