欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何在.ipa文件上进行iOS代码注入

来源:本站整理 作者:佚名 时间:2017-02-24 TAG: 我要投稿

代码注入是将外部代码注入至现有软件系统的过程。通过本文,我将分享在iOS APPs上执行代码注入所需的工具和技术。使用Xcode工具可以部署一个用以展示iOS代码注入行为的实验。总体思路是创建一组独立的代码,与最终的APP打包,并以某种方式执行新的代码。
[注意:代码的注入过程可在IOS9.3,10.0.2以及XCode v7.3和v8.0环境下正常运行,其他IOS系统或Xcode版本尚未测试]
我们可以使用Xcode,利用两种方式创建一个独立的二进制包:
动态链接库(Cocoa Touch Framework)
静态链接库(Cocoa Touch Static Library)

动态链接库vs静态链接库:可通过选择创建包含了注入代码的外部二进制文件
静态链接库
编译时链接代码
为了执行代码,静态链接库需要在.ipa文件编译期间可用
静态链接库不支持Swift
没有已知的方法来指导.ipa文件加载静态链接库
我们不能直接使用静态链接库,你需要首先将其转换为动态链接库
动态链接库
运行时链接代码,Xcode在编译期间需要依赖动态链接库/框架,但不保证这些依赖包被打包进APP中,这就是为什么有时你可能会遇到加载动态链接库运行时报错:

dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib
我们可以为动态链接库构建Swift代码
在启动APP之前将动态链接库加载到内存中,以便在.ipa文件中执行dylib命令
是的,我们可以使用这个 :)
选择dylib(动态链接库)作为我们的自定义代码包,让我们使用XCode来呈现代码注入的概念证明(Proof of concept,简称POC)

步骤如下:
1. 创建一个新的Xcode项目
2. 创建一个新的IOS应用程序目标
3. 创建一个新的“Coca Touch Framework”目标,为其命名为“PatchPGO”
4. 创建一个新的Objective-C Cocoa Touche类。为其命名为“PatchLoader”,在.m文件中添加以下方法。
@implementation PatchLoader
static void __attribute __((constructor))initialize(void){
    NSLog(@“==== Code Injection in Action ====”);
    / *
      注入代码放在这里
    * /
}
@end
使用方法修饰符,这样在APP启动前会将类加载到内存中,这样就可以指定我们想要做的事情,你可以将其视为要插入IOS APP代码的“入口点”
1
"static void __attribute__((constructor))”initialize
5. 运行IOS应用程序目标,确保日志控制台的输出与代码注入之前所期望的一样
6. 将动态链接库框架文件与IOS APP进行链接,确保框架被嵌入


iOS APP Target创建阶段: 确保“Destination”选择了“Frameworks”,并且在“Embed Freameworks”下方嵌入了你的framework
7. 现在你的IOS 应用程序目标已正确链接,运行它并观察日志控制平台
我们的NSLog信息已成功注入到IOS应用程序目标。

请注意,我们已观察到(新的日志记录)应用程序目标行为的改变,但应用程序目标的代码尚未被修改。Xcode在代码签名和安装修改后的应用程序之前,已悄悄的将库链接到了目标,在上面的注入实验中,开发人员拥有应用程序的源代码。接下来,让我们在没有源代码的情况下,尝试将代码注入到.ipa文件中。
在.ipa文件的代码注入POC(Proof of Concept)
步骤如下:
1. 根据选择下载.ipa文件,你也可以通过第三方(例如:www.iphonecake.com  )下载破解的.ipa文件
2. 下载optool(https://github.com/alexzielenski/optool  )或Clone我的repository
https://github.com/depoon/iOSDylibInjectionDemo  。
这个 repository 实现了在.ipa文件(通过optool)加载dylibs,它包含了optool和一个“patchapp.sh”脚本,详细信息可查看README文件
3. 在iOSDylibInjectionDemo目录中创建一个文件夹,以包含我们将注入到.ipa文件中的动态链接库的二进制文件,为其命名为‘Dylibs’
4. 进入Framework文件夹(你在上面利用Xcode创建的实验)检查Framework文件夹中的内容

如何在XCode中定位动态框架的文件夹位置:右键单击 - >选择“Show in Finder”

动态框架目录,动态链接库的二进制文件以蓝色突出显示
找到与框架文件夹同名的文件,这个文件即是我们需要通过它来修改.ipa文件的动态链接库二进制文件,将这个二进制文件复制到第3步创建的文件夹中,此时你的文件夹应该像下面这样:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载