|
导言
直入主题,通过找转化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
|