When dyld_decache fails on dyld_shared_cache_arm64, dsc_extractor saves our days

apple developer最新的就行,把if0改if1就行了

自己下载个固件即可。

大大你好我在編譯的時候,出現一個奇怪的錯誤:
dsc_extractor.cpp:42:10: fatal error: ‘Architectures.hpp’ file not found

請問要去哪裡補這個檔案?

抱歉我自己找到解答了,要下載整個tar.gz包 而不是只下載dsc_extractor.cpp的檔案就好,犯蠢了!

Thank you,it’s all right and help to me dump private framework.

今天学习到这里,看到狗神的帖子遇到些问题。把解决问题的方式共享到这里

问题一:

leo-MacBook-Pro:launch-cache leo$ patch < dsc_extractor.patch

patching file dsc_extractor.cpp
patch unexpectedly ends in middle of line
patch: **** unexpected end of file in patch

原处:

-#if 0 
+/* #if 0 */

修改成

-#if 1 
+/* #if 1 */

在+/* #endif */ 后 按下回车,添加一行

再次运行

patch < dsc_extractor.patch

问题二:

leo-MacBook-Pro:launch-cache leo$ clang++ -o dsc_extractor dsc_extractor.cpp dsc_iterator.cpp
In file included from dsc_extractor.cpp:51:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ext/hash_map:213:5: warning:
  Use of the header <ext/hash_map> is deprecated. Migrate to
  <unordered_map> [-W#warnings]
#   warning Use of the header <ext/hash_map> is deprecat...
^
dsc_extractor.cpp:232:20: error: assigning to 'char *' from
  incompatible type 'const char *'
...while ( (slash = strchr(afterSlash, '/')) != NULL ) {
                  ^~~~~~~~~~~~~~~~~~~~~~~
dsc_extractor.cpp:460:2: error: unterminated conditional
  directive
#if 0
^
1 warning and 2 errors generated.

原处:230行

const char* afterSlash = &dirs[1];

修改成:

char* afterSlash = &dirs[1];  去除const

原处:460行

#if 0

修改成:

#if 1

原处:488行

/* #endif */

修改成:

#endif 放开注释

再次运行 clang++ -o dsc_extractor dsc_extractor.cpp dsc_iterator.cpp

4 个赞

哥们给力 666

thanks a lot

save my time

所有的库都成功导出来了,但使用class-dump尝试从这些库中导出头文件却失败了,用ida能打开,但也基本看不到OC的方法实现,很奇怪,有哪位解释下么?

有乱七八糟的偏移问题需要手动修复。不过现在ida和hopper都支持直接打开dyld cache了不用折腾这个了

是的,打开是没有问题的,但在里面看不到预期的OC方法实现,方法对应的字串倒是能看到,但函数的具体实现就找不到了。难不成这些库里的OC函数实现现在都是用runtime动态添加到类对象里面去的么?

patching file dsc_extractor.cpp

Hunk #2 FAILED at 457.

Hunk #4 succeeded at 485 with fuzz 2.

1 out of 4 hunks FAILED – saving rejects to file dsc_extractor.cpp.rej

这个是什么问题?

看这个啊:stuck_out_tongue_winking_eye:

下载了一个处理好的,直接可以提取了 1470626669866028.zip (1.6 MB)
直接执行命令提取:./dsc_extractor/dyld-210.2.3/launch-cache/dsc_extractor ./dyld_shared_cache_arm64 ./binaries/

提取完之后, class-dump 怎么错误,
MacBook-Pro:MobilePhoneSettings.bundle kai$ class-dump --arch arm64 -H MobilePhoneSettings -o ./Header

2019-03-07 10:49:00.624 class-dump[23292:1302696] Warning: This file does not contain any Objective-C runtime information.

Hopper可以反编译
image

因为decache出来的依旧不是完全修复的orz

orz 是指 二进制文件? 那是哪个环节有问题?

orz 不是给跪了的意思吗