吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15870|回复: 33
收起左侧

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

  [复制链接]
御坂00001号 发表于 2020-3-24 14:53
本帖最后由 御坂00001号 于 2020-4-16 17:17 编辑

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


       1-1.PNG

      第二步,通过执行转化动作并监视某敌人结构的动态内存区域,可以看到esi+8处8字节数据发生改变,再找到另一敌人结构的动态内存区域,把esi+8处的8字节数据复制到被转化敌人结构的esi+8处,可以发现esi+8即为某敌人结构的敌我标识

      
1-2-1.PNG

      
1-2-2.PNG
      

     第三步,通过执行转化动作并查找什么改变了esi+8处的值,可以得到关键代码 - 附加说明:我只对esi+0c处进行了分析,发现结果符合,如有兴趣,可以对esi+08进行分析

       1-3.PNG

      第四步,现在开始使用“向上跟踪法”(见我另一篇贴:
向上跟踪法)找关键赋值代码,可以得到关键数据来源这个CALL(函数)的第一个参数

       2-1-1.PNG

     这里esp(即栈顶)往低地址移动共5个位+1个位(eip),而esp+18表示第7个位,所以可以获得此CALL存在一个传入参数

       2-1-2.PNG

      第五步,知道关键数据是CALL前push的参数后,我们返回这个CALL,来到调用CALL的层,可以看到CALL前明显的push,对它进行下断点分析,可以分别得到参数含义,这时转化CALL初步找到 - 附加说明:这里ecx通过与找edi来源时一起分析

       2-2-1.PNG

      第六步,转化CALL找到了,但是这还只是程序的代码段,而我们需要把它变成我们的代码段并对它进行一些操控,因此这里我们需要分析参数的指针来源 - 附加说明:这里主要对ecx指针来源进行分析,其它参数不变
      通过对ecx找指针(直接搜索ecx值并选择第1个找什么读取了它),可以发现代码 mov eax,[ecx+edx*4] 中的edx的值类似人物ID,因此我们需要继续找选择ID指针(怎么找?每次选择一个敌人施法技能,选择ID就会改变)

      
       2-2-2.PNG

      第七步,这样我们就可以控制人物的敌我标识了,脚本如下
[Asm] 纯文本查看 复制代码
[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat
alloc(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 edi
push ebx
mov edi,["AoK HD.exe"+527378]
mov edi,[edi+70]
mov edi,[edi+34]
// 其次得到基址指针
mov ebx,["AoK HD.exe"+5264DC]
mov ebx,[ebx+edi*4]
// 最后赋给ecx
mov ecx,ebx
mov eax,[esi+08]
mov eax,[eax+0C]
mov edx,[edx+4C]
pop ebx
pop edi
push eax
call edx
jmp "AoK HD.exe"+1413B

originalcode:
//mov eax,[esi+08]
//mov eax,[eax+0C]
jmp newmem

exit:
jmp returnhere

"AoK HD.exe"+1412F:
jmp newmem
nop
returnhere:


 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"AoK HD.exe"+1412F:
mov eax,[esi+08]
mov eax,[eax+0C]
mov edx,[edx+4C]
push eax
call 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
  有问题的欢迎在帖子下留言,我会找时间帮助解答;也欢迎其它交流

免费评分

参与人数 11吾爱币 +16 热心值 +10 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
DC君 + 1 + 1 我很赞同!
弗雷迪 + 1 + 1 谢谢@Thanks!
马叉虫233 + 1 + 1 哈哈 俺就是修改爱好者
app740520 + 1 + 1 热心回复!
Pancoes + 1 + 1 我很赞同!
xmztz + 1 + 1 谢谢@Thanks!
Reo_52 + 1 + 1 我很赞同!
wanfon + 1 + 1 用心讨论,共获提升!
天上飞来一只 + 1 热心回复!
永恒岁月 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 御坂00001号 发表于 2020-3-24 21:05
永恒岁月 发表于 2020-3-24 20:54
我选中单位,然后点注入call,但没反应,就是敌人士兵并没有转成我方士兵,我现在在琢磨,弄了半小时。要 ...

自然没反应的,你看看逻辑过程:选中目标 -> 吟唱 -> 转化完成。此篇只分析转化完成的CALL,即把敌我标志改为我方标志的CALL,这个注入要吟唱开始后才有效。如果你要选中目标就吟唱,就必须找吟唱CALL。你可以试试此篇总结部分,把游戏动作和CALL通过数据联系起来,看看那些数据是变化的,或者访问的。目前没多少时间去做这个了
 楼主| 御坂00001号 发表于 2020-3-24 22:29
本帖最后由 御坂00001号 于 2020-3-24 22:32 编辑
永恒岁月 发表于 2020-3-24 21:15
我选择我方的士兵,然后让敌方僧侣来转换,吟唱开始后开启ct,然后敌方僧侣转换我方士兵不成功,测试到了 ...

最好自己先多研究会,一个方面不行找另一个方面,一个思路不行换另一个思路。我经常会思考一个问题一天甚至几天,期间思考半天或一天不通,就找些资料或者灵感,然后继续。基础理论很重要,但基础理论的扎实是需要大量实战或研究(或者有少数有质量的实战或研究)才能巩固的。基础理论搞好,后面搞进阶的就容易多了
freeflys 发表于 2020-3-24 15:04
永恒岁月 发表于 2020-3-24 15:13
我正在学着像你这样找call来修改游戏。但想提前问一下,你转换的人物尝试让他死亡看游戏是否会闪退?
 楼主| 御坂00001号 发表于 2020-3-24 16:10
永恒岁月 发表于 2020-3-24 15:13
我正在学着像你这样找call来修改游戏。但想提前问一下,你转换的人物尝试让他死亡看游戏是否会闪退?

不会啊,可以正常被死亡
 楼主| 御坂00001号 发表于 2020-3-24 16:12
freeflys 发表于 2020-3-24 15:04
楼主的研究精神令人佩服

有扎实的基础理论支持,多研究,也就是多实战,才能继续回馈基础理论
 楼主| 御坂00001号 发表于 2020-3-24 16:19
永恒岁月 发表于 2020-3-24 15:13
我正在学着像你这样找call来修改游戏。但想提前问一下,你转换的人物尝试让他死亡看游戏是否会闪退?

你只要分析好参数的含义,并取得它的控制权,是不会改变它的逻辑的,不改变逻辑自然不会崩了。这种情况游戏崩的话可能是你固定了一个变化的值。当然受特殊保护的除外
赤座灯里 发表于 2020-3-24 16:28
我是御坂20001号
永恒岁月 发表于 2020-3-24 19:43
本帖最后由 永恒岁月 于 2020-3-24 19:45 编辑

我试着直接使用帖子最后那个call,但没效果,是不是这call还欠缺一些东西需要我补齐的?
 楼主| 御坂00001号 发表于 2020-3-24 20:09
永恒岁月 发表于 2020-3-24 19:43
我试着直接使用帖子最后那个call,但没效果,是不是这call还欠缺一些东西需要我补齐的?

你怎么使用的?你想达到什么效果?
 楼主| 御坂00001号 发表于 2020-3-24 20:12
永恒岁月 发表于 2020-3-24 19:43
我试着直接使用帖子最后那个call,但没效果,是不是这call还欠缺一些东西需要我补齐的?

你先看两个指针是否正确?或者你下个断,然后改变ecx为另一个敌人的地址,看是否转化了另一个敌人
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-31 01:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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