首页
社区
课程
招聘
[原创]逆向分析某网游对话框删除汉字异常的bug并修复
发表于: 2020-2-7 23:54 5499

[原创]逆向分析某网游对话框删除汉字异常的bug并修复

2020-2-7 23:54
5499
一、前言
二、准备工具
三、分析
四、修复
五、总结

       看雪萌新, 正儿八经学习逆向不到半年时间,期间学习了不少关于逆向的理论基础知识作为铺垫,扎实自己的基础。在此要感谢看雪图书《加密与解密四》与《C++反汇编与逆向分析技术揭秘》补足了我基础知识的空白。作为闭关修炼后的第一次实战分析,虽然没有什么技术含量,但起码是自己的一次实践、尝试;也是对这几个月所掌握知识的检验。在看雪记录自己一次次的分析过程,也见证自己一步步的成长,话不多说,我们进入正题。 因为游戏是从国外某服直接汉化的 未修改代码,所以有了“对话框删除汉字异常”的bug,具体现象为对话框输入的汉字删除时,一个汉字需要两次摁删除键才能删除。具体现象如下:

本次的目的就是通过逆向分析找到问题所在并修复它。

       分析环境: win7 32位虚拟机
       所用工具:OD、Cheat Engine、LordPE、WinHex

       首先我们能想到的一条思路就是利用CE找到字符串的写入地址,设置内存访问断点,找到调用该地址的函数从而定位问题所在。进入游戏,CE中打开游戏进程,在对话框中随便输入字符串,CE搜索结果如下:
红框标注绿色的地址即为字符串实际存放的地址,用od附加的方式打开游戏主模块so3d.exe,F9继续运行,我们在od数据窗口中ctrl+g输入01172050,找到了存放该字符串的内存地址,ASCII显示为“hello”。
 反复测试我们发现,对话框中字符串的写入地址总是为01172050,因此我们在游戏对话框中重新输入“看雪”, 回到od在01172050可以看到ascii显示为“看雪”:
既然我们找到了字符串写入的地址,不妨先看看写入过程中程序都进行了哪些操作。清空游戏对话框内容,在数据窗口01172050第一个字节处设置内存写入断点,游戏中输入字符后od中断到如下位置:
通过分析上下文,程序写入数据的流程为:堆栈取出要本次写入字符的ascii码值放入bl,将bl与0x26(ASCII为“&”)比较,若相等,则跳过本次写入,然后依次将esi+118和esi+114中存放的字符串数组中的索引值与esi+110中存放的数值(0x41)作比较,若大于或等于,则跳过本次写入,这意味着对话框中最多只能输入64个字符。符合写入条件后,将索引值赋给ecx,在0061775E处用数组下标寻址的方式将bl写入地址,其中esi+0x4为要写入字符串数组的首地址,ecx为索引值,写入后,将三处存放的数组索引值(esi+528、esi+118、esi+114)依次+1,再将写入地址的后一个字节清零后返回。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (10)
雪    币: 9660
活跃值: (3319)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
不错,学到了
2020-2-8 08:19
0
雪    币: 1264
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
耐心强悍。强!
2020-2-8 09:39
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
帮顶
2020-2-8 16:52
1
雪    币: 3876
活跃值: (3683)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
帮顶  温故知新
2020-2-8 21:52
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
6
感谢分享!
2020-2-8 22:10
0
雪    币: 6124
活跃值: (4666)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
很多“祖传程序”的通病。
2020-2-8 22:14
0
雪    币: 1768
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢各位同学
最后于 2020-2-8 22:35 被Passdtab编辑 ,原因:
2020-2-8 22:28
0
雪    币: 1768
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
iamasbcx 帮顶 温故知新
感谢感谢
2020-2-8 22:34
0
雪    币: 1768
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Editor 感谢分享!
感谢版主大大
最后于 2020-2-8 23:04 被Passdtab编辑 ,原因:
2020-2-8 22:38
0
雪    币: 881
活跃值: (9856)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
11
鼓励鼓励哈哈哈哈
2020-10-14 09:21
0
游客
登录 | 注册 方可回帖
返回
//