-
-
连连看逆向分析之新花样-A星算法
-
发表于: 2022-7-15 22:14 5494
-
目前已经有很多帖子都分享过连连看逆向分析心得,这次玩点新花样,通过A星算法计算路线,使其连续不止只能转折两次,效果如下图
【注】:由于整体分析篇幅太长,无法提交成功,所以截取最后寻找连线特效位置和连线点位置上传;具体分析报告以及x32dbg分析注释还有程序和hook代码附件上传,感兴趣的朋友可以下载分析
【概括】:总的步骤是找到数组存储连线的坐标点,默认位置大小只能放下4个点坐标,所以连线只能转两个弯;hook就自己A星计算合适的坐标;然后找到调用这些坐标绘制连线特效的位置,将自己构造的坐标点传入绘制,就能实现只要相同的图案,只要路线没有障碍物阻断,就能连线
5.分析点击两个图标消除时候连接转弯的次数和特效;希望能够达到只要是通路就能够多转折连接。
【如何实现A星寻址实现多转弯连接消除】
1. 需要知道这样一个地址存在0x12AAC8
2. 这个地址将传送到执行连接效果得代码之中
3. 以下分析连接效果代码得执行
3.1 如何获取到下面函数呢?根据判断0x12AAC8的第一位成员0x14,以及猜测,在所有逻辑都判断完的情况下(两个值是否相等,是否可以连接,连接点坐标等等),还将这些数据复制出来一份就很可疑了,尝试对这个地址里的坐标下访问断点以及观察消除时候0x14的变化,猜测可能在连接的时候使用到这些数据
3.2 一开始分析会如何连接?看到使用了DC对象,对画图的API下段,MoveTo/LineTo/等一些列API,但是都没能确定到连线是如何实现的;只能不断的尝试,并观察当前所知道的数据内容(0x12AAC8这个地址数据、复制给0x12AAC8的存储点击坐标信息的结构体数据、坐标地图数组数据等)
3.3 发现到调用连接画线的地方就好办,分析调用哪些数据绘制(点坐标必然的,主要分析哪里的点坐标)因为我的目的是修改这些点坐标,实现多转弯绘图,意思只要A星能寻到并且是相同的图标,则能够连接成功并且连线特效也存在
4. A星算法后Hook的位置
4.1 Hook的位置,对比图标是否相同后,判断连接的个数后
1.2 Hook的代码我们需要自定义一个传入执行连接效果使用的坐标点数组,然后让执行连接的时候执行我们的数组内容;
1.3 如果Hook前判断的连接坐标是4个以内,那么直接将复制到0x12AAC8的数据复制到我们自定义的数组中,然后返回继续执行
1.4 如果Hook前判断的连接坐标是大于4个,首先使用A星算法,计算能否连接并且获取连接的坐标点,存入自定义数组中,返回执行
1.5 还需要注意:返回继续执行代码的时候,会多次使用到存储连接坐标点信息结构体内的坐标点个数和起点坐标和终点坐标(他们之间的关系会根据坐标点的个数来偏移查找终点坐标)
1.6 所以当连接坐标点大于4个的时候,这个结构体的连接坐标点数量是0,因为它无法连接,所以我们需要修改到4(因为最大是4,后面有多个判断),并且将终点坐标修改到存储第4个坐标点的位置(因为后面会根据坐标点个数从起点坐标偏移获取终点坐标)
1.7 做完以上工作后,需要处理实现连接效果的代码,由于是通过固定基址+偏移获取到每个坐标点的,所以修改偏移的数据,指向我们自定义的数组地址(第一个值0x14使用0x12AAC8的)因为会根据这里的判断特效的消失情况
1.8 然后最后判断几个坐标点连接修改成我们当前A星算法获取的坐标点个数即可
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)