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

2018-05-18  本文已影响370人  lukyy

// 请先看以下两篇文章
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.1 编译

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 编译

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中写注入代码,并编译运行

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

总结
上一篇下一篇

猜你喜欢

热点阅读