首页
社区
课程
招聘
如何改变程序的流程呢???
发表于: 2004-12-14 11:14 3558

如何改变程序的流程呢???

2004-12-14 11:14
3558
:00402056 6814654100              push 00416514
:0040205B 6810644100              push 00416410

* Reference To: MSVCRTD._initterm, Ord:012Dh
                                  |
:00402060 E873010000              Call 004021D8
:00402065 83C408                      add esp, 00000008

例如如果我想在402060处改变程序的流程,到我的代码中去执行不知道有什么方法!!

我所知道的方法是在程序中增加一个Section,添加你所要执行的代码,然后在程序中
修改402060处的值,使它JMP MyAddress,保持一致,剩下的部分用Nop填充,在执行完
我的程序后面,执行在执行Call 004021D8,然后在Jmp 00402065处继续执行,但是我
觉得这种方法不太好,首先要自己生成一个Section,然后添加要执行的代码,感觉很
繁琐,不知道有没有好的方法呢??

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

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 193
活跃值: (1404)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
int WINAPI MyAddr()
{
   __asm
   {
          pushad
          //do something .....
          popad

          jmp oldnextaddr   ;跳到修改地址的下一条指令,使程序正常执行
   }

}
_asm
{
lea edi,oldaddr    ;保存老的内容
mov esi,wanthookaddr
cld
movsd
movsb
}
newsend[0]=0xe9;
_asm
{
lea eax,MyAddr
mov ebx,wanthookaddr
sub eax,ebx
sub eax,5
mov dword ptr [newsend+1],eax
}

HANDLE hProc;
dwIdNew=GetCurrentProcessId();
dwIdOld=dwIdNew;
hProc=OpenProcess(PROCESS_ALL_ACCESS,0,dwIdOld);
VirtualProtectEx(hProc,wanthookaddr,5,PAGE_READWRITE,&dwIdOld);
WriteProcessMemory(hProc,wanthookaddr,newsend,5,0);
VirtualProtectEx(hProc,wanthookaddr,5,dwIdOld,&dwIdOld);

不知道对否?
2004-12-16 19:29
0
游客
登录 | 注册 方可回帖
返回
//