iOS 逆向开发

iOS非越狱逆向--代码注入

2018-05-16  本文已影响16人  这人很懒

在iOS逆向过程中代码的注入无非是一个最关键的步骤。只有把你的代码注入到别人的代码中才能实现你想实现的目的,才能算实现了逆向。那么怎么才能将自己的代码注入到别人的ipa 里边的?

代码注入原理

众所周知,iOS app 在打包的过程中将代码全部转换成了 可执行文件 Mach - O 文件,所以说我们直接改源码是万万不可能的(除非你拿到的源码,话说你源码都拿到了你还逆向个🔨)。那么我们可不可以以第三方 lib 的(之前的博客中可以看到 第三方的 lib 是独立的)方式注入呢?必须可以啊!!

那么怎么才能将第三方的lib 注入目标程序呢?这个我们要从二进制文件的结构说起,Mach-O文件的数据主体可分为三大部分,分别是头部(Header)、加载命令(Load commands)、和最终的数据(Data)。mobileloader会在目标程序启动时,会根据指定的规则检查指定目录是否存在第三方库,如果有,则会通过修改二进制的loadCommands,来把自己注入进所有的app当中,然后加载第三方库。

这样就结束了么?远远不是的,到这里我们只是把自己的动态库注入到了目标程序中,但是我们自己写的代码还没有执行的入口,所以我们还是不能搞事情。我们还需要一个"main"函数来执行我们自己的代码,这个"main"函数在oc里面称为构造函数,只要在函数前声明 "attribute((constructor)) static" 即可,这样我们就能搞事情了。

代码注入的方式

上边讲过了可以通过第三方的lib 来实现代码注入,那么第三方的lib怎么才能实现注入呢?下边来讲两种不同的注入方式:Framework 和 dylib:

一下两种注入的前提是先实现代码的重签名,具体方式可参照:iOS非越狱逆向-- ipa重签名

Framework

创建一个FrameWork文件


创建Framework文件

创建CopyFiles文件

添加 Framework 文件引用 A

导入创建的FrameWork文件, Destination属性 改为FrameWorks

添加 Framework 文件引用 二

创建需要注入的代码文件,并在 + load 方法中需要实现的方法

创建需要注入的代码.png

chmod +x WeChat (微信为例)

yololib WeChat Frameworks/自定义Framework文件名.framework/自定义Framework文件名

zip -ry WeChat.ipa Payload

dylib

其实dylib 的注入方式几乎一样,无非就是创建个lib 然后添加到 targets 里边然后命令行注入,但是使用 dylib 需要设置几个权限属性,因为iOS 现在默认不支持 dylib 了需要手动设置属性。

添加新的 dylib 文件 设置Base SDK 属性 设置 Signing 属性

特别鸣谢

潭州学院 Hank 老师

上一篇 下一篇

猜你喜欢

热点阅读