首页
社区
课程
招聘
小弟问个破解无关的问题,CSDN无人解答
发表于: 2004-7-18 11:06 5893

小弟问个破解无关的问题,CSDN无人解答

2004-7-18 11:06
5893
各位前辈,帮我解决一下这个问题
如何hook 类的成员函数,是hook 别人exe里面的
关键就是this指针处理不好,我是这样做的
function=(OLDCALL)0x00436582;
__asm
{ mov ecx, [0x00543652]}
function(agr1,agr2);
我想在进入function里面时能保证ecx里面=[0x00543652]的值。但是编码后的结果
是这样子的
mov ecx,[00543652]
mov edx,[esp+50]
push edx //agr2入栈
mov ecx,[esp+54]
push ecx //agr1入栈
call 00436582
所以在call 00436582的时候我的ecx里面的值不再是[00543652],而是agr1
前辈,如何解决这个问题啊?
有没有办法不用内嵌汇编解决这个问题,谢谢啦!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (7)
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
up
2004-7-18 12:45
0
雪    币: 1241
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
把你的函数换一种声明方式。我不太懂DELPHI。但是你说的问题应该是ecx由于用来作为参数使用的寄存器了,无法达到你想要的目的。
我用C的方法说明一下解决办法:

比如:
ULONG _fastcall Test(void);
换成
ULONG WINAPI Test(void);
2004-7-18 13:23
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这位兄弟好像还没看懂我的问题
2004-7-18 15:16
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
eax,ecx,edx内容是不定的,如果传递用ebx, edi, esi看看...
2004-7-18 15:30
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不是我非得用ecx,因为我是hook别人的程序
别人的程序是从ecx里面取this指针,我当然要传到ecx里面
2004-7-18 15:43
0
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
直接内嵌汇编代码,这是C的写法:
_declspec(naked) void Foo(void)
{
   __asm
     {  
       mov edx,[esp+50]
       push edx //agr2入栈
       mov ecx,[esp+54]
       push ecx //agr1入栈
       mov ecx,[00543652]
       call 00436582
     }
}
2004-7-18 16:10
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
偶就是不想用内嵌汇编的方法哦
2004-7-18 18:31
0
游客
登录 | 注册 方可回帖
返回
//