首页
社区
课程
招聘
如何在反汇编一个网络程序后,能够添加反hook功能。
发表于: 2007-4-13 19:11 10526

如何在反汇编一个网络程序后,能够添加反hook功能。

2007-4-13 19:11
10526
通过hook api,可以实现对任何网络程序的封包操作,截获所有网络数据。

一个网络程序,在反汇编后,想在汇编下增加反hook功能。看过《加密与解密》、《win32汇编》后,尝试过给pe文件增加功能。所以感觉理论上增加反hook功能是可行的。

但现在的问题是,抛开反汇编加功能不谈,在网上搜索以后,也没有发现可行的,例如用C++实现反hook功能。

请高手指点一下,谢谢。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 235
活跃值: (29)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
添加CRC对代码的完整性进行校验。

但也只是加大了hook的难度,如果找到CRC验证码,进行更改后,还是可以进行hook的。完全防止被hook好像是不可以的
2007-4-13 20:37
0
雪    币: 235
活跃值: (29)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
不知是不是我没理解楼主的意思,曾加反hook,是完全徒劳的

可以用过滤驱动在底层对数据包进行拦截,你上层做的一切都白费。如在TDI,NDIS,甚至是网卡驱动,直接拦截网卡数据等等
2007-4-13 21:09
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我想问题应该更具体化一点,就比较能说清楚了。应该是我的问题问的不明确,刚才根据楼上的回复,我又查了一下网上的资料。确如楼上所说,完全避免hook,几乎是不可能的。

假如一个外挂程序,要想截获一个网络程序的封包。常用作法是先启动外挂,然后监视系统进程出现欲hook的网络程序,开始截获。不知道我这个假设是否正确。

假如上面的假设成立,那么作为被hook的网络程序,是否有能力检测到系统进程中存在一个欲hook的监视进程。如果能够检测出,就可以让网络程序终止。

当然,也可能网络程序已经运行,然后再运行一个外挂程序,那么如果是这种情况,网络程序自身是否有可能检测出被劫持封包,从而终止运行呢?

上面两个问题,实际上已经不是反hook的意思,而是如何检测是否有软件准备hook,或已经被hook.
2007-4-13 21:53
0
雪    币: 235
活跃值: (29)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5
假如上面的假设成立,那么作为被hook的网络程序,是否有能力检测到系统进程中存在一个欲hook的监视进程。如果能够检测出,就可以让网络程序终止。


如果是这样,可以在网络程序中创建单独的线程或进程,不断的监测自己代码的完整性,如果不完整,即终止程序,干脆加猛壳,驱动等

当然,也可能网络程序已经运行,然后再运行一个外挂程序,那么如果是这种情况,网络程序自身是否有可能检测出被劫持封包,从而终止运行呢?

这种情况就难办了,因为数据包的接受,对网络程序来说很难判断是否被劫持,可不可以在包中加上暗标,然后网络程序进行检测。再者对包数据加上自己研发的算法,等。。但是时间一长,这些东西始终会被发现的。

一场没有终点的战争。
2007-4-13 22:16
0
雪    币: 245
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
防止hook还是防止截取封包啊. 防止截取封包貌似肯定防不住的.如3楼所说,截取封包的方法太多了.

一般将发送出去的封包用个加密算法,不要用常用加密算法,然后将程序加个猛壳. 别人截取到了加密的封包也没用.
2007-4-13 22:28
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢几位对小弟这贴的关注,通过琢磨你们的帖子,又到网上看了下资料,感觉思路比较清晰了。实际上我需要的功能是如何检测是否已被hook.

在网上看到一篇文章,里面提到钩子的原理。安装一个全局钩子,然后获得欲hook的网络程序进程ID,取得需要hook的函数地址,然后修改为跳转到外挂的函数。

全局钩子意味着每个进程内都被插入了钩子代码。现在做一下流程的假设。

首先打开外挂程序,外挂给所有进程都插入了钩子代码。因为是全局钩子,感觉系统进入了一个监听状态,再新打开的程序,都会被自动插入钩子程序,要不怎么叫全局钩子呢。当打开网络程序后,系统也自动给这个网络程序插入了一个钩子。然后钩子代码根据捕获的一个特定事件,取得网络程序的进程ID,根据进程ID,外挂程序又可以取得需要拦截的函数地址,就可以截取封包了。

不知道理解的对不对。假如理解的对,那么是不是可以这样假设,因为外挂首先安装了全局钩子,所以网络程序在装入内存时的一瞬间已经被装了钩子,或者说程序正式开始前已经被装了钩子,那么网络程序是不是可以把运行的第一步实现为,检测自身是否已经被插入了钩子?

呵呵。今天晚上全是猜测。主要是没有理论基础,也无从下手,希望有经验的前辈,在理论层次上给指点一下。
2007-4-14 02:06
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
忍不住还是要问一下。
没有得到回复,是因为问题太弱了,还是我的假设不对。不是不想实践出真知,实在是没有下手的头绪啊。

或者能不能请斑竹给个肯定的答复。哪怕说我的假设纯属胡扯,继续研究。我也会心满意足。没有回复,心里总是不踏实。绝没有要求的意思。
2007-4-19 01:27
0
雪    币: 192
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
这个和HOOK的手段有关,如果不是驱动截取,完全可以通过特征检测,钩子检测,自己做加壳软件偷取关键API的部分代码等来实现.
2007-4-19 08:39
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
10
建议楼主先熟练掌握各种HOOK的技巧 然后自然会有反HOOK办法了.
根据楼主的发言 发现楼主对各种HOOK并不是十分了解
要HOOK一个程序 不一定要安装什么全局钩子 可以远程线程注入 可以修改线程ESP注入代码 甚至可以直接修改PE文件
2007-4-19 08:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
估计lz是做网游的,想反外挂。。。
2007-4-19 08:58
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
收到。感谢各位各位的发言。我又仔细看了一遍我自己在这篇帖子中的发言,正如Nax所说,问题出在我自己对hook的手法不了解上。这就好像反病毒的人,不会写病毒,怎么反病毒呢?

鄙视一下自己,又愚钝了一次。
2007-4-19 13:29
0
游客
登录 | 注册 方可回帖
返回
//