在目标文件中查找字符串

逆向工程 拆卸 调试 反编译 字符串
2021-06-16 17:22:45

我有一个 libcocos2djs.so 文件,大概是一个使用 Cocos2d 的手机游戏。结果file

ELF 32 位 LSB 共享对象,ARM,EABI5 版本 1 (SYSV),动态链接,解释器 /system/bin/linker,剥离

游戏向游戏服务器发送 HTTP 请求。对于每一个请求,程序都会在请求 URL 中添加一个整数时间戳查询参数,然后计算 URL 与秘密字符串连接的 MD5 哈希值,然后将此 MD5 哈希值作为查询参数添加到 URL 中。

例子:

原始网址:/some_endpoint

带时间戳:/some_endpoint&time=324234243

使用哈希(MD5 上面的字符串与一个秘密字符串连接):/some_endpoint&time=324234243&hash=870839dba52a8fc6f47f44742116a40b

这个秘密字符串是我想找出的。

我学会了使用支持 ARM 的 objdump 版本来反汇编这个目标文件,但是由于我的汇编知识有限,我不知道从哪里开始,如果有人能指出我正确的方向就太好了。我只需要一个秘密字符串。

旧版本的游戏使用的是Unity,很容易反编译,我发现源代码中的秘密字符串是硬编码的。他们为新版本使用了一个新的秘密字符串,而且这个秘密字符串很可能仍然在源代码中进行了硬编码。不确定这些信息是否有帮助。

2个回答

我知道 IDA-PRO 有一些很好的插件来查找Crypt算法,例如 AES、DES、Triple DES 等。

除了密码算法,它还可以找到散列算法和 MD5,这很容易,因为 MD5 算法有几个静态启动器,很容易在内存中查找 ( 0x67452301 0xefcdab89, 0x98badcfe, 0x10325476)。无论如何,我会在 IDA pro 中打开 SharedObject,查找 MD5 算法,然后查找附加到发送数据的字符串作为加盐机制。因此,如果我必须将反转技术分步进行,它将是:

  1. 找到MD5哈希函数
  2. 查找调用 MD5 函数的函数,以及使用什么参数(其中一个参数应该是要散列的数据 - 包含 MagicString 的数据)
  3. 如果您仍然不知道字符串的哪一部分是 MagicString,请尝试了解是什么改变了当前字符串并添加了 Salting MagicString 我会寻找 strcat 变体

如果您有耐心对输出进行排序,请尝试通过该strings实用程序运行该文件(如果您使用的是 Linux 或 Mac,它可能已经安装,只需strings --version在终端中输入即可进行测试)。

这个工具不是很花哨,所以它会打印出很多垃圾以及找到的任何其他文本字符串。如果您确定您要查找的文本在那里,那么手动对输出进行排序并找到它应该不会花费太长时间。