本帖最后由 ST手怎么白了 于 2021-10-17 18:32 编辑
一、 写在前面
写在前面我是要讲述一个关于AOB注入原理的文章,因为没有相关的教程,所以我来给大家详细的讲解一下,当然,任何语言最重要的还是动手能力,希望大家能够跟着我的步伐,一步步揭开AOB注入的神秘面纱,篇幅可能较为长,我也进行了一下排版方便大家阅读以及理解,以下我将主要以四个部分为主:
① AOB是什么,他是怎么使用的?
② AOB的原理是什么?
③ AOB可以用在哪些方面?
④ 其他相关的小细节和知识点。
下面我将给大家讲述一下为什么要学AOB注入,我们在逆向分析一些动态数据的时候,比如3D游戏为例,可以更快的捕捉到想要的代码行,实现动态调试修改,其他没有讲解到的地方我会在下一次的教学中进行补充。
二、 AOB注入是什么东西?
我们现在来简单的了解一下AOB注入是什么,AOB注入全称为Array of byte Injection(字节数组注入);在这里我附加进程的操作我就不去一一讲解,我简单的给大家描绘了一幅关系图,这样看起来就一目了然了。
知道了他的原理后,那么我们该如何去使用他呢?
1.我们附加进程后,我们选择相关的数据进行分析
2.然后我们在游戏当中,让这个数值动一下,我们可以看到此时的指令发生变化
3.点击任意一个指令后,我们选着右边的【显示反汇编程序】
4.我们在打开显示反汇编后,我们可以右键-选择当前函数即可查看相关的汇编函数,是不是特别方便呢
5.我们现在可以看到这一部分都是我们想要的代码,不需要我们一个个去分析,只需要分析这部分
6.现在,我们可以在菜单栏-工具-选择【自动汇编】
7.在菜单模板,我们选择AOB注入
8.然后就会弹出一个要你输入需要注入的地址,所以我们拿到地址后,可以快速定位到需要修改的地址
我们直接点击确定即可,因为我们是在在反汇编中选择了当前函数(见第四步)
9.此时系统自动生成了一个AOB模板,大家不要懵逼,我给大家梳理一下,主要的模块
10.此时我们在第一部分我们可以看到aobscanf,这个就是字节数组,自动定位的地方,在整个软件中,具有唯一性
那么,我们要如何验证这个字节数组的唯一性呢?
我们复制该处的字节数组
然后我们按图中的步骤进行操作,我们可以看到地址中只是显示一个数组。
我们可以看到,下面的数据与我们的地址,即使字节数组与数据窗口一致,只不过一个是汇编显示,一个是字节数组显示,但是结果都相同
11.我们在此处设置断点,然后我们返回游戏被攻击一下,此时的画面已经断了下来,因为这个游戏中的摄像头对我们的人物造成一个伤害,我们需要把他给AOB注入掉
12.我们在分析的过程中,我们遇到了在此函数块的JNE跳转,那么这个十六进制代表的是什么值呢?我们继续分析下看看
13.我们对这段代码和寄存器结合,发现了一个可疑的数值,因为这个地址和我们被攻击的数值一模一样
14.我们对这段JN代码进行一个强制跳转,现在我们发现我们被攻击不掉血,证明我们的猜测是正确的,那么这个判断就是判断是否在这个范围内进行攻击,我们把他跳过去就不会扣血了。 15.我们主要在在newmem中写代码就可以了,其他位置不用变。
16.写好后,我们在菜单栏的文件中,点击分配到CT表
17.回到CT表中,我们可以发现,当我们点击锁定时,OD中发生了变化,那么这就是我们的AOB注入。
|