第3天: dnspy逆向unity游戏

 

调试Unity游戏

dnSpy可以调试Unity调试版本和发布版本。发布版本需要修改的文件是mono-2.0-bdwgc.dll / mono.dll。也可以将发布版本转换为调试版本(还不会)。

调试发行版

先备份游戏,然后进行调试。

调试就需要对mono-2.0-bdwgc.dll / mono.dll进行打补丁,有现成的,需要调试,直接替换文件即可。

首先需要知道Unity的版本号,直接看游戏主程序的属性即可。

第3天: dnspy逆向unity游戏_第1张图片

版本号是2018.3.8

我们需要找到mono-2.0-bdwgc.dll / mono.dll。

根据Unity版本,此文件存储在不同的位置:

\ _Data \ Mono \ mono.dll

\ _Data \ Mono \ EmbedRuntime \ mono.dll

\ _Data \ MonoBleedingEdge \ EmbedRuntime \ mono-2.0-bdwgc.dll

\ Mono \ EmbedRuntime \ mono.dll

\ MonoBleedingEdge \ EmbedRuntime \ mono-2.0-bdwgc.dll

第3天: dnspy逆向unity游戏_第2张图片

将dnspy的补丁mono.dll/mono-2.0-bdwgc.dll文件复制到游戏中,覆盖其文件。

可以在下方下载补丁文件。

https://github.com/0xd4d/dnSpy/releases

第3天: dnspy逆向unity游戏_第3张图片

现在转到debug->start debugging并选择Unity debug engine。如果游戏崩溃,您可能使用了错误的版本,或者在游戏为64位时使用了32位文件,反之亦然。

第3天: dnspy逆向unity游戏_第4张图片

可以看到,我们动态调试成功了。

静态分析

用一道题看看静态吧。

dnspy载入Assembly-CSharp.dll,找到输出flag的源码:

第3天: dnspy逆向unity游戏_第5张图片

可以看出,要得到flag,必须得到redList,blueList,Moon的坐标,Cloud的坐标,hp,score。

可以猜到,hp,score是要爆破的,拿坐标怎么拿呢?

可以通过修改代码,让输出的flag为我们需要的变量,像这样:

第3天: dnspy逆向unity游戏_第6张图片

运行游戏会得到如下输出,说明s3=17.

第3天: dnspy逆向unity游戏_第7张图片

继续修改变量,得到所有的未知变量。

然后写爆破脚本就可以了。

你可能感兴趣的:(CTF)