美文网首页
dsc_extractor 工具的编译及使用

dsc_extractor 工具的编译及使用

作者: 77168ddcf2c6 | 来源:发表于2018-04-11 19:24 被阅读376次

    1前言

    在iOS逆向中,我们常常需要对dyld_shared_cache_armX类型的文件进行还原,第一个我们经常使用的是dyld_decache工具,但是这个工具并不能用从来还原dyld_shared_cache_arm64文件,也就是64位指令集架构的缓存文件,这个时候dsc_extractor就为你续命了。

    2编译

    打开终端依次执行以下命令:

    cd ~
    
    mkdir dsc_extractor
    
    cd dsc_extractor
    
    wget http://opensource.apple.com/tarballs/dyld/dyld-210.2.3.tar.gz
    
    tar xvf dyld-210.2.3.tar.gz
    
    cd dyld-210.2.3/launch-cache/
    
    touch dsc_extractor.patch
    

    通过上面的操作,我们下载下来了touch dsc_extractor的源码并且解压出来,并在其中创建了一个touch dsc_extractor.patch的空文件,接下来把以下内容复制到该文件里面去。

    --- dyld-210.2.3/launch-cache/dsc_extractor.cpp  2012-05-21 02:35:15.000000000 -0400
    +++ dyld-210.2.3/launch-cache/dsc_extractor.cpp 2013-07-26 16:05:03.000000000 -0400
    @@ -37,6 +37,7 @@
     #include <mach-o/arch.h>
     #include <mach-o/loader.h>
     #include <Availability.h>
    +#include <dlfcn.h>
     
     #define NO_ULEB 
     #include "Architectures.hpp"
    @@ -456,7 +457,7 @@
     }
     
     
    -#if 1
    +/* #if 1 */
     
     typedef int (*extractor_proc)(const char* shared_cache_file_path, const char* extraction_root_path,
                                                        void (^progress)(unsigned current, unsigned total));
    @@ -468,7 +469,7 @@
            return 1;
        }
        
    -   void* handle = dlopen("/Developer/Platforms/iPhoneOS.platform/usr/lib/dsc_extractor.bundle", RTLD_LAZY);
    +   void* handle = dlopen("/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/lib/dsc_extractor.bundle", RTLD_LAZY);
        if ( handle == NULL ) {
            fprintf(stderr, "dsc_extractor.bundle could not be loaded\n");
            return 1;
    @@ -484,7 +485,7 @@
        fprintf(stderr, "dyld_shared_cache_extract_dylibs_progress() => %d\n", result);
        return 0;
     }
    -#endif
    +/* #endif */
    
    

    <h3>记住,在+/*endif */后面是还有一行空行的。</h3>

    然后执行一下命令:

    patch < dsc_extractor.patch
    

    执行完成该命令后,你可以在dsc_extractor.patch文件的同级目录下看到一个dsc_extractor.cpp文件,接下来打开这个文件,要修改里面的内容。如下:
    原处: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
    

    到了这里,dsc_extractor终于编译完成了,你可以在同级目录下看到dsc_extractor的执行文件。你可以把它复制到任何地方然后使用。

    3使用

    编译dsc_extractor成功后,用iFunBox将iOS 里面的/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64复制到OSX的任何位置,然后在终端运行

    dsc_extractor完成路径 arm64缓存文件路径 要保存文件的路径

    然后终端显示
    0/1004
    1/1004
    2/1004
    3/1004
    4/1004
    5/1004
    6/1004
    7/1004
    这样的文本的时候就成功了

    相关文章

      网友评论

          本文标题:dsc_extractor 工具的编译及使用

          本文链接:https://www.haomeiwen.com/subject/fqizhftx.html