解压安装进入安装目录。大概如下目录结构:
点击 TheBelleIsle.exe 启动游戏:
,可能会报如下错误:
这个错误看起来是dx9等没安装好,但是我已经安装了dx9对应版本,并且复制了相关dll在里面还是这样。 通过任务管理器查看这个错误窗口的路径,发现并不是TheBelleIsle.exe,而是bitmain.exe,但当前目录根本没有这个文件,可能是隐藏文件,打开查看隐藏。
果然有两个这样的文件,而且和TheBelleIsle.exe是一模一样的,可以通过移除的办法改名或者删除这两个文件,再次运行,发现又会多出来这两个文件,通过分析发现,其实这样做的目的是当时游戏开发商防止 ollydbg等进行外挂调试,以防止一些外挂程序attach操作。
开始正菜调试
利用 x64 调试工具(需要用32位版),打开这个隐藏的bitmain.exe,因为弹出了上面的错误框,传给我客户端的朋友电脑上一样安装的,dx版本也一样,他不会出现这个错误界面,那么我首先假设dx版本是没问题的,这个时候我需要在弹窗的地方下断。 两种办法,一种是根据弹出的字符串,看哪儿用到,就在那下断往前看,第二种是在message box使用的地方下断,也是往前看逻辑。 因为是汇编代码,看起来非常费劲,所以一定要尽量在较为接近的位置找到判断地方。
我下断到message box的地方,因为这里反正是第一个弹窗的就出现错误了,没有什么其他的弹框干扰。
(复习下基础:下断的方法是因为messagebox本身在user32中,所以如图找到该dll,搜索到该函数,可能有A和W等,不管它,都下断点,然后F9运行)
果然运行到此位置后调用了弹出对话框,点击后直接退出程序。 根据堆栈向上数看前面的判断逻辑,发现在前面的逻辑中此程序调用系统的接口去获取客户端dx版本,这种游戏早期其实大面积是winxp/win7等系统运行的,现在在win11上面,无论怎么去安装dx9,系统自带的函数去获取版本的时候都要高于9版本,修改注册表等都不行,其实游戏的逻辑是想判断小于9的不能运行,结果他用了不等于,根据当时的主版本确实没有大于9的情况,因为在安装他的游戏之前,官方指导安装的是他们提供了dx9的安装包,当时的游戏大多这样提供的,所以如果正确安装必定是这个版本。
不纠结了,直接在判断的地方把判断或者数字改掉。
细节复习: 调试时候可以修改zf等跳过走不同分支,然后正常越过这步。 如果要方便下次使用,直接做补丁程序。 在要修改的地方按空格编辑汇编代码:
如修改je为jne,然后确定,再按ctrl+p打开补丁界面,就能导出一个修改后的文件了。
修复后运行到界面,其实到这里表示前面的dx错误提示,已经成功绕开了:
点击同意,进入如下界面:
点击开始游戏,出现新的错误弹窗:
此时注意任务栏的图标发生了改变。也就是又调起了另外一个程序在运行。
查看任务管理器
果然已经转到了bin目录下运行。
这里有3个信息:
-
第一个信息就是 主目录的程序其实啥都没有干,主要是在检测安装的环境如dx9等是否安装好了,还有加上防止调试等简单方法阻止普通用户使用外挂和多开等。
-
第二个信息是,注意看 启动的这个程序名字,lithtech,可以百度下,这个是早期非常出名的一个游戏引擎。这可能对我们后续的分析很有帮助,因为早期基于这个引擎的游戏较多,可以去搜搜,那么是否我们这个游戏的资源等就是lt的呢(虽然有很大的帮助和起到验证作用,但是后面分析发现几乎资源那块全自己封装了一套,跟该公司早期其他游戏累计的文件格式和解析有关,换成lt引擎后还是沿用了原来的一些方式)
-
第三是这里直接调试器里面调到另外一个exe,上一个程序直接退出,下一个程序没有时间附加,而弹窗的窗口错误还是乱码, 其实改成日文系统是可以看到正确显示的,有点麻烦,不改了, 弹出日文也是看不懂的,另外这里和上一个一样,如果能单独断点到这个程序,那么同样在messagebox处下短点,看下判断条件就行了。
下一篇来写分析这个 lt 的启动错误。