本帖最后由 折纸 于 2025-10-25 16:37 编辑
声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请联系作者删除。
准备工具
查壳工具:PEiD.exe
调试工具:x32dbg.exe
前言
最近在VMware虚拟机环境下打开某游戏登陆器时,程序弹出提示禁止在虚拟机环境下使用。但是作者怕电脑中病毒,非常想在虚拟机进行游玩。 此为前提,话不多说,开搞!
软件报错截图
软件报错截图
破解过程 (一阶段)
1.首先查壳
通过PEiD软件查看程序是否加壳,此处扫描结果为“什么都没找到”。
按作者理解这个程序用到的壳应该并非常见的壳。所以可能没有脱壳的方法。
查壳
2.尝试反编译调试
通过任务管理器确认该程序为32位程序。打开x32dbg,将程序拖入调试窗口。
使用模块字符串搜索功能,很快就找到了告警的字符串。
这里的告警是壳的告警,没有做内容加密。
字符串
通过点击这个字符串,可以跳转到打开窗口的函数附近。
报错
通过分析可知,012848C9地址处的条件跳转为关键跳转。对此处使用nop进行填充,则程序会跳过弹出虚拟机环境告警。
修改
打补丁后重新打开可以发现壳的告警信息不再弹出。
破解过程 (二阶段)
壳的告警取消了以后,发现弹出了游戏登陆器的告警信息。
很明显,登录器也限制了虚拟机不可运行。
报错
在这里使用API断点工具可以断下来窗口打开的地方。
作者实力很菜,跟了一段时间没有找到此处对应的关键JMP。
壳对原登录程序进行了加密,将关键信息隐藏到了内存中,且调用方式也很难查。
幸运的是,在登录器程序附近发现了原作者未加壳的程序(感谢🙏)。
同样通过模块字符串查找,找到了关键jump。
如下图所示,004016BA地址即为关键jump。在这个跳转未执行的情况,会发生请勿在虚拟机运行的告警。
修改这个地址为JE跳转,打补丁后重新运行,报错信息不再弹出。
就在作者以为大功告成的时候,这时候发现未加壳的登录无法连接服务器,无法登录游戏。
查阅相关资料后,作者猜测这里的游戏壳可能对登录器进行了网络请求代理,必须通过壳的代理才能正常连接。
破解过程 (三阶段)
虚拟机环境判断逻辑
通过AI的帮助,作者分析了未加壳程序位于004016AE位置的环境判断CALL.
VMware的Backdoor机制规定,当客户机(虚拟机内的系统)向0x5658端口发送IN指令时,​宿主机(物理机)会返回特定值0x564D5868​(对应ASCII“VMXh”,VMware的标识)。
如果读取的值等于VMware的magic number,说明当前运行在VMware虚拟机中。
由于作者没找到加壳后程序的关键jump,这导致无法对加壳后的程序进行破解。
但是可以另辟蹊径,从虚拟机下手。
若程序运行在 VMware 虚拟机中,可通过修改 VMware 配置,使宿主机在收到 0x5658端口的 IN请求时返回非 0x564D5868的值。具体操作:
1.关闭目标虚拟机
2.编辑虚拟机配置文件(.vmx文件),添加或修改以下参数:
[Shell] 纯文本查看 复制代码 isolation.tools.hgfs.disable = "TRUE" # 禁用部分共享功能
monitor_control.restrict_backdoor = "TRUE" # 限制 Backdoor 接口
重新启动虚拟机,禁止使用虚拟机的告警已不再弹出,顺利进入游戏!
如果大家有遇到这种情况,可以按照我的方法试一下😄
方法可行的话给本篇文章点点赞,谢谢
|