gpt4 book ai didi

iPhone Mach-O 二进制文件,字符串存储,__TEXT/__DATA

转载 作者:太空狗 更新时间:2023-10-29 17:24:32 27 4
gpt4 key购买 nike

我正在尝试从 iPhone Mach-O 二进制文件中读取常量(或初始化)字符串。我知道 3 个相关的 segment.sections 是 _TEXT._cstring _TEXT._ustring 和 _DATA._cfstring。然而,即使我知道字符串信息存储在我提取的这三个数据 block 中,我也无法理解它,看起来都是垃圾——我没有看到任何可识别的字符串。任何人都可以阐明这一点并告诉我需要采取哪些步骤来读取字符串数据吗?

我看过一些代码(来自 http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp 的 GetAddrOfConstantCFString()),但同样,我无法将它与我在二进制文件中看到的内容联系起来。

在我的例子中,相关部分的大小是:

__TEXT.__cstring (99 K-bytes)
__TEXT.__ustring (<200 bytes)
__DATA.__cfstring (29 K-bytes)

为了给你一个想法,__cfstring 部分的前 32 个字节,我认为它包含实际的字符串,看起来像这样:

转储 _数据。_cfstring

00  00  00  00  c8  07  00  00  74  02  0d  00  15  00  00  00
00 00 00 00 c8 07 00 00 8c 02 0d 00 01 00 00 00
...

非常感谢您的帮助!

最佳答案

好吧,我找到了答案。

1) 文件通常是加密的(这可以用 otool -l prog_file|grep -i crypt 测试)。并非所有部分都被加密,但通常是第一个 block ,包括 _TEXT._text(程序代码)和 _TEXT._cstring。 _DATA._cfstring 部分在我的案例中未加密。

2) 正如预期的那样,__cfstring 由 16 字节结构 (NSConstantString) 组成,其中第 3 个字是指向加载 _TEXT._cstring 的内存的指针。第4个字是长度。

所以在现实生活中,诀窍是先解密文件,然后所有内容都是可见和可访问的。我仍然没有绕过正确的做法,而是在 gdb 中转储了一段内存,然后替换了文件中的相关部分。

关于iPhone Mach-O 二进制文件,字符串存储,__TEXT/__DATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708277/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com