能力值:
( LV2,RANK:10 )
|
-
-
2 楼
编程区有不少的例程。可以去那边混混。另外不知道你习惯使用什么语言,对HOOK是否有一定的了解?
加壳和自校验都是可以解决的。HOOK只不过是把原来的脱壳再爆自校验再修改的方式改为,让软件运行的时候再通过HOOK来修改罢了。
|
能力值:
( LV9,RANK:410 )
|
-
-
3 楼
Hook这个DLL函数的方法跟HOOK系统函数的方法一样.但问题是你知道你要HOOK的函数的情况么?包括参数个数,参数类型,返回值类型这些.不清楚的话,你怎么写自己的替换函数??
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
他只修改返回值,只需要HOOK主程序就行了,看这个返回值是在哪个地方返回的,在这里修改内存中的数据就行了。
|
能力值:
( 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的话,这样的修改也就不起作用了。
头晕啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我只碰过简单的HOOK,只提供个人意见,我觉得3楼说的不错,你只想修改主程序里的返回值的话,直接HOOK主程序,拦截dll返的数值的地方修改,还有程序启动的时候是重新加载dll
|
能力值:
( LV9,RANK:180 )
|
-
-
7 楼
最初由 codename 发布 我只碰过简单的HOOK,只提供个人意见,我觉得3楼说的不错,你只想修改主程序里的返回值的话,直接HOOK主程序,拦截dll返的数值的地方修改,还有程序启动的时候是重新加载dll
关键是主程序无法反汇编,如果能返汇编的话,就可以直接修改主程序了。
还有一点就是,程序启动的时候是重新加载dll。我在写其它程序时,也发现这个情况。但本来DLL设计的目的就是共用的,如果一个程序启动一个DLL,多个程序用同一个DLL的话,岂不是浪费了。我估计是不是程序用loadlibrary来启动DLL的话,是不是就是重启动DLL。如果用GetModuleHandleA的话,是不是就直接调用内存同已存在的DLL了。
|
能力值:
( LV2,RANK:150 )
|
-
-
8 楼
枚举所有DLL,然后找到相应的DLL,进行HOOK,就可以了,WINDOWS核心编程上关于这个已经说的很详细了,你可以参考下
|
|
|