- 采用的工具:x64dbg
写在前面
- 请大家多多支持正版
- 请大家多多支持正版
- 请大家多多支持正版
- 本文仅是提供一个简单的思路,
大概率可能不适用于我测试以外的游戏 - 测试用的游戏名为恋する少女と想いのキセキ,
无聊有兴趣的小伙伴可以去复刻一下操作
大致思路
-
寻找游戏特征函数GetDriveTypeA,这个函数用于查看磁盘类型,可以用于判断当前盘符对应的设备是否为光驱,因此如果游戏有做光驱校验,可能会调用到这个函数。本文也是基于此函数进行的,如果游戏的DLL库中不包含这个函数,可以试图寻找其他包含drive字样的API,然后下断点。
-
下完断点之后,先直接F9运行游戏,观察是否可以在光盘认证不通过的报错窗口弹出来之前在下断点的函数(假定名字为函数A)停止。
-
如果有停止的话,则在调用堆栈窗口(默认应该是在右下)寻找调用该函数的上级函数,特征为
返回到 程序名.xxxxxxxx 自 ???
,右键-在反汇编中转到指定DWORD或者直接ENTER键就可以跳转到对应的函数了 -
之后开始调试,调试的要点有以下两点:
4.1 找出运行到哪个地方会弹出验证不通过的窗口,观察弹窗之前跳转语句,寻找大跳转或者可以直接跳过弹窗的语句,修改跳转条件。
4.2 观察函数A或者GetDriveTypeA执行之后,是否接下来会有判断,以及是否有大的跳转(本文的例子比较简单,直接出来就是一个大跳转,可以盲猜接下来是程序主体的运行,直接将je修改jne就搞定了)。
基本上就是找到上述对应的JMP、JNP,JE之类的跳转语句,修改成另外一个分支,再调试看看游戏能不能正常运行。