wz306 发表于 2019-10-27 18:50:00

iOS逆向工程 -- 小黑盒的破解

## 小黑盒破解目标:

```undefined
在特定的页面中插入自己写的页面(如在头条的新闻详情页中插入自己放进去的广告页面
```

效果图:



如果对本教程中终端的命令行或是工具的使用不熟悉的话,可以看看我的另一篇关于逆向工程的文章。
[逆向的基础](https://www.jianshu.com/p/38261a775997)

## 小黑盒破解流程:

### 获取APP解密后的可执行文件

/var/containers/Bundle/Application/1312D372-0E9F-4CF3-9130-A365C08897DE/xiaoheihe.app/xiaoheihe

找到可执行文件xiaoheihe并看其是否是解密后的文件

```undefined
otool -l xiaoheihe | grep cryptid

    cryptid 0
    cryptid 0
```

当然为什么会有两个cryptid 一个是armv7的构架下的,一个是arm64构架下的。

至于怎么解密,可以从越狱版的PP助手上下载app,或是在越狱手机中的Cydia中搜索本公司的“兔兔破解助手”。

解密成功后,将可执行文件放入到Hopper工具中进行二进制编译。

### 查看APP的图层结构

用查看图层工具进行对app图层界面中控制器的获取。

可利用的图层工具有:
Reveal
FLEXLoader
至于这两个工具的安装和用法,你可以看我的这篇文章。
[图层工具的使用](https://www.jianshu.com/p/1574f4850640)

通过工具可以知道控制器是:MaxWebBBSNewsViewController

那么下面就是在hopper中搜索MaxWebBBSNewsViewController可以看到里面有很多方法
但我们需要的是hook他的ViewDidLoad即可

### Hook操作

预想:
需要在这个hook方法中的操作有

> - 创建广告需要展示的View
> - 该广告可能目前就是一条固定的url
> - 在该控制器中的webView上添加我们的广告页面
> - 在退出该控制器后我们需要remove掉广告view(当然再次进入详情页后还是得出现广告页面)

接下来的就是在xcode中创建我们的动态库插件了

动态库里面的步骤:

> - 动态库的入口申明需要hook的方法
> - 在hook的方法中首先执行官方APP自己的方法,之后添加我们需要完成的方法
> - 代码的编写,编译运行

(https://github.com/CoDancer/xiaoheihelib)

### 动态库的注入

注入(必须在最终的文件夹下)
./yololib xiaoheihe xiaoheiheLib.dylib

```bash
当然这里需要把我们需要的注入工具拷贝到xiaoheihe.app所在的文件目录下,同时cd到这个目录下,执行上面的命令。
至于工具的使用可以看看我的这篇文章,里面会介绍到我们注入的会有那些方法或是工具。
```

[动态库的注入工具]()

### APP的重签名

这里我们需要注意的坑有:

> - 在xiaoheihe.app 中下建立embedded.mobileprovision证书的描述文件,当然这个描述文件和重签名时候用到的描述文件相同的bundleId
> - 我们是在Payload下压缩文件,并改掉压缩后的文件类型.ipa



当然重签名你可以使用工具iOS App Singer,这个需要编译运行后即可。

之后需要用到时PP助手。

第一次在手机上安装,打开注入后的小黑盒,然而瞬间崩溃了

然后这种查找问题,发现是命令的问题,动态库应该是xiaoheiheLib.dylib
之后再注入,点开后并没有进入相应的hook方法中,然后又是各种找问题,发现在hook的入口必须

```undefined
CHLoadLateClass(MaxWebBBSNewsViewController);
CHHook0(MaxWebBBSNewsViewController, viewDidLoad);
```

并且在编译动态库的时候最好选择Generic iOS Device,然后在编译获取到动态库,在注入签名,重新打开后。

成果:

在头条的新闻详情页面中出现了我们注入进去的页面,退出详情页后,不显示广告页面。

页: [1]
查看完整版本: iOS逆向工程 -- 小黑盒的破解