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

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

2004-7-18 11:06
5429
各位前辈,帮我解决一下这个问题
如何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
前辈,如何解决这个问题啊?
有没有办法不用内嵌汇编解决这个问题,谢谢啦!

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

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

比如:
ULONG _fastcall Test(void);
换成
ULONG WINAPI Test(void);
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
阵雨 2004-7-18 15:16
4
0
这位兄弟好像还没看懂我的问题
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2004-7-18 15:30
5
0
eax,ecx,edx内容是不定的,如果传递用ebx, edi, esi看看...
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
阵雨 2004-7-18 15:43
6
0
不是我非得用ecx,因为我是hook别人的程序
别人的程序是从ecx里面取this指针,我当然要传到ecx里面
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
nOpnOp 2 2004-7-18 16:10
7
0
直接内嵌汇编代码,这是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
     }
}
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
阵雨 2004-7-18 18:31
8
0
偶就是不想用内嵌汇编的方法哦
游客
登录 | 注册 方可回帖
返回