张艾伦 发表于 2021-7-14 15:47

iOS动态注入与自签名

#### 准备工具

1、[在线砸壳网站](https://www.dumpapp.com/)

2、我的饭店_已砸壳(演示用)

3、MachOView

4、(https://github.com/alexzielenski/optool)

5、(https://altstore.io/)



#### 操作步骤

大家可以看到,当我们使用**MonkeyDev**开发插件的时候,最终的产物是有两个的,一个是我们的App,一个是HOOK用的动态库,之所以能够实现逆向,就是把这个动态库注入到二进制文件中实现的,那么我们是否可以直接把动态库注入到游戏的二进制文件中呢?答案是肯定的。

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsga3v8dc9j31ic0s8qbr.jpg)

首先,我们使用**MachOView**这个工具来查看一下二进制文件的动态库,如下图所示,LC_LOAD_DYLIB就是加载的动态库。

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsga0jy21vj31ic0s844a.jpg)

那么我们要做的也很简单,就是使用**(https://github.com/alexzielenski/optool)**工具把我们已经写好的动态库给注入进去,首先我们要对ipa包进行解压缩,直接使用第三方工具或者修改ipa后缀名为.zip进行解压,会得到一个Payload文件夹,文件夹里有一个pig-mobile.app文件夹,在这个文件夹上右键选择显示包内容,然后按照大小进行排序,最上面的那个pig-mobile文件,就是我们游戏的二进制文件

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsga94so31j30qk0d441r.jpg)

然后执行如下命令(optool要提前编译出来放到/usr/local/bin,pig-mobile文件也要复制出来操作,不然命令可能不生效,注入完成后我们再替换回去即可)

```
optool install -c load -p "@executable_path/Frameworks/libpighomeDylib.dylib"-t pig-mobile
```

然后得到如下结果:

```
Found thin header...
Inserting a LC_LOAD_DYLIB command for architecture: arm64
Successfully inserted a LC_LOAD_DYLIB command for arm64
Writing executable to pigmobile_new...
```

我们再次使用**MachOView**这个工具查看被修改后的二进制文件,发现我们写的这个动态库已经被成功的注入了

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgiic3753j31ic0s87cn.jpg)

当然,在注入这个动态库之前,我们还要先确认下这个动态库,看它有没有依赖于别的动态库,如果有的话,我们还需要把它所依赖的动态库全部加到游戏工程里面去,我们使用下面的命令来查看**libpighomeDylib.dylib**

```
otool -L libpighomeDylib.dylib
```

我们会得到如下的结果:

```
libpighomeDylib.dylib:
      @executable_path/Frameworks/libpighomeDylib.dylib/libpighomeDylib.dylib (compatibility version 1.0.0, current version 1.0.0)
      /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 907.1.0, weak)
      @executable_path/Frameworks/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0, weak)
      @executable_path/Frameworks/libcycript.dylib (compatibility version 0.0.0, current version 0.0.0)
      @rpath/RevealServer.framework/RevealServer (compatibility version 2.0.0, current version 2.0.0)
      /System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore (compatibility version 1.0.0, current version 612.1.15)
      /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5043.1.109)
      /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1835.100.0)
      /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
      /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1308.0.0)
      /System/Library/Frameworks/AVFoundation.framework/AVFoundation (compatibility version 1.0.0, current version 2.0.0)
      /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1835.100.0)
```

由于我没有引用到别的三方库,这里面我们看到有三个需要我们处理的

      @executable_path/Frameworks/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0, weak)
      @executable_path/Frameworks/libcycript.dylib (compatibility version 0.0.0, current version 0.0.0)
      @rpath/RevealServer.framework/RevealServer (compatibility version 2.0.0, current version 2.0.0)

其实就是**MonkeyDev**重签名后会自动打包进去的几个文件,我们把这些文件都放到pig-mobile.app/Frameworks的目录下面

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgik5hx8nj30ng05bjs8.jpg)

然后我们再把自己录制的那个1.mov文件和修改后的二进制文件一起放入到pig-mobile.app文件夹内。下面就是使用**AltStore**工具进行重签,首先打开**AltStore**工具,选择*Install Mail Plug-in*,安装一个Mail的插件到我们的电脑上,安装完成后,我们需要打开Mail的设置界面,选择“管理插件”并启用它。

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgevyaycij30j70c70vk.jpg)

插件被启用以后,我们就可以愉快的玩耍啦,选择*Install AltStore*,然后安装到你的手机上,它会弹出一个账号密码的输入框,让你输入自己的Apple ID和密码。下面我们进入等待时间,等待它安装成功,成功后会有提示。

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgeut9ycxj31070a4jwl.jpg)



安装成功后,我们的手机桌面上就会出现这个软件,点击这个软件会发现有一个弹框,我们打开手机的设置 --> 通用 --> VPN与设备管理 --> 开发者App--> 信任你的账号

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgetl554ij30hv0ei7ah.jpg)



信任以后,我们就可以正常的打开这个软件,这一步安装完成后,我们基本上就已经成功了一大半,下面我们需要把刚刚我们已经修改后的游戏文件进行打包,进入到**我们解压的PayLoad文件夹**,执行如下命令,把文件夹重新打包成ipa,这们我们就得到了一个"我的饭店_hook.ipa"

>注意:在直接安装这个ipa包的时候,AltStore报了一个错,错误的内容是“the name for this app is invalid”,经过我的研究,发现是签名工具对中文和特殊字符支持不好导致的,所以需要针对这个包进行修改,修改的地方有四处:
>
>1、pig-mobile.app目录修改为pigmobile.app
>
>2、二进制文件名由pig-mobile修改为pigmobile
>
>3、Info.plist里的**Bundle display name**修改为pigmobile
>
>4、Info.plist里的**Executable file**修改为pigmobile(就是二进制文件的文件名)



```
zip -r 我的饭店_hook.ipa Payload
```

然后我们只需要把这个文件通过任何办法下载到手机上即可(由于公司保密性较高,所以无法通过微信、QQ等手段。我就演示下通过自建服务器吧)

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgbb8a8b2j314i079wfb.jpg)

上面是我在内网里自建的一个简单的服务器,我们让苹果手机和我们处在同一个局域网内,然后使用safari浏览器直接访问我们的服务器地址,然后下载对应的“我的饭店_hook.ipa”文件 ,下载完成后,我们直接通过**AltStore**方式打开这个ipa文件

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgesro2mxj30id0f7wgs.jpg)



这里会让你再次输入Apple ID和密码,输入完成后,即可完成自签名,自签名的有效期是七天,七天后只需要刷新重签即可。

!(https://tva1.sinaimg.cn/large/008i3skNgy1gsgerhp1v4j30i90f9jvs.jpg)


相关资料下载地址:
https://gitee.com/allenzhang/note/

大先生0201 发表于 2021-7-15 17:52

感谢分享

张艾伦 发表于 2021-7-22 11:00

砼小砼 发表于 2021-7-19 08:09
1.mov这个是什么文件?
libsubstrate.dylib,libcycript.dylib,RevealServer.framework/RevealServer, ...

动态库放进去会自动签名
1.mov那个是我之前写《iOS视频广告游戏跳过》用到的资源
此文章就是说如果不使用开发环境直接注入一个游戏,让它可以自动跳过广告的

lingye512 发表于 2021-7-15 13:37

技术文章 感谢分享。。。。。。。。

daszpn 发表于 2021-7-15 20:52

看见代码都头大

李彡 发表于 2021-7-15 22:05

虽然看不懂,但是大佬牛逼

yearnth 发表于 2021-7-15 22:18

虽然看不懂,但是HENGANXUIE

wen704 发表于 2021-7-16 09:19

大佬就是大佬,一套操作玩的66的,问几个问题
查看依赖动态库是 optool -L libpighomeDylib.dylib 还是 otool   (当下还没实践过)
还有就是怎么判断当前需要处理的动态库
那个AltStore签名后的应用还能收到推送消息不
{:1_924:}{:1_924:}{:1_924:}希望大佬不吝赐教

SCL 发表于 2021-7-16 10:32

技术大咖 ,已加分。。

谁说要在乎我 发表于 2021-7-16 15:41

感谢分享,技术派!

52tc007 发表于 2021-7-16 16:42

插眼以后备用,谢谢啦!
页: [1] 2 3 4
查看完整版本: iOS动态注入与自签名