12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 287|回复: 0

[原创] CE基础-CALL找法:帝国时代2之转化CALL

[复制链接]

305

主题

305

帖子

620

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
620
发表于 2020-7-15 08:06:00 | 显示全部楼层 |阅读模式
导言
  直入主题,通过找转化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
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-25 08:26 , Processed in 0.078125 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表