美文网首页
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