开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 23963|回复: 4
收起左侧

[Windows逆向] MXD真实技能名遍历

[复制链接]
发表于 2021-7-30 16:47:15 | 显示全部楼层 |阅读模式   吉林省通化市
  • 上一篇文章里,我们对技能名字进行分析,得到了一个数组,但是经过观察,我们发现这个数组是一个临时存放的数组,只有当技能栏打开时才会显示当前一栏的技能,这样我们在获取所有技能信息时是很不方便的,所以下面我们要换一个方向找到真正的技能库遍历。
  • 在之前找到的数组上下F2断点,并获取同一个技能的对象,我们会发现及时从新打开技能栏,获取到的技能对象都是一样的,只是存放的地址发生了变化。所以我们可以通过CE对这个地址进行扫描,并通过重新打开技能栏来过滤掉临时存放的地址。
  • 分别在数据窗口中观察这两个地址,我们发现第二个地址的结构和临时存放的结构是一样的,也就是说这里就是拷贝到临时地址中的数组。
  • 在这个地址上下硬件访问断点,切换技能栏,游戏断到一个新的数组位置
  • 这里同样是一个+8偏移和一个*8+4的数组,在ebx+8处下断,观察断下的值,发现里面的内容是固定不变的,重新打开技能栏,ebx也不会重新生成。
  • 我们继续分析ebx的来源,在上面可以得到来源于一个CALL的返回eax
  • CALL上下断,分析参数,发现这个CALL只有一个参数,而参数的值很可能就是技能类型的ID
  • CALL里面分析eax的来源,得到来源于局部变量[ebp-10],而这个局部变量在上面的以结构体参数传到CALL中并被赋值。
  • CALL 9CB360中分析来源,首先得到一个+10偏移
  • 继续向上分析,可以得到一个数组套链表的结构
  • 对代码的走向进行分析,可以得出数组套链表的节点+8中存放的数值会反复的与外面传入的技能类型ID进行比较,所以说这个位置存放的就是技能类型ID
  • 执行到返回后,继续分析ecx的来源,可以得到+20偏移
  • 再次执行到返回可以得到基地址
  • 既然得到了基地址,是不是说我们的分析结束了呢?
  • 不!还没有结束!
  • 我们对数组套链表的结构进行观察后发现,这里的元素和节点实在是太多了,我们需要继续分析传入到CALL中的技能类型ID的来源
  • 我们执行到返回后得到了一个数组
  • 直接用CE扫描这个ebx可以得到一个基地址
  • 接下来分析数组里面元素,可以得出以下公式
  • [[0x047CECD0]+138]+n*4+4                技能类型
  • n=11转类型ID     
  • n=22转类型ID     
  • n=33转类型ID     
  • n=44转类型ID     
  • 0转的技能类型所有职业都为0
  • 可以说,追到这里我们就已经可以通过关联来获取到完整遍历了,但是如果为了提高一点代码效率,我们可以用技能类型ID经过加密计算获取到数组套链表的数组下标,这部分代码就在数组套链表的上面
  • [[[0x03CF46D8]+20+4]+(G%[[0x03CF46D8]+20+8])*4]+4                链表
  • 最终我们可以整理出公式如下
  • 技能类型ID 循环右移5 得到结果为G
  • [[[0x03CF46D8]+20+4]+(G%[[0x03CF46D8]+20+8])*4]+8                ID
  • [[[0x03CF46D8]+20+4]+(G%[[0x03CF46D8]+20+8])*4]+10                对象
  • 链表+4                链表
  • 链表+8                ID
  • 链表+10                对象
  • ID==技能类型ID时,取出对象
  • ==========================
  • [对象+8]-4                        技能数组元素数量
  • [[对象+8]+n*8+4]+4                技能ID
  • [[[对象+8]+n*8+4]+8]+0        技能名字ASCII
  • 完整的技能遍历已经获取到了,虽然有些复杂,不过成就感是慢慢的,当然如果有小伙伴觉得这个办法太麻烦,也可以用传参调CALL的方式获取,被检测到了不要哭哦。
  • 从安全角度来讲,这个部分正向代码的设计其实要比逆向麻烦很多,如果能在关键的CALL中加入弱VM并加入本地检测,会得到意想不到的效果。
  • 玩游戏,学逆向,做安全,欢迎感兴趣的小伙伴关注我们。


结帖率:71% (5/7)

签到天数: 3 天

发表于 2022-10-21 16:00:18 | 显示全部楼层   贵州省铜仁市
终于看到有mxd相关的教程了~大佬能留个联系方式吗~
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 3 天

发表于 2021-9-28 17:39:18 | 显示全部楼层   福建省宁德市
有全套教程吗
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2021-8-26 00:34:55 | 显示全部楼层   山西省太原市
感谢作者分享
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
发表于 2021-7-30 19:39:31 | 显示全部楼层   四川省成都市
学习了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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