首页
社区
课程
招聘
[讨论]如何为DLL进行HOOK?以拦截DLL的返回值,将返回值修改这自己所需要的值。
发表于: 2006-11-15 12:56 6351

[讨论]如何为DLL进行HOOK?以拦截DLL的返回值,将返回值修改这自己所需要的值。

2006-11-15 12:56
6351
一个程序要调用一个DLL,从DLL返回数据,我想修改这个返回的数据为自己所需要的。但问题是主程序和DLL都是加了壳的,而且是有自校验的,一脱壳就不能运行。

所以现在想为这个DLL挂个HOOK,将其返回值修改为自己所需要的内容。

但不知道如何写HOOK程序,将其挂钩到这个DLL中。请大家指点指点。
谢谢!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
编程区有不少的例程。可以去那边混混。另外不知道你习惯使用什么语言,对HOOK是否有一定的了解?

加壳和自校验都是可以解决的。HOOK只不过是把原来的脱壳再爆自校验再修改的方式改为,让软件运行的时候再通过HOOK来修改罢了。
2006-11-15 15:10
0
雪    币: 293
活跃值: (110)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
3
Hook这个DLL函数的方法跟HOOK系统函数的方法一样.但问题是你知道你要HOOK的函数的情况么?包括参数个数,参数类型,返回值类型这些.不清楚的话,你怎么写自己的替换函数??
2006-11-15 15:11
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
他只修改返回值,只需要HOOK主程序就行了,看这个返回值是在哪个地方返回的,在这里修改内存中的数据就行了。
2006-11-15 16:06
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
头痛的是这个程序的主程序脱壳后有40M,99%都是垃圾数据。用OD无法分析为汇编代码(分析到31%就死了)。所以无法修改主程序的代码。
我的想法是编一个程序,用这个程序调用这个DLL,这个DLL调入后自动脱壳解压,此时用GetProcAddress得到这个函数的入口地DDDD址。一般是DDDD:JMP XXXX。我想将这个JMP XXXX,改为JMP 本程序.YYYY 。“本程序.YYYY”是自己编写的调用DLL的程序,在本程序.YYYY 加入mov eax,myreturndata,将myreturndata返回就行了。

但不知道如何将原DLL中的JMP XXXX改为自己所需要的代码。因为这是修改另一个代码领空。不知能不能用mov [dddd],JMP 本程序.YYYY 这样的方式直接修改。

还有,此时启动原程序时,不知原程序是不是不再启动这个DLL,而是直接调用已启动的这个已修改过的DLL。如果它重新启动DLL的话,这样的修改也就不起作用了。

头晕啊!
2006-11-16 11:38
0
雪    币: 263
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我只碰过简单的HOOK,只提供个人意见,我觉得3楼说的不错,你只想修改主程序里的返回值的话,直接HOOK主程序,拦截dll返的数值的地方修改,还有程序启动的时候是重新加载dll
2006-11-16 14:01
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
最初由 codename 发布
我只碰过简单的HOOK,只提供个人意见,我觉得3楼说的不错,你只想修改主程序里的返回值的话,直接HOOK主程序,拦截dll返的数值的地方修改,还有程序启动的时候是重新加载dll


关键是主程序无法反汇编,如果能返汇编的话,就可以直接修改主程序了。

还有一点就是,程序启动的时候是重新加载dll。我在写其它程序时,也发现这个情况。但本来DLL设计的目的就是共用的,如果一个程序启动一个DLL,多个程序用同一个DLL的话,岂不是浪费了。我估计是不是程序用loadlibrary来启动DLL的话,是不是就是重启动DLL。如果用GetModuleHandleA的话,是不是就直接调用内存同已存在的DLL了。
2006-11-17 02:40
0
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
8
枚举所有DLL,然后找到相应的DLL,进行HOOK,就可以了,WINDOWS核心编程上关于这个已经说的很详细了,你可以参考下
2006-11-17 10:54
0
游客
登录 | 注册 方可回帖
返回
//