12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 407|回复: 0

【原创】CEAA的使用--Run!ZombieFoods! 游戏的分析

[复制链接]

303

主题

303

帖子

616

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
616
发表于 2019-8-19 10:56:19 | 显示全部楼层 |阅读模式
Run!ZombieFoods! 游戏的分析

工具


  • Cheat Engine 6.8.1
  • OD
前言

本人小白一个,对逆向感兴趣。懂一点汇编,就是那种只能看懂mov指令的那种。一直以来学到的都没记录下来,写这篇文章算是一个实践总结。
来源

前天看论坛的一篇文章。文章链接
https://www.52pojie.cn/thread-1004493-1-1.html
用CE分析的一个游戏。
里面有一个不是很理解的地方。存放"汉堡"的地址是直接写在汇编中的。也就是一个立即数。
看下图就是那个游戏分析"汉堡"时的一个截图。("汉堡"是游戏里面的一个消耗品)

图中10DA1EEC地址就是保存"汉堡"的。
第一直觉告诉我这是就是存放"汉堡"的基址。因为它在汇编语句用是一个立即数。应该每次重启游戏都不会变。当时就想这"游戏好简单"哪,下载下来分析一下。顺便做一个CT。
看下面评论也是众说纷纭的看的心里痒痒。想马上下载看一下。
对,没错。下载游戏后过来被教育了。
第一次见这样的代码。没见过这样玩的啊。
就刚刚上图那个标红的那条汇编指令的立即数会变。每次打开游戏都会变。
mov ecx,[10DA1EEC]哎!刚刚还想着这游戏分析简单的。顿时懵了。这怎么定位基址呢。
基址直接就写在了汇编语句中,还会变。算了,小白不想那么多了。
想着想着。就跑偏了。
想知道这是怎么回事,上网搜也搜不到啊。
不知道为什么脑袋里突然就出现了一段代码
#include #include int *p = (int *)malloc(sizeof(int));int main(){    *p = 1;    while(true){        printf("*p now is: %d\n", *p);        (*p)++;        Sleep(1000);    }    return 0;}这样是不是就会实现那个游戏的汇编指令那样。每次打开程序p的地址都会变。
Too young To simple。根本就不是。
这个程序反汇编后这下图这个样子。
代码也不多,语句也简单对着源码一看就明白。

好吧,搞清这件事有点难,放一放。再回来看看怎么分析游戏的"汉堡"吧。
尝试

看看这游戏也不甘心。再看看吧。
之后看见论坛有人回复的评论说用aobscan可以解决。
之后就有了以下思路(挖坑)
> 0. 先学习一下ce的自动汇编和aobscan
> 1. 找一个特征码
> 2. 寻找定位"汉堡"地址的关键位置
> 3. 编写代码,把"汉堡"地址,放到一个指定的内存地址中
> 4. 之后就可以用人造指针修改"汉堡"的数量
找特征码

说实话第一次找特征码没经验走了很多弯路。
找特征码不仅仅要能定位到特定位置,还要能方便使用。
先把"汉堡"的地址给找到,基本上两次精确搜索就找到了。
第一次搜索

第二次搜索

找出是什么访问了这个地址

❓❓解释一下为什么是 用"找出是什么访问了这个地址"而不是"找出是什么改写了这个地址"
用"访问"在访问这个数据的时候就会执行注入的代码。
用"改写"只有在数据改变的时候才会执行注入的代码。
我们需要在访问的时候就要获取到"汉堡"的地址。(就是鼠标在游戏窗口里面的时候)

寻找定位"汉堡"地址的关键位置

这里选第一个

这里提取出来的特征码是这样的
8B C8 8B 85 B8 FD FF FF 83 EC 08 51 50 39 00 E8 ?? ?? ?? ?? 83 C4 10 8B 05 ?? ?? ?? ?? 85 C0 0F这里可以验证一下
如下图测试:

之后用AOB注入
选择:内存浏览器窗口->工具->自动汇编

接着选择:自动汇编窗口->模板->AOB注入



接着分配到当前CT表

这里是自动生成的代码,自己没写一行代码

有必要解释一下这里的代码
label(标签名):让标签名可以被当作一个地址使用。
alloc(分配的内存标签名, 字节数):使用方式同LABEL,同时分配内存,指向被分配的内存地址。
dealloc(分配的内存标签名):释放使用ALLOC分配的内存空间。。
registersymbol(符号名):将符号名加入到使用者自定义的符号表中。该符号名可以在作弊列表以及内存浏览中,被视为一个地址使用。符号名被使用前必须在脚本中先宣告。
unregistersymbol(符号名):从使用者自定义符号表中,删除此符号名。即使符号名不存在,也不会产生错误信息。
aobscan(符号名, 字节数组):在内存中搜寻给定的字节数组〈支援通配符〉,并将找到的地址附给指定的符号名。如果没有找到地址,自动汇编脚本不会运行。通配符:使用??或*代表未知字节。
解释代码

编写功能代码


使用人造指针


未激活前的状态

激活后状态

再提升

上面的方法有点麻烦
还要找特定注入点
注入点选错了,麻烦的很,并且还要找一段一直执行的代码,代码不执行就没办法执行注入的代码。总而言之麻烦。
所以选择另一种方法:
创建线程
这次选择"CT表框架代码"模板

话不多说上代码

createthread(地址):于目标进程中,在指定的地址创建线程。
这个段代码里面注册了一个blood2的符号,在手动的添加地址的时候可以当成一个地址使用
总结

这次分析下来自我解决问题能力感觉是有所提升的。比如说CEAA的学习使用。
看着这个文章操作下来很顺利。其实踩了不少坑。

  • 比如说这个特征码那5个地址本人全部试了个遍。找了将近一上午,毕竟是第一次,也不知道注意什么。比如:注入点不要选择变动的地方 ,那什么是变动的,等问题
  • 提升里面的createthread 写代码的最后要加上一个ret 等
  • 前面工具里面有OD,看文章里面是没有用到分析游戏上,其实不是,在找特征码的时候一直都是ce和od交叉使用。毕竟小白一个,以后分析就有经验了。
现在看起来这些问题没人告诉我,我就是要找一上午。要不是闲,我估计这次分析分析一半就又结束了,为什么说又呢,因为现在学东西太浮躁了,都是学到半途放弃了。有一点狗熊掰棒子,掰一个丢一个的意思。这个不好啃就换下一个,到最后一个也没吃透。
这次就算是一次记录吧,同时也知道了发帖子真正的不容易啊。自己挑错改正真心麻烦。心累💔
现在看起来一天的学习,现在能手写一些简单的CEAA代码了。
加油!!!💪💪💪
第一次发帖,有错之处欢迎指正。
成品

附件里面有做好的CT

这里先开启方式1,方式2就会失效。
先开启方式2,方式1却不会失效。
可以思考一下这是为什么 。
如果你明白了。就说明你看懂了。
完结



游戏下载链接: https://pan.baidu.com/s/1HfEMC9007HyUAB0UlRleGg 提取码: k6xi

Run!ZombieFoods!.zip

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 21:53 , Processed in 0.109375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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