新剑侠情缘——编写无限内力辅助
写在前面:不知道你的童年是否是剑侠情缘陪伴度过的,反正我是;那个时候南宫飞云、独孤剑、杨影枫。。。柴嵩死了还难过了一阵;尝试独孤剑的各种结局,还是喜欢张琳心在一起的结局;杨影枫黑化后的表情还挺萌的。。。对各种武功还是年年不忘,洗髓经是真的霸气,南宫灭的石化技能太讨厌了。。。不管咋样,感谢西山居给我一个有武侠陪伴的同年!
最近这半年左右转行学了点逆向,那么实践一下吧
工具:Exeinfo PE、CheatEngine、OllyDbg、VS2019
- 拖入PEiD等工具查看是什么语言编写,是否带壳
- 查看导入表,查看到一个Sword.dll,看函数英文名字,像是绘图、读档存档、跑步等函数,猜测攻击等函数可能也在里面
1 内力
1.1 CE附加查找内力有关地址
- 先随意释放技能,内力会慢慢回复(看到这个界面是不是很亲切,玩过的亲们)
- 下面需要注意的是,使用CE查看是谁访问了这个地址时是附加查看的(坑1,必须回到游戏中运行一下,才有显示),再使用OD附加时需要用CE再打开一次才可以用附加(坑2,游戏不能窗口化,每次都要重新调分辨率)
- OD中单步分析,发现疑似 '内力恢复';
- 其中 [ECX] 应该是一个全局变量,所以通过一个全局变量,最终会找到 '当前内力值地址';猜测下面可能还会比较 最大内力值,用以判断是否继续恢复内力值
- 单步跟出,发现只是在恢复内力,去下一个地址里查看,发现几乎同样的操作;又看见SendMessage字样,猜测可能是在给窗口发消息?
- 好吧,最后试了下,没找到,剩下的两个地址是把恢复的内力值更新显示到人物属性面板上
1.2 寻找消耗内力的地址
- 上面的步骤没有找到消耗内力的地址,基本全是恢复内力的操作(因为站着不动,会慢慢恢复内力);这次手快一点,按了下《洗髓经》马上转出,看截图,好像找到了消耗内力的地址,比上图多出两个未知的地址:
- OD附加,在0042EEF6处下断,恢复游戏运行并回到游戏中,没断下!!!因为之前下的断,都是恢复内力的,一回到游戏中就断下了,所以这次感觉终于找到地方了,释放个技能试试会不会断下
1 |
|
1.2.1 分析内力消耗函数
- 直接先分析断点处,找到了释放技能时消耗位置
- (因为更改这个游戏很简单,直接更改游戏内的配置文件即可:一些独孤剑本来不会的技能就是更改配置文件学的,比如洗髓经。所以在释放技能时肯定会读取技能的配置文件)向上层函数回溯,确实发现寄存器中有读取的文件名
1.2.2 编写辅助dll
- 晚上睡觉前想了下:游戏修改起来很简单,如果不通过逆向,仅修改 .ini 文件里的内容即可
-
其实从游戏的存档读档功能就可以联想到:读取文档中的内容到游戏;
- 所以在技能释放,也是先读取如上图中的 .ini文件,获取该技能的内力消耗值 [edi+0x174],扯远了,回到主题
-
所以要怎么写一个辅助呢 → 写一个怎样的dll注入呢 → 什么条件触发我写的辅助呢?
- 游戏中释放技能是按 鼠标右键,切换技能是 键盘按键A~G;所以是不是可以更改它的窗口回调函数,在触发这两类消息时,把当前内力值设置为最大内力值(为了省事,选择鼠标事件吧)
- 用VS内的工具Spy++,查找剑侠情缘的窗口标题和类名
-
VS -> 选择 MFC 动态链接库 -> 在DLL类型中选择 ‘ 静态链接到 MFC 的常规DLL ’
- 主要逻辑:自己写的回调函数里响应鼠标右键(释放技能)消息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
总结:童年不再有,,,这个15年前的游戏逆向起来还是比较简单的,比较适合我这样的新手分析;dll编写思路大家可以尽情发挥,做技术没有标准答案;兴趣和坚持才能一直走下去,共勉!