几天后,我开始对一个小游戏进行逆向工程。该游戏包含一些数据文件,其中存储了 3d 文件。我想编写一个小软件,我可以在其中添加自己的 3d 模型,以改进(自定义)该游戏。
幸运的是游戏是在调试模式下编译的,所以我可以清楚地看到所有方法名称、c++类等,所以我清楚地知道代码中特定地方发生了什么。由于我是逆向工程的新手(但不是开发新手),我已经弄清楚了很多代码库并重新实现了许多与“游戏的数据管理”相关的东西。
我看到,在反汇编的代码中,有一个解密文件的类。使用两种方法。初始化解密器并读取字符。由于我不擅长“逆向工程”和加密算法(我什至不知道使用的加密是已知算法还是自己的算法),我希望你们能帮我弄清楚到底发生了什么方法,所以我可以在 C++ 中重新实现它。
我将包括 asm 部分和伪 c 代码(由我的反编译器生成)。请注意,这些方法是类的一部分。所以我会给你一些关于我到目前为止所想出的额外信息。我希望你们能帮助我。
Decryptor init 方法:(edi + 0x100 + offset) 似乎是一个大小为 128 字节的 char 数组,但我无法弄清楚其余部分(它似乎与 char 数组一起使用,但就像提到的那样,我没有那么多RE的经验)
ASM 代码:http : //pastebin.com/LiM10Cr5
伪 C:http : //pastebin.com/1ewfxAh1
解密器解密下一个字符方法:
(edi + 0x200) 似乎是一个字符(字节),其中存储下一个字符或类似的东西。
ASM 代码:https : //pastebin.com/aWp8LYua
伪 C:https : //pastebin.com/u4w5yGYS
如果你需要更多的信息,就像上面提到的,应用程序是在调试模式下完全编译的,所以它就像一个梦想......我有所有标签,所有 vtables,所有信息......
我还有一个 read 方法,这两种方法都会被调用,但我想我已经正确地对该方法进行了逆向工程(我希望如此)......
谢谢 :)