dwgx@blog:~$dwgx
> cd ../posts

EoSDecomp:东方红魔乡的逐字节反编译

// created

EoSDecomp 是东方红魔乡(Touhou 6 ~ Embodiment of Scarlet Devil)的逐字节反编译项目,目标是把原版二进制一点点还原成能读能改的源码,重编译产物要跟原版对得上。这仓库不是我原创,是我 fork 回来自己啃的,原项目是社区一帮人在做,我拉到名下跟着代码学逆向,顺带留个备份。

红魔乡是东方 Project 第六作,竖版弹幕,基本 ZUN 一个人做出来的。特别之处在于 ZUN 自己说源码算失传了,现在想搞这游戏要么找盗版,要么去 Yahoo 拍卖淘实体。源码没了、只能靠考古的老游戏,对逆向的人本身就是诱饵。

而且它还跑不起来。红魔乡用 DirectX8,这套在 Win10 将将能动,到 Win11 各种诡异 bug,崩溃、花屏、卡死都有。想让它老实跑,一般靠 EnbDev 的 DX8 转 DX9,或者 dgVoodoo2 这类包装层顶着。社区愿意从二进制一步步还原成能读能改能修的源码,这活儿本身就值得凑近看怎么干。

对我来说这是份活教材,DirectX8 时代的游戏怎么组织内存和渲染,翻代码比看教程实在。项目自己的目标也直接:让更多人能碰东方,顺手修掉一堆已知 bug,保证新系统还能玩。

有意思的是,你逐行研究的其实是一个日本人当年灌进 Visual Studio 2002 的代码。credits 里 Programming Support 挂着 pbg,Special Thanks 给了 ant 和 fang 两个名字,到现在没人搞清是谁,大概是当年测试留下的。