|
导言
直入主题,通过找转化CALL谈一些找CALL技巧@永恒光阴
工具预备
[Asm] 纯文本查看 复制代码内存工具:CE7.0游戏本体:AOE II:HD过程分析
分两步,第一步根据游戏内某动作举行逻辑分析,第二步根据逻辑分析举行CE分析
# 逻辑分析
任务:主要是根据游戏动作与CALL的相关性(这一点可以在CE中的Ultimap功能显现),通过拆分游戏动作步骤而找出直接或间接相关数据,从而可以利用CE举行分析
对AOE II:HD的逻辑分析
首先,在游戏中执行僧侣施放转化这个技能的完整动作,通过分析,可以得出一个相近的逻辑过程:选中某僧侣 -> 选中转化技能 -> 选中某敌人 -> 检查转化条件 -> 吟唱过程 -> 吟唱(转化)完成 -> 信念值淘汰
其次,对这些步骤举行分析,找出蕴含的直接或间接相关的数据,好比选中某敌人,可能选中ID(某敌人数据结构的标识)这个数据会改变,也可能选中地址(某敌人数据结构的基址)也会改变,乃至选中/未选中这个标识(某敌人数据结构的状态)也会改变
末了,开始对目标CALL举行正向(找前一个CALL)或逆向(找后一个CALL)的筛选(见总结更详细分析原因),这里我们找的是转化CALL(即要对转化完成过程举行分析),就可以正向对吟唱过程举行分析,大概逆向对信念值淘汰过程举行分析,固然也可以直接对 转化完成过程举行分析,这里对转化完成过程分析并假设敌我存在某种标识来决定转化完成,敌人可以加入我方,所以只需要根据这种标识变化,进程CE分析并找到关键代码
# CE分析
任务:主要是根据逻辑分析阶段找出的相关数据,通过CE工具来查找并找出关键代码,再通过关键代码找出关键CALL
对AOE II:HD的CE分析
第一步,通过查找某敌人血量,来找到某敌人结构的动态内存地区,这里血量偏移是esi+30,esi即为某敌人结构的基址 - 附加阐明:这里所说的基址是相对于动态内存块的开始地址,一般是相对于结构而言,好比人物结构,它包含+4处的ID,+30处的血量等
第二步,通过执行转化动作并监视某敌人结构的动态内存地区,可以看到esi+8处8字节数据发生改变,再找到另一敌人结构的动态内存地区,把esi+8处的8字节数据复制到被转化敌人结构的esi+8处,可以发现esi+8即为某敌人结构的敌我标识
第三步,通过执行转化动作并查找什么改变了esi+8处的值,可以得到关键代码 - 附加阐明:我只对esi+0c处举行了分析,发现结果符合,如有兴趣,可以对esi+08举行分析
第四步,如今开始使用“向上跟踪法”(见我另一篇贴:向上跟踪法)找关键赋值代码,可以得到关键数据来源这个CALL(函数)的第一个参数
这里esp(即栈顶)往低地址移动共5个位+1个位(eip),而esp+18表示第7个位,所以可以获得此CALL存在一个传入参数
第五步,知道关键数据是CALL前push的参数后,我们返回这个CALL,来到调用CALL的层,可以看到CALL前明显的push,对它举行下断点分析,可以分别得到参数含义,这时转化CALL初步找到 - 附加阐明:这里ecx通过与找edi来源时一起分析
第六步,转化CALL找到了,但是这还只是程序的代码段,而我们需要把它变成我们的代码段并对它举行一些操控,因此这里我们需要分析参数的指针来源 - 附加阐明:这里主要对ecx指针来源举行分析,别的参数稳固
通过对ecx找指针(直接搜索ecx值并选择第1个找什么读取了它),可以发当代码 mov eax,[ecx+edx*4] 中的edx的值雷同人物ID,因此我们需要继承找选择ID指针(怎么找?每次选择一个敌人施法技能,选择ID就会改变)
第七步,如许我们就可以控制人物的敌我标识了,脚本如下[Asm] 纯文本查看 复制代码[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem: //this is allocated memory, you have read,write,execute access//place your code here// 首先得到目标ID指针push edipush ebxmov edi,["AoK HD.exe"+527378]mov edi,[edi+70]mov edi,[edi+34]// 其次得到基址指针mov ebx,["AoK HD.exe"+5264DC]mov ebx,[ebx+edi*4]// 末了赋给ecxmov ecx,ebxmov eax,[esi+08]mov eax,[eax+0C]mov edx,[edx+4C]pop ebxpop edipush eaxcall edxjmp "AoK HD.exe"+1413Boriginalcode://mov eax,[esi+08]//mov eax,[eax+0C]jmp newmemexit:jmp returnhere"AoK HD.exe"+1412F:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"AoK HD.exe"+1412F:mov eax,[esi+08]mov eax,[eax+0C]mov edx,[edx+4C]push eaxcall edx//Alt: db 8B 46 08 8B 40 0C
总结
# 对找CALL的明白
找CALL的本质还是归根于游戏动作与CALL的相关性,这里前面已经说过,CE中Ultimap就是一个典型,但Ultimap功能有限许多游戏不能附加,所以还是得回归CE工具的本质-数据分析
因此,我们在游戏动作与CALL之间,通过数据分析来连接它们。这里分析游戏中转化技能得施放动作,可以得到相关数据,接着通过分析相关数据,可以得到关键CALL
# 对找CALL的方法总结
方法无非两种,一种是找直接变化的数据,这个雷同找什么写入(我称之为主相关);另一种是找间接访问的数据,雷同找什么访问(我称之为副相关)
我们对逻辑过程:[选中某僧侣 -> 选中转化技能 -> 选中某敌人 -> 检查转化条件 -> 吟唱过程 -> 吟唱(转化)完成 -> 信念值淘汰]举行分析
1. 主相关举例
过程:此篇找转化CALL就是如此,先找敌我标识,然后得到关键代码,接着得到关键CALL,末了转化为可控制脚本
阐明:这里转化结束会修改敌我标识
2. 副相关举例
过程:先找到信念值数据,然后在信念值未满的情况,使用技能,这时我们可以得到检查条件的关键代码,继承顺藤摸瓜,可以找到其他检查条件:科技树检查、英雄检查、转化检查等
阐明:这里检查条件的关键代码会访问信念值,只有当信念值 >= 100才能成功
# 对正推与逆推的筛选的阐明
正推:一般是分析所找CALL的步骤的前一步骤,固然实在无奈再前一步骤也行
逆推:一般是分析所找CALL的步骤的后一步骤,固然实在无奈再后一步骤也许
实用情况:正推、逆推都是在当对所找CALL无头绪时,对前后步骤分析,可以向所找CALL逼近,而且对无参CALL(全局参数传入情况)特别有用,且对无知有参CALL(对参数不明的情况)也有用
# 对数据的捕捉总结
我把它分为两种:动态数据以及固定命据。动态数据是随游戏某动作而改变的,而固定命据从游戏加载就不会发生改变(这里与静态数据差别),但是它会被访问(不被访问就是“废数据”了)
动态数据常见有
1. 开关式(好比选中/未选中),一般搜0/1
2. 数值式(常见的),按数据范例搜
3. 循环式(在某个自界说范围内增减,而不是数据范例的范围内),只能搜变化数值
4. 特殊式(在几个特殊值之间来回变化),对于有规律情况可以搜增减,对于极端情况只能搜变化数值
5. 共有指针(点击差别的人物出现差别的值,包括各级指针值),这个临时没有好的办法去寻找
6. 相关式(好比:植物大战僵尸的香蒲攻击方式,先遍历,再获取坐标,末了子弹跟踪。这个时间只改子弹跟踪的跳是会崩的),需要找到全部相关值并一起修改
别的待增补......
固定命据常见有
1. 初始化值,好比植物大战僵尸的植物攻击力/攻击隔断/攻击范围等,固定命据的修改只能依靠与它相关的动态数据,并找到它的初始化关键代码
2. 独有指针,好比根据某个动态数据独有的关键代码,找到的指针,它的各级指针是不会变化的(也存在某级指针存在几个值得情况)
3. 静态地区,好比基址的存放处,全局变量的存放处等,可以被间接访问
别的待增补......
以上阐明只是某种做法,可以随不怜悯况而变,但其本质稳固......
End
有题目标接待在帖子下留言,我会找时间帮助解答;也接待别的交换
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|