结局

我是🤡, wine-ge-custom-opt + lavfilter + 安装了一下游戏, 解决问题. 不去折腾这个破引擎了.

动机

打 gal ,想不安装来玩游戏,注意到反复
地址居然是同一个。
是读注册表错误。(简单解决方法是完整安装,不是很想)。开始有想法。

准备工具

工欲善其事,必先利其器。先啃掉了一本《有趣的二进制 软件安全与逆向分析》,有了基本大局观。
下了个 ida pro7.0 ,用 wine64 运行。
简单分析了下,发现自带了 debugger 检测器。人话:传统的断点会被识别。需要硬件断点。

契机

进度:大幅增加
tg 群某人指出是 椎名里緒(ShiinaRio),开始收集资料。发现这个引擎有点麻烦。
找到个教程

动工

下面操作环境均为 Arch Linux + wine64
WARC1.7
ida pro search text WARC , 找到
函数主体 loc_44FFA0
多次 90 90 90 后再 convert code
code here
但是根据 readme, 这游戏有代码段校验。可能还需要绕过。
然后我先咕咕咕,把看雪论坛的某本书过一遍+ youtube ida pro 的入门教程。

目前一点体会:
汇编基本就是对寄存器的 + - * / 读写,以及 push call pop (参数先压栈再函数调用然后弹栈),以及 jmp jnz jz(控制语句),还有 nop,还有偏移(不管是结构体偏移还是数组偏移)
所以反出来的 c 代码。基本无法识别 struct or array,而且充满着 while ,do while,for,各种强制类型转换(用途是切换 step),为偏移作准备。
这一点都不抽象。太坏了。

识别壳的工具

《加密与解密》P83,84 缺

找到这俩地方。
check_reg_err_msg 是那条错误信息。所以 lstrcpyA 是复制错误信息。
猜测 return 0 是 error, 1 是?不太像。
 
RegQueryValueExA 函数,查文档得知成功是 ERROR_SUCCESS == 0 (wtf
所以改成 return 1

校验段,地址有可能是在
查看 xref, 找到
一堆异或看上去是校验。继续找 xref
看了下逻辑。if 校验成功,jz 到 start, 不然直接 return
地址,长度,原,现
hex
改掉 2 个闪退的地方
 

目测是引擎的 opengl 补丁。

注册表地址
键值
问题
转场动画无法播放(现在还没修好)
这个屑引擎的「对抗」措施:
1)花指令 2)字符串混淆 3)调试器检测 4)代码段校验 (这些是已知的)
 
Loading...
Steven Lynn
Steven Lynn
喂马、劈柴、周游世界
最新发布
我与 Dify 的半年
2025-3-9
我的2022年终小结
2024-11-9
记录雅思考试经历与一点学习心得
2024-11-9
Hackergame 2024 思路小结
2024-11-9
黑客松、日本、入职:我的2024下半年的总结
2024-11-9
NotionNext:基于Notion和NextJS的开源博客
2024-11-9