我试图从iPhone Mach-O二进制文件中读取常量(或初始化)字符串.据我所知,3个相关的segment.sections是_ TEXT._cstring _ TEXT._ustring和_ DATA._cfstring.但是,即使我知道字符串信息存储在我提取的这三个数据块中,我也无法理解它,它看起来像垃圾 - 我看不到任何可识别的字符串.任何人都可以对此有所了解,并让我知道需要采取哪些步骤来读取字符串数据?
我查看了一些代码(来自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)
Run Code Online (Sandbox Code Playgroud)
为了给你一个想法,__ 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
...
Run Code Online (Sandbox Code Playgroud)
非常感谢你的帮助!
我一直在iPhone上玩/调试/反汇编二进制文件.
第一个障碍是二进制文件是加密的,而解析器无法读取它们.这可以通过从gdb转储解密的文件内容来克服.
我的问题是关于所有MACH-O可执行文件的解密二进制文件(在程序启动时动态完成),其中LC_ENCRYPTION_INFO部分中的encryption_id设置为1.
感谢您的任何指示!