专栏名称: 吾爱破解论坛
吾爱破解论坛致力于软件安全与病毒分析的前沿,丰富的技术版块交相辉映,由无数热衷于软件加密解密及反病毒爱好者共同维护,留给世界一抹值得百年回眸的惊艳,沉淀百年来计算机应用之精华与优雅,任岁月流转,低调而奢华的技术交流与探索却
目录
相关文章推荐
山东应急管理  ·  快乐游玩有N种,安全才是“加分项”丨查找身边 ... ·  4 小时前  
山东应急管理  ·  快乐游玩有N种,安全才是“加分项”丨查找身边 ... ·  4 小时前  
青岛新闻网  ·  时间定了!油价又要变 ·  2 天前  
青岛新闻网  ·  时间定了!油价又要变 ·  2 天前  
惠济发布  ·  零费用!零门槛!最高可赔2万 ·  2 天前  
惠济发布  ·  零费用!零门槛!最高可赔2万 ·  2 天前  
51好读  ›  专栏  ›  吾爱破解论坛

如何优雅的杀敌以做到英雄无敌?记一次血战上海滩修改器制作过程

吾爱破解论坛  · 公众号  · 互联网安全  · 2025-04-20 08:31

正文

请到「今天看啥」查看全文



切到CE,发起新的搜索,搜索10。


搜到了5400多条结果,你可能会犯糊涂,到底哪个是手枪弹药的地址?不要担心,现在继续搜索。


回到游戏,打出去几个枪子儿


此时弹夹剩7发子弹,现在回到CE,搜索7,点击“再次扫描”,搜索到的地址数量会越来越少,直至剩下一个,我比较幸运,搜了两次就找到了。


当时的手枪弹药的动态地址为0x18A4991C,我们先双击添加到内存修改列表中,并备注“手枪弹夹弹药动态地址”。


知道手枪弹夹弹药动态地址了,不妨来试一下修改弹药吧,如图所示,双击数值7,弹出数组修改窗口,输入你要修改的数值,我们就填50吧。


点击“确定”,选中这个地址按空格键就可以锁定手枪弹夹弹药量。回到游戏,瞧,弹药量变了吧,并且打出子弹后,弹药量会立马复原。


这是你成功的第一步,后面的路途还很遥远。OK,别急着继续,我们先分析一下,手枪开火,弹药会减少,弹药减少,就一定有相应的汇编操作码来完成操作,弹药减少,相应的内存地址的数据也会被改写,那么接下来我们来寻找是哪一行汇编语句改写了弹药地址里的数值。寻找相应的汇编操作码有两种方法,一个方法是通过CE的“找出是什么改写了这个地址”功能来定位相应的语句,另一个方法是通过内存断点来定位相应的操作码,先解锁地址数值,下面一一介绍。
方法一:通过“找出是什么改写了这个地址”功能来定位(推荐)
选中刚才的手枪弹夹弹药的地址,按F6或者右键菜单选择“找出是什么改写了这个地址”,调出操作码搜索框


如果弹出了这个对话框,不用理会,直接选“是”。


这时把这个窗口放到一边别管它,回到游戏。我又打出了两发子弹,这时操作码搜索框显示出了开火时的操作码,计数为2。


选中此行,点击“显示反汇编程序”,即可来到汇编窗口并定位到该操作码。


定位到了shanghai.exe+2F37B处。


方法二:通过内存断点来定位(备用)
如图所示,选中手枪弹药地址,点击“查看内存”,进入汇编窗口。


CE会帮我们定位到手枪弹药地址0x18A4991C处。


仔细观察一下,现在这个地址的十六进制字节值是不是当前弹药余量的十进制值呢?


右击0x30这个值,如图所示,选择“写入时中断”


这时0x30数值会变为深绿色,回到游戏,开火射出子弹,这时游戏假死,断点触发成功,回到CE的汇编窗口,这时中断在shanghai.exe+2F37D处。


你会突然发现,咦?两个方法为什么定位的地方差了一行?这里就要讲一讲CE的“找出是什么改写了这个地址”与内存断点工作机制的异同了。“找出是什么改写了这个地址”是在指令执行前设置,当指定地址被改写时,它能记录改写情况,定位到改写操作发生时的汇编指令处,比如在打出子弹前设置,打出后定位到开火操作码位置。而内存断点是在指令执行后起作用,像对弹药地址设置“写入时中断”,需等游戏执行写入操作(子弹射出)导致游戏假死断点触发,定位位置会和前者有差异 。综述,如果是用内存断点定位操作码,就要关注其上一行的操作码。定位到相关操作码了,接下来就可以分析0x18A4991C这个地址是如何被操作的了。分析前要对开火的操作码下断点,以确定是不是开火操作。如图,我们选中shanghai.exe+2F37B行,就在此处下断点,按F5键或点击左上方的“切换断点”,这时此行变绿,未选中时变红。


回到游戏,再次开火

,游戏假死,CE中断。


观察EDI和ECX寄存器,正是手枪弹药地址和手枪弹药余量,ECX寄存器操作着弹药余量。


再来看这一行的操作码:

 复制代码 隐藏代码

mov [edi],ecx

同学们应该明白了,就是将当前ECX寄存器的值放入当前EDI寄存器的值所对应的地址中,继续向上跟踪,这时看到了shanghai.exe+2F377处的操作码为dec ecx。


这说明了这里是开火时打出一发子弹,使用DEC指令来自减1,既然到这里了,不妨来整活儿吧,改一下汇编代码,来体验一把子弹杀敌后飞回枪膛的快感吧!
如图所示,双击此行操作码,把“dec ecx”改为“inc ecx”


点击“确定”,暂时去掉刚才的断点,按F9继续运行,回到游戏,走你!看,是不是很带劲儿!?


当然NOP也是可以的,实现了弹药锁定的效果。
接下来继续分析,主要追踪EDI寄存器里的0x18A4991C,一点点的向上翻看代码,注意操作EDI寄存器的行,从相关行或者临近行下断,以保证EDI寄存器里的值为0x18A4991C
经过了一系列追踪,发现了这两行

 复制代码 隐藏代码
shanghai.exe+2F2CE C2 0400 ret 0004
shanghai.exe+2F2D1 83 83 FB 02 cmp ebx,02

如果在shanghai.exe+2F2D1处下断,CE断了下来,但是上一行就没有,这是为什么呢?众所周知,程序是按顺序执行的,除非加了某些条件,这说明先前的操作码可能通过JMP、JE、JZ、JNZ、CALL等控制转移类指令跳转到了这一行。这时就要向上找是谁调用了shanghai.exe+2F2D1这一行,继续上翻代码,在shanghai.exe+2F25F处看到了“jg shanghai.exe+2F2D1”,为了验证这个说法,给shanghai.exe+2F25F和shanghai.exe+2F2D1都下断点,再次开火,断在了shanghai.exe+2F25F,EDI寄存器依然为0x18A4991C


然后按F7逐步执行语句,这时它的下一句就是shanghai.exe+2F2D1,说法成立。
突然,发现了一行特别的操作码

 复制代码 隐藏代码
shanghai.exe+2F253 8D 8C 31 EC000000 lea edi,[ecx+esi+000000EC]

刚才也介绍过了,ESI是源变址寄存器,那就可以确定手枪的弹药地址只有一级偏移0xEC,既然是相加操作,那么先前ESI里的值就是0x18A4991C-0xEC所得值0x18A49830喽。到了这里,我们就可以试一下搜索是否有基址的指针指向0x18A49830,回到CE主窗口,发起新的扫描,搜索目标为18A49830,记得勾选十六进制,否则不会搜到有关内容。







请到「今天看啥」查看全文