iOS逆向 11:代码注入(上)

简介: iOS逆向 11:代码注入(上)

本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入


代码注入


一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的方式注入。


查看Mach-O文件


在了解注入前,我们首先需要了解ipa包中的静态库是如何注入的,有以下两种方式查看Mach-O可执行文件


  • 1、终端命令:otool -l WeChat
  • 2、MachOView 二进制文件分析工具(注:分析时可能出现无法分析的情况,可以通过 CMD + o 打开)


Mach-O文件中主要看load Commands(即加载命令集),从这里可以看出动态库的加载等。其中大部分格式为:LC_LOAD_DYLIB(xxx),是在指定路径下加载xxx,如下所示

image.png

所以,综上所述,如果需要注入代码,是以动态库的形式注入


方式1:Framework手动注入


第一步:动态库进入App包,即Framework注入


  • 1、创建一个Framework,命名为 CJLHook(创建位置:target -> + -> ios -> Framework)

image.png

  • 2、在CJLHook中创建inject文件,在生命周期方法load函数中写注入代码


+(void)load{
    NSLog(@"CJLHook ------ 注入成功");
}
  • 3、编译工程(注:这里的工程依然需要重签名),然后查看工程的可执行文件Wechat,查找其中的Frameworks,从这里可以看到CJLHook,但是此时并不会执行其中的load函数


image.png

  • load不会执行的原因:查看此时的Mach-O文件中的Load Commands,并没有发现CJLHook,所以此时是不会执行其中的load函数的


第二步:yololib手动注入,修改Mach-O字段


  • 4、通过yololib工具修改Mach-O字段:./yololib WeChat Frameworks/CJLHook.framework/CJLHook(注:需要将WeChat可执行文件拷贝过来)

image.png

  • 第一个参数:目标可执行文件
  • 第二个参数:CJLHook的路径
  • 5、查看Mach-O可执行文件,可以看到已经加进来了

image.png

  • 重新打包,过程如下:
  • 解压微信-7.0.8.ipa
  • 替换Payload中的可执行文件为上一步的Mach-O文件
  • 重新打包:zip -ry WeChat.ipa Payload/
  • 然后替换ipa包
  • 7、运行程序,可以看到成功执行了 CJLHook中的load


image.png


方式2:dylib注入


准备工作:创建一个空工程,并进行WeChat的重签名,可以参考这篇文章iOS逆向 10:应用重签名(下)


dylib注入


  • 1、选择target -> + -> mac os -> Library,命名为CJLHook

image.png

  • 2、在Build Setting中配置CJLHook
  • 1)Base SDK 改为 ios
  • 2)Code Signing identify 改为 iOS Developer
  • 3、当前工程中拷贝lib


image.png

  • 1)、Build Phase -> + -> New Copy File...
  • 2)、然后选择拷贝到的目标文件:Frameworks
  • 3)、添加dylib
  • 4、在CJLHook.m文件中重写load函数
#import "CJLHook.h"
@implementation CJLHook
+(void)load{
    NSLog(@"CJLHook ---- 注入成功");
}
@end
  • 5、脚本注入dylib,将yololib拷贝至根目录,在appSign.sh末尾添加以下命令


#注入
./yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libCJLHook.dylib"
  • 6、编译工程,查看Mach-O文件中的Frameworks文件,已经包含了CJLHook的dylib


image.png

7、运行程序,从日志可以看出执行了CJLHook中的load

image.png


总结


  • 代码注入:一般会选择利用FrameWork或者Dylib等三方库的方式注入


  • Framwork手动注入流程:


  • 1、通过Xcode新建Framwork,将库安装进入APP包
  • 2、通过yololib注入Framwork库路径。命令:$yololib(空格)MachO文件路径(空格)库路径
  • 3、所有的Framwork加载都是由DYLD加载进入内存被执行的
  • 4、注入成功的库路径会写入到MachO文件的LC_LOAD_DYLIB字段中


  • Dylib注入流程:


  • 1、通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改相关属性配置)
  • 2、添加Target依赖,让Xcode将自定义Dylib文件打包进入APP包。
  • 3、利用yololib进行注入。


相关文章
|
6月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
6月前
|
移动开发 前端开发 数据安全/隐私保护
【工具】iOS代码混淆工具-iOS源码混淆
【工具】iOS代码混淆工具-iOS源码混淆
72 1
|
6月前
|
移动开发 前端开发 安全
最强大的 iOS 应用源码保护工具:Ipa Guard,保护你的商业机密代码
最强大的 iOS 应用源码保护工具:Ipa Guard,保护你的商业机密代码
|
1月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
6月前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
104 2
|
6月前
|
移动开发 安全 数据安全/隐私保护
iOS 代码混淆和加固技术详解
iOS 代码混淆和加固技术详解
|
6月前
|
移动开发 前端开发 数据安全/隐私保护
iOS 代码混淆 - 从入门到放弃
iOS 代码混淆 - 从入门到放弃
|
6月前
|
移动开发 安全 前端开发
iOS代码混淆工具
iOS代码混淆工具
107 1
|
6月前
|
安全 算法 数据安全/隐私保护
iOS 代码加固与保护方法详解 - 提升 iOS 应用安全性的关键步骤
iOS 代码加固与保护方法详解 - 提升 iOS 应用安全性的关键步骤
|
6月前
|
移动开发 安全 数据安全/隐私保护
iOS代码混淆工具
🔒 这是一篇介绍iOS代码混淆工具的技术博客,旨在帮助开发者提高代码安全性。本工具来自于Github的混淆词库和代码,通过差异化处理和代码合并生成数亿种用于混淆的单词和垃圾代码,确保每次混淆不会出现重复,混淆后的代码跟手写没有任何区别,完美解决代码4.3和2.3.1问题。