首页
社区
课程
招聘
[求助]HOOK DLL函数的问题
发表于: 2013-11-13 14:15 5709

[求助]HOOK DLL函数的问题

2013-11-13 14:15
5709
我想Hook住另外一个软件的一个DLL中的函数。
通过修改该DLL函数头5个字节的方法,当调用该函数时,会跳转到我写的函数中来。然后我在我的程序中再调用DLL中的原函数。
但运行后会发生错误。经过调试发现,DLL中的函数会cmp ecx中的值,但在先通过我的函数,然后再进入DLL中原来的函数的时候,发现ecx指向了一个不存在的区域。原来是在我写的函数中,会修改ecx的值。请问怎么样可以让我的程序不修改ecx这些寄存器的值呢? 修改我那个函数的调用约定,也就是stdcall, cdcel这些有用吗?

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

收藏
免费
支持
分享
最新回复 (7)
雪    币: 295
活跃值: (298)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
2
PUSHAD
XXXX
XXX
XX
POPAD
JMP XXXXX
2013-11-13 16:57
0
雪    币: 20
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看不懂哦
2013-11-13 17:57
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
pushad就是让你保存寄存器的值,
进行你的操作,
然后popad还原寄存器的值,
再jmp回原来的函数,这样你跳回去后神马ecx之类的就还是之前的了。
2013-11-13 18:09
0
雪    币: 20
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
但我是用vc写的代码啊。我需要到vc代码里面输入两段汇编代码吗?另外我里面基本上没做操作哦,只是直接就调用dll中原来的函数。
2013-11-13 18:38
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
参考:易失性寄存器、非易失性寄存器
2013-11-13 19:06
0
雪    币: 3858
活跃值: (2187)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
7
void __declspec(naked) __cdecl hook_IsTextA()
是你的归属
参考 https://github.com/lynnux/holyshit/blob/master/common/OD2str.cpp
2013-11-13 19:30
0
雪    币: 14
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
保存一下ecx返回后再还原就行了
2013-11-13 19:57
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册