目录

指针扫描

0x00 Target

  • 【基地址】+【偏移】+【偏移】+…=【偏移地址】
  • 【Target】是【Winform】窗体;
  • 【Winform】标题是【Form1】;
  • 【button】功能是刷新【label】;
  • 【label】标签用来显示【int类型】测试变量,测试变量的【初始值】为9528。
  • 以下源代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
    public partial class Form1 : Form
    {
        //
        int Num = 9528;
        //
        public Form1()
        {
            InitializeComponent();
        }
        //
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = Num.ToString();
        }
        //
        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = Num.ToString();
        }
    }

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-0d07ba74ba988017049d84b0caa2b2f2_1440w-20220117165733028.jpg

0x01 偏移地址

  • 查找变量【当前值】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-bde04357baa2b91e4eda0a43c6625ce8_1440w.jpg

  • 筛选出能改变 【Target】的【偏移地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-184c68a0a5d62df017c057b516f5b3b5_1440w.jpg

  • 此次得到【偏移地址】为【02BB5960】。

0x02 指针扫描

  • 对【02BB5960】进行【指针扫描】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-1f0f63def1cea88d595e38eaeaeefe6f_1440w.jpg

  • 默认扫描【最大偏移值】4095,默认【最大偏移层次】7层:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-f7bcb0c916e8955993a27edf1ab0cf43_1440w-20220117165704897.jpg

  • 选择【*.PTR】文件保存位置:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-45d39d8f2fcab60127575e46f0b21d33_1440w-20220117165659317.jpg

  • 总共扫描【336422】个指针,下列的是【符合条件的指针列表】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-f116e781b957b15c36f0f82e4c2773d5_1440w-20220117165654654.jpg

0x03 多次筛选

  • 为了避免偶然性,我们重启【Target】以改变【偏移地址】,然后在【符合条件的指针列表】中再一次进行【指针扫描】。新的【偏移地址】是【030B5960】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-ab3c43ed84b671fdfcfa857a4a6e4ac0_1440w-20220117165645492.jpg

  • 打开从【符合条件的指针列表】再次扫描界面:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-ebdaf1228dbee4c2b2ba5d40287644d1_1440w.jpg

  • 填入新的偏移地址【030B5960】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-0083444cf6eedb94411d4a84e3b78874_1440w-20220117165637721.jpg

  • 选择【*.PTR】文件保存位置,覆盖上次文件即可:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-77541017b4620db96fa151fd7e4fb35c_1440w-20220117165632859.jpg

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-bf33c46b13f025ad52c06def04181cfe_1440w.jpg

  • 总共扫描【6648】个指针,下列是【此次符合条件的指针列表】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-124f990aa6523552c049fa4d6a2f9100_1440w.jpg

  • 【再次扫描】这个步骤,一般重复三到五次,多多益善。

0x04 测试

  • 多次扫描后,在新打开的【CE】中按住【Ctrl】,依次点击【M】【P】【O】键,然后导入【*.PTR】文件:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-b398354fda83070e6ffde648f003e64b_1440w-20220117165623334.jpg

  • 观察【Points to】列,值为的表示这不是一个真正的【基地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-8208e1244722f837421eee2c9a710eed_1440w-20220117165610852.jpg

  • 【双击】选择一个【Points to】列的测试值的【基地址】,将自动添加到【CE】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-a41d5eaa9ea07ea4e22b88ee54322866_1440w-20220117165606094.jpg

  • 通过该【基地址】,将指向的值更改为【6666】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-f82a21abd2d628bd94d31e23aeda3cf6_1440w.jpg

  • 刷新【Target】,检验是否是正确的【基地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-614f86b3ffe3009c02ba718811ede9e0_1440w-20220117165557311.jpg刷新前

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-466550b6f6a311938abdb796b079326a_1440w-20220117165552868.jpg刷新后

  • 经检验,是正确的【基地址】。

0x05 CT

  • 将【基地址】以【*.CT】形式保存到本地:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-d368bb29c0373146b44f1a903e601c4a_1440w.jpg

  • 导入【*.CT】,使用【基地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-2c7f390039ca5d57f9f86b254088eb6a_1440w.jpg

  • 通过【基地址】成功读取到【测试值】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-793a3336a4dde08927b7577a14013bc6_1440w.jpg

0x06 实战

  • 练手经典游戏【植物大战僵尸】的【阳光基地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-e39d373b840be576bec08a6b3aa89bf5_1440w.jpg

  • 为了准确,首先制作两个【阳光偏移地址】的【Generate Pointermap】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-f088e615f8c4e39758d64e27e454fc29_1440w.jpg然后关闭游戏再来一次

  • 两个【阳光偏移地址】的【Generate Pointermap】制作完成:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-dd3620acc6bdbb3765ca49c0ff55689f_1440w.jpg

  • 然后查看是哪个地址改写了第二个【阳光偏移地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-582fcf6306910b3c73371fbe3c7507f3_1440w.jpg

  • 捡一个阳光,然后获得一条改写记录,双击此记录:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-65d5d1fe856d8820520de1d4bfa6cc96_1440w.jpg

  • 因为【上个地址】+【偏移】指向第二个【阳光偏移地址】,所以我们得到第二个【阳光偏移地址】的最上层偏移是【5578】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-5b4da60189b4465b913b916ab8c28723_1440w.jpg

  • 接下来,对第二个【阳光偏移地址】进行【指针扫描】,设置如下:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-3e10614e0559cc814b02fd05a206157d_1440w.jpg

  • 将扫描结果保存为【PVZ.PTR】,扫描得到【32417】个有真有假的【阳光基地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-f114969d65475cf229c30307e5fd2ed1_1440w-20220117165523474.jpg

  • 现在将当前阳光【25】变动为【75】,然后再次对【PVZ.PTR】进行扫描:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-1b317ff99b8be60db62636550a5f871b_1440w-20220117165519032.jpg

  • 现在剩余【18011】个有真有假的【阳光基地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-80f3db62d1086c2fac863d34a31e1f84_1440w.jpg

  • 再次将当前阳光【75】变动为【100】,然后对【PVZ.PTR】进行扫描,发现梯度已经不再下降,我们开始对【阳光基层偏移】进行【排序】,以便我们找到最短最有效的【阳光基地址】。
  • 按照下图序号依次点击排序,最后我们找到了最少偏移个数的阳光基地址【“THREADSTACK0”-00000568】,实际上阳光基地址有更简单的,这种方法没有搜到,将当前阳光【100】变动为【75】测试一下:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-6948978dde5ae69743d07989ad7494bc_1440w-20220117165511870.jpg

  • 【“THREADSTACK0”-00000568】+【0】+【8】+【5578】>【阳光偏移地址】:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-09b62fa5ad227ccf7140f5009be3518d_1440w.jpg

  • 现在重启电脑后,再重启游戏进行测试:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-bf56cbc9027cdbb8d9ea36f8904325c4_1440w.jpg开始游戏前

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-904ff3c3af614c3585ce9fbd5ea130d5_1440w.jpg开始游戏后

  • 【“THREADSTACK0”】是【线程地址】,我们可以通过【threadstack.exe】工具转换【线程地址】成一个【内存地址】,这样便于写工具,当然使用【进程基地址】就没有这个麻烦:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-062a84c020dba11aa9d5efd09a837448_1440w.jpg

  • 也就是说:
1
2
3
4
5
【"THREADSTACK0"-00000568】+【0】+【8】+【5578】>【阳光偏移地址】

等价于

【0x0019ff7c-00000568】+【0】+【8】+【5578】>【阳光偏移地址】

  • CheatEngine是我随便下的。