美文网首页
iOS逆向009--代码注入、Dylib注入

iOS逆向009--代码注入、Dylib注入

作者: lukyy | 来源:发表于2018-05-18 14:37 被阅读370次
    • 简介
      • 代码注入:静态注入、动态注入 动态库dylib
      • 其实是修改MacO文件,展开 Load Commands
      • 在Frameworks 里添加一个动态库,Hook.Frameworks,加入MacO文件中
      • yololib库:注入 MachO 文件,修改了此文件,签名被破坏了,Xcode 重新签名整个 App

    // 请先看以下两篇文章
    iOS逆向-RSA的使用-证书签名、代码签名(手动签名、脚本自动签名 《一》)

    iOS逆向-RSA的使用:代码签名(手动签名、脚本自动签名 《二》)

    • 代码注入的过程

    1. 准备工作:
      1.1新建一个工程;在工程里新建两个文件夹APP、Temp
    image.png

    1.2. 把 微信-6.6.5(越狱应用).ipa包 --> 解压(打开方式:用归档解压)。
    将微信Payload文件夹放入新建的工程中的APP文件夹里面;

    1. 在Build Phases里面添加New Run Script phase,将自动化脚本路径添加进去;
      Shell脚本路径
      /Users/zhangmeng/ZMshell/XcodeApp.sh

    2. 新建一个Target(Cocoa Touch Framework):hankHookFramework ,在此目录下新建一个类库:hankHook

    image.png image.png

    并添加 + (void)load; 方法

    @implementation hankHook
    
    + (void)load {
        NSLog(@"🍺🍺🍺🍺🍺🍺");
    }
    @end
    
    1. 将工程target和framework target关联
      添加 New Copy Files Phasa,选择Frameworks,添加FrameworkLib
    0010自动化签名-代码注入-4_2.png
    1. 编译以下,查看目录:项目/Products/ZM_自动化签名.app --> 显示包内容里的(WeChat MacO文件)
    image.png

    // yololib库: 作用是将动态库写入到MacO文件,代码注入(代码在动态库中)
    (使用前,先把此库放入此路径:Machintosh HD/bin
    或此路径下: Machintosh HD/usr/local/bin !!以后调用比较方便)

    // 使用 yololib 把 动态库 注入到可执行文件内 (WeChat MacO文件)

    $ yololib WeChat Frameworks/hankHookFramework.framework/hankHookFramework
    

    终端命令后:(WeChat MacO文件) 已经改变

    1. 对Payload文件内的WeChat库,显示包内容,使用 改变的(WeChat MacO文件),替换此库内 WeChat可执行文件
      然后对Payload文件重新打包成ipa
    $zip -ry WeChat.ipa Payload
    

    结果:会从 图片1 到 --> 图片二


    打包前 打包后
    1. 最后编译运行,会打印:🍺🍺🍺🍺🍺🍺

    //--------------------Dylib注入-----------------

    1. 准备工作:

    1.1新建一个工程;在工程里新建两个文件夹APP、Temp
    1.2. 把 微信-6.6.5(越狱应用).ipa包 --> 解压(打开方式:用归档解压)。
    将微信Payload文件夹放入新建的工程中的APP文件夹里面;

    2. 在Build Phases里面添加New Run Script phase,将自动化脚本路径添加进去;

    Shell脚本路径: /Users/zhangmeng/ZMshell/XcodeApp.sh

    3. 添加Dylib库:新建一个Target(macOS --> Library):ZMHook ,同时会产生一个类库:ZMHook
    Dylib注入-1.png Dylib注入-2.png Dylib注入-3.png
    a、这个是在Mac里面使用的动态库
    image.png
    b、证书也是Mac Developer证书
    image.png
    c、在Debug模式下Build后,Dylib动态库的路径和App包放的路径不一样,不在Debug-iphoneos下
    image.png
    d、添加代码
    #import "ZMHook.h"
    
    @implementation ZMHook
        + (void)load
        {
            NSLog(@"😊😊😊😊😊😊!!");
        }
    @end
    
    4、新建的工程和Dylib库进行关联

    关联的意义就是为了后续在工程Build的时候将Dylib库添加到app里面去。

    5、修改Dylib动态库的路径
    • 5.1方式一:直接把 libZMHook 拷贝到 Debug-iphoneos文件夹内

    5.1.1 编译

    • 5.2 方式二:修改Build Setting -> Per - configuration Intermediate Build Files Path

    5.2.1 ZM_Dylib注入 工程的路径

    $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
    $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
    
    image.png

    5.2.2 ZMHook 动态库的路径

    $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)                 
    $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)  
    
    image.png
    `// 修改Debug路径`
    $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)         -->  $(BUILD_DIR)/Debug-iphoneos
    $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)  -->  $(BUILD_DIR)/Debug 
    
    image.png

    5.2.3 编译

    • 5.3 方式三:
      5.3.1 修改Dylib库的架构配置(Base SDK改成iOS配置即可)
      image.png
    6、将Dylib注入到MachO文件

    编辑自己的脚本文件,Shell脚本:XcodeApp.sh

    # ---------------------------------------------------
    # 7. 注入我们编写的动态库
    echo "开始注入"
    # 需要注入的动态库的路径  这个路径我就写死了!
    INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"
    #
    ## 通过工具实现注入  MachO文件
    yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
    echo "注入完成"
    

    7、在Dylib中写注入代码,并编译运行

    运行成功:打印😊😊😊😊😊😊!!

    总结
    • 利用动态库注入(Framework库、Dylib库)
    • 注入进APP(工程和动态库有关联关系)
    • 修改MachO文件的Load Commands
    • 在注入的动态库中,写上自己想要注入的代码!

    相关文章

      网友评论

          本文标题:iOS逆向009--代码注入、Dylib注入

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