一、层云遮眼
从网上找到了cheat engine 7.6.2的Patreon资源,本以为是一次平常的程序安装,在我点击了next按钮,程序调用了系统默认浏览器,跳转到了Patreon验证界面。啊,这个安装程序居然需要登录验证是否捐赠。

image-20251029200653476.png (50.41 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传

image-20251029200544363.png (80.98 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
面对程序的验证,首先想到了IDA工具,是否可以通过跳过验证,直接进入安装界面。但是,使用Patreon 作为关键词在代码和字符串中搜索,并没有得到想要的结果。第一次尝试失败。接着使用xdb调试程序,并同样使用Patreon关键词进行字符串搜索,不出意料,得到了同样的结果,在内存中没有网站的一丝痕迹。第二次尝试失败。
既然关键字找不到,那就从调用系统浏览器入手。在不知道什么函数可以调用系统的默认浏览器情况下,qwen AI给出来shell32.dll 库文件下的 ShellExecuteEx 函数 可以实现默认浏览器调用,紧接着再使用XDB工具查看符号,搜索无结果,第三次尝试失败。但此时,长时间未验证,cheat engine 给出了一个提示窗。

image-20251029201000747.png (13.65 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
以提示窗为线索,在xdb句柄下,右击刷新,给出了两条信息,但是均不是验证弹窗。第四次尝试失败。

image-20251029203218969.png (116.37 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
二、拨开云雾
转机发生在,给cheat engine安装程序附加的时候,附加界面显示了两个cheat engine安装程序,一个是exe结尾的正常运行程序,第二个则是tmp结尾的临时文件。我不在以第一个exe程序作为附加对象,将tmp文件附加在了调试程序上,并使用搜索→所有用户模块→字符串 Patreon关键字。结果出现了,Patreon网站的验证地址。

image-20251029203515865.png (56.38 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传

image-20251029203857853.png (173.49 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
双击链接,进入了cpu界面,看着眼前的汇编代码,还是有些头痛,目前只是找到了验证逻辑的一部分,仅仅通过汇编代码,还是无法还原函数的逻辑。下一步就是看如何还原验证逻辑。

image-20251029204045277.png (297.86 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
本计划使用ollydumpex工具对当前模块进行dump,然后使用ida逆向代码。点开后发现,当前的验证模块pcheck也是在tmp文件夹下。那么现在的工作就是逆向pcheck文件。

image-20251029204636837.png (45.64 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
同样的步骤,将pcheck文件拖进IDA中,使用shift+F12 调出字符串窗口,ctrl+F 调出搜索窗口,将关键字Patreon,输进去。过滤出来的结果令人满意,同样双击进入汇编界面。鼠标右击list cross to,查看有什么代码引用了字符串,给出的结果是唯一的,再次确认后,使用F5调出反汇编界面。

image-20251029205056117.png (71.19 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传

image-20251029205238568.png (159.04 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
关键代码段如下,判断 v7 - v19 的值是否小于等于 1296000,如果不满足条件,则执行else中的代码,也就是跳转浏览器,并进行登录验证。qwen给的没有错误,程序确实是使用了系统的ShellExecuteA函数来调用默认浏览器。现时,我们需要做的就是强制修改判断条件,即可跳过验证。
if ( v7 - v19
原始汇编代码
cmp eax, 13C680h
jbe loc_10020C9E
修改后的汇编代码
cmp eax, 13C680h
jmp loc_10020C9E //强制跳转至代码段
修改后,我将修改补丁到了pcheck文件中,准备将修改后的文件与源文件做替换,这样可以不验证,直接跳转至后续安装界面。
我犯了错,运行中的cheat engine程序调用了pcheck模块,在程序运行过程中是无法被替换。
但是,XDB可以帮忙解决问题,将 jbe loc_10020C9E 代码附近的字节复制,使用XDB的字节搜索工具,在所有用户模块中搜索匹配特征 7F 11 0F 8C 28 01 00 00 3D 80 C6 13 00 0F 86 1D 01 00 00 C7 45 D8 08 00 00 00。

image-20251029210723489.png (81.76 KB, 下载次数: 0)
下载附件
2025-10-29 21:20 上传
同样双击搜索到的结果,会回到汇编窗口界面,可以看到关键代码。
10020B76 | 3D 80C61300 | CMP EAX, 0x13C680
10020B7B | 0F86 1D010000 | JBE pcheck.10020C9E
使用空格快捷键,在弹出的汇编编辑窗口中,将jeb修改为jmp强制跳转。

image-20251029210756515.png (130.22 KB, 下载次数: 0)
下载附件
2025-10-29 21:21 上传
回到cheat engine程序中,再次点击next按钮,成功做到了跳过Patreon联网验证。

image-20251029211104486.png (46.05 KB, 下载次数: 0)
下载附件
2025-10-29 21:21 上传
总结:cheat engine打包后的安装程序,在运行过程中会解压出两个文件在临时文件夹中,一个是真实的安装程序,另外一个是联网验证pcheck模块,想准确破解程序,就需要找准修改对象,然后再通过关键词或者窗口提示来进行分析。

