软件破解逆向安全(三)初识HOOK

什么是HOOK?这是逆向工程里的一个大块,我在这里几句话是一定说不清楚的,如果大家想深入了解,可以去学习一下。我这里简单说一下,hook,中文就是钩子的意思,简单理解为勾住一切事物,来实现我们想要的功能。

外挂中的体现:实时读取数据(例如坐标),修改数据,不执行某处代码,过检测等等。

HOOK的方式可以分为:

直接修改,间接修改(找到空白地址写入自己想要执行的数据,原地址的区域做跳转,空白地址出跳转),直接修改。

接下来我们还是请出植物大战僵尸作为今天的实例,我们要做的是种植物而不掉阳光。

首先我们通过ce找出阳光的第一层偏移,这个之前我们做过

我们看一下阳光减少什么访问了这个地址,

之前说过mov esi,[]是非常值得我们关注的地方,看一下地址

到OD里去跟踪427681这个地址看看附近是什么样的代码。

我们可以看到我们把阳光的值给了esi,然后进行了个比较,这个应该是判断阳光的值够不够买植物,如果够,下面的sub就是减少阳光,所以我们要hook此处,这里直接给nop掉就好。

我么种植物去试试

这样我们就实现了种植植物不减阳光了,哈哈哈哈哈。

除了这种方式,我们还可以修改内存地址数据或者远程汇编方式进行HOOK,接下来大家可以试试hook增加阳光100,动起手来非常有意思的。

接下来我们通过间接修改来实现一击必杀,原理就是修改数据。

我们先了解一下在游戏中对象的概念。在游戏里,很多物体都可以叫做一个对象,一个人,一个武器都可以。我们实现一击必杀的原理是什么呢?可以改枪械的威力,对象的血量,或者对象受到攻击的位置,不同游戏描述可能不一样但是原理都是一样的。

 

再次请出我们的受害者植物大战僵尸,我们这回要先找到对象(这里是僵尸)血量发生变化的滴地方,搜索到时候我们是这个思路,植物打到搜减少,没打到搜不变,僵尸血量应该在0-1000之间,我们不断去搜索一下

最后发现了这个,观察了一下,很明显最后一个是僵尸的血量,每次豌豆打会掉20血。我们接着去看看什么地方访问了这个地址。

发现有很多,我们记录一下这里的地址,去od里看看那里可以进行HOOK。

我们可以猜测一下减血的代码,应该是先一个sub,然后一个mov赋值,看看能不能找到。

跟进第一个地址:

发现不是很像我们的猜测,也没什么好改的,看下一个,也没什么,但我们看到54d0c4的时候发现不一般。

发现和我们想象的差不多啊,我们在这里下个断点,看看各个寄存器的值是什么。

植物快打到僵尸的时候断了下来

看下面可以知道,减数是20,被减数是110,很明显是豌豆的攻击力和僵尸血量,下面call上面的mov就是把血量赋值给对象,这样我们一击必杀的思路就有了,直接hook54d0ba地址,赋值直接给0。这时候我们可能就会想直接把ebp改成0,你可以试试改了之后的效果,程序会直接崩掉。所以我们这里需要简介hook,找到一个00 00 00 00。。。的地址空间,我们在那里进行0的赋值,跳到那里再跳回来,这样就实现了我们的hook。

我们在这里找到一块,先把54d0ba处的代码改为jmp 此处,然后我们把mov dword ptr ds:[edi+0xC8],0写到这里,再写一个jmp 54d0ba下面自动填充nop的地址,这样我们就已经hook完成了

接下来我们试试是不是碰一下僵尸就死。这样就成功了,哈哈哈哈哈。

我们也许会有这样一个疑问,我们只改了一个僵尸的地方为什么全部的僵尸全是一击必杀呢?因为我们改的是一个对象,而所有的僵尸在游戏里都是一个对象,都要经过这一块的代码处理,所以我们改了一处就相当于改了所有的僵尸。

我们注重的是原理,理解了植物大战僵尸,其他的游戏也都是差不多的,多多练习,我们有一天会驰骋于游戏之中的,当然这不是我们的目的嘿嘿。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值