代码注入(上)

有了应用重签名的基础,已经能把其他App(比如WeChat)安装到自己的设备上了。

既然都安装上了,那能不能搞点事情呢?比如:调试、破解或者让安装在我们设备上的WeChat执行我们的代码呢?想要实现这些便有了代码注入

1、代码注入原理

一个App在执行的时候会执行3部分代码,第一部分为MachO文件的代码,第二部分为加入的FrameWork库,第三部分为系统库。
因为非越狱手机不能修改系统库,首先这个PassMachO是二进制文件,都是汇编,虽然也能修改,但是比较麻烦,目前我们不考虑;所以最简单就是再往App里面添加一个FrameWork库即可。

2、FrameWork库运行的规则

既然能Run起来,那加入一个FrameWork库就太简单了,但是我们加入的FrameWork库是在我们新建的工程(WeChatDemo)里面的,而当前运行的是WeChat.app里面FrameWork库。
那么如何让WeChat调用我们的FrameWork库,WeChat调用自己的FrameWork的规则是什么呢?这就涉及到了MachO文件,MachO中会明确的说明调用了那些FrameWork库。

3、初识MachO文件

MachO文件是什么呢?我们之前打开WeChat.app的时候有一个黑色的名称为WeChat的文件,这个就是MachO文件。

代码注入(上)_第1张图片
MachO

MachO只是一种格式而已,就和Windows上的.exe差不多。想到打开MachO需要一个叫MachOView的工具。用MachOView打开WeChat.MacO,就是下方所示。

代码注入(上)_第2张图片
MachOView

我们也可以用终端输入otool -l WeChat查看一下WeChat.MacO发现MachOView工具就是帮我们把终端显示的内容整理成可视化的而已。

代码注入(上)_第3张图片
WeChat.MachO

我们能看到FrameWorkLoad command下呢,打开MachoViewLoad command发现了之前重签名的FrameWorkmarsbridgemetwork.framework,原来只要WeChat.MachO文件中Load command标明了的FrameWork库都会被调用。

代码注入(上)_第4张图片
image.png

那我们如何将我们的FrameWork库插入到Load Comands中去呢?

4、Load Commands 关联 FrameWork 库

首先在Targets下新建一个FrameWork

代码注入(上)_第5张图片
新建FrameWork
代码注入(上)_第6张图片
WeChatHook

编译之后在/WeChat.app/FrameWorks下就会看到我们新建的FrameWork库,

代码注入(上)_第7张图片
image.png

代码注入(上)_第8张图片
插入的FrameWrok

运行一下很遗憾的发现没有执行我们加入的代码,因为打开MachOLoad Commands发现是没有我们的WeChatHook.frameWork的。

代码注入(上)_第9张图片
WeChat.machO

想要在Load Commands中关联我们的WeChatHook.frameWork库还需要一个工具yololib。建议把yololib放在/usr/local/bin下,ls后会看到pod也在这个文件夹下,因为这个文件夹下的Shell指令在任何地方都可以执行。

代码注入(上)_第10张图片
yololib

代码注入(上)_第11张图片
/usr/local/bin

接下来找到WeChaDemo工程下方的WeChaDemo.app,右键显示包内容。

在当前目录下向WeChat.machO中关联我们的FrameWork,终端输入yololib WeChat Frameworks/WeChatHook.framework/WeChatHook,就是给 WeChat.machO中注入了一个相对于WeChat路径下的FrameWork,因为WeChatHook.framework是文件夹,真正的FrameWork/WeChatHook.framework/WeChatHook

代码注入(上)_第12张图片
WeChatHook.framework
代码注入(上)_第13张图片
注入FrameWork

终端显示注入成功了,我们打开WeChat.MachOLoad Commands查看一下,发现了我们WeChatHook

代码注入(上)_第14张图片
WeChatHook

因为脚本的原因,脚本里面写的是先解压再覆盖,随意我们需要将WeChat.ipa重新压缩一下,不然就会覆盖我们现在已经注入的WeChatHookWeChat.machO文件。

将我们的修改成功的WeChat.machO拷贝出来到我们工程的WeChatDemoAPP下,然后对微信-7.0.5(越狱应用).ipa解压,替换PayloadWeChat.app中的WeChat.machO,删掉Payload之外的其他文件,然后重新压缩Payload

代码注入(上)_第15张图片
image.png

代码注入(上)_第16张图片
拷贝WeChat.machO

终端输入 zip -ry WeChat.ipa Payload,压缩后就重新得到了WeChat.ipa,如果不想重新压缩更改自动重签名脚本即可。

代码注入(上)_第17张图片
压缩

重新Run,发现输出了我们刚才注入的代码。

代码注入(上)_第18张图片
Logs

5、修改Shell脚本一步到位

我们既然用了Shell脚本那就希望更简单些,我们修改一下Shell脚本。

Shell脚本的最后添加上 yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/WeChatHook.framework/WeChatHook"

注意:我的FrameWorkWeChatHook.framework你叫什么自行修改。

6、DYLib注入

当前使用的是Framework注入的,也可以使用Library注入,原理是一样的,但是有一些细节要注意。

代码注入(上)_第19张图片
Library

Library生成的Target直接就会有.h.m文件不需要再新建,然后.m文件添加我们的+ (void)load;方法

代码注入(上)_第20张图片
image.png

Run一下,Show in Finder我们工程中的DYLib.app查看我们替换的WeChat.app中的FrameWork文件夹,并没有发现我们刚才新建的WeChatHook

代码注入(上)_第21张图片
image.png

注意:我们新建的WeChatHook.dylibMacOS的所以我们需要修改一些配置。
我们需要将MacOS的修改成iOS

代码注入(上)_第22张图片
image.png

代码注入(上)_第23张图片
image.png

配置一下,让Xcode帮我们把这个库Copy.app中去

代码注入(上)_第24张图片
image.png
代码注入(上)_第25张图片
image.png

修改添加的位置

代码注入(上)_第26张图片
位置修改

然后Show in Finder我们的DYLib.app/FrameWork中就能看到我们的WeChatHook了。

代码注入(上)_第27张图片
image.png

最后修改我们的自动重签名脚本

#注入
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libWeChatHook.dylib"

最后就成功的打出了我们注入的代码

代码注入(上)_第28张图片
image.png

以上就是代码注入(上篇)的内容,下篇正在努力整理。

你可能感兴趣的:(代码注入(上))