寻找突破口
1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变
2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果
3.接下来我们操作试一试这个思路可不可以
4.点击首次扫描,可以搜索到很多值,这个时候我们并不知道装备栏存的是对象还是ID,我们就通过改变或者未改变来筛选结果
5.然后穿或者托装备,继续用CE搜索变动的值,因为肯定有个值在记录这个装备的信息,比如我们上面说的装备对象或者装备ID之类的
6.当我们不断的过滤扫描后,发现结果变少了,但是还是很多,那么我们就可以在穿上或者脱下装备的情况下筛选结果数量,这里尤其注意我们穿上脱下的装备是同一个!
7.好了,经过我们的不变筛选,最终的结果很少了,但是还有1000多个,这样也不利于我们找数据,我们也观察到在这1000多个结果中绝大多数都是类似ID而不是地址
8.那么我们想一下会不会存的就是装备的ID呢?那么我们就需要拿到之前我们将的背包遍历中的装备ID:1C5E2DD9BCC88FD6,拿到【木剑】装备的结构体地址,我们在XDBG查看内存值,这个结构体首地址+0的偏移的地址存的值1C5E2DD9BCC88FD6就是ID
9.这里我也开发了一套传奇M脚本SDK,我们点击背包遍历可以看到【木剑】这个装备的ID是1C5E2DD9BCC88FD6,这个ID我把他命名为CID
10.好!确定了ID,我们直接CE搜索这个ID值,注意在穿上装备的情况下
11.惊奇的发现,结果变为了0!!!what?弄下嘞?老师你在逗我呢?害我看那么多文字,结果不对
12.额额额,这里我要说明下, 我们要学会培养同学们的思考问题的能力,所以我在分析正确之前必须要讲一下这个,因为绝大数同学都会这样搜索!
正确突破口
1.上面我们观察到ID是不行了,难道是对象吗?
2.经过我们搜索对象来回变动也不行,难道我们没有别的突破口呢?
3.其实是有的,还有两种方法,第一种是通过脱装备CALL来需要参数的来源,因为脱装备的流程肯定会去遍历装备栏,这种方式是最简单的,但是需要先找到CALL
4.还有一种方法是通过一种搜索值的潜规则!
5.好!既然要写好帖子那么就用最不常用的方法的给大家讲下这个潜规则是什么意思
6.他这个装备栏其实的存储规律是,当穿装备的时候才会分配内存
7.而当脱装备的时候,之前穿的时候分配的内存是不会被销毁的!
8.换一句话说我们在首次搜索未知初始值后,当穿装备才用变动的值搜索,当脱装备的时候要用未变动的值搜索!!!这里就是核心关键点!相信很多同学都不太明白这里
9.其实呢!我们还可以通过一个现象去观察到,就是这款游戏很奇怪!不知道同学们发现没?当我们穿装备的时候游戏会卡顿一下,而当我们脱装备的时候会比较流畅一点,那么我估计和我说的那个潜规则有关系,这里也只是猜测!
10.好了废话不多说我们来搜索看看,记住我说的“当穿装备才用变动的值搜索,当脱装备的时候要用未变动的值搜索”
11.首次搜索位置初始值,结果有很多
12.然后通过我说的“当穿装备才用变动的值搜索,当脱装备的时候要用未变动的值搜索”,关键点就是脱的时候要用未变
13.通过不断地搜索改变,搜索出来的结果如下,发现就还有100多个结果,非常好!
14.这个时候我们拿到这些地址在XDBG观察这些值,结果在第二个地址就发现了我们需要的
15.查看穿装备的时候这个内存的变化
16.当我们脱下发现这个值不会变的
17.然后当再次穿装备,就会发现变动了
18.这个时候就需要再这个地址下写入断,看看能找到遍历吗
19.发现r15地址挂在一个UI控件相关对象上,这样就不对了,我们需要换一个思路,既然UI上挂这个r15地址,那么我们用CE搜索这个分配的内存地址,看看遍历应该也会挂着这个地址
20.注意分配的地址不是r15是写入的那个地址值
21.CE搜索到18个结果
22.一个一个观察,然后下断就可以找到遍历了,这里就比较简单了
23.找到一个结构体首地址,那么这个就是了
24.看一下内存,0x10结构体存的是装备栏中存装备的2个对象,我们之前搜索的就是第一个对象
25.下写入就可以来到遍历的地方了
23.好了!这一贴我们就讲完了,主要是介绍一种机制和一种CE搜索内存值的方法,可能不是最好的但是我们需要去了解它,这样才会以便不必只需
24.感谢支持迪大学院,希望多多点赞和关注,后续还有很多帖子不定时更新285530835