现在大家都开始使用MonkeyDev来调试别人的APP了,但是越牛逼的框架使用起来越繁琐,毕竟功能跟易用性是呈反比的。但是对于简单的渗透来说,用IPAPatch还是方便一些。
首先从github上下载IPAPatch,然后解压缩,发现就是一个iOS的工程文件,先看一下他的文件结构:
├── Assets
│ ├── Dylibs
│ ├── Frameworks
│ │ └── RevealServer.framework
│ ├── Resources
│ └── app.ipa
├── IPAPatch
│ ├── IPAPatchBypassAntiDebugging.h
│ ├── IPAPatchBypassAntiDebugging.m
│ ├── IPAPatchEntry.h
│ ├── IPAPatchEntry.m
│ ├── Info.plist
│ └── Vendors
│ └── fishhook
├── IPAPatch-DummyApp
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Info.plist
│ ├── ProjectConfigurationWarning.cpp
│ ├── ProjectConfigurationWarning.hpp
│ └── main.m
├── IPAPatch.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ └── xcuserdata
│ └── xcuserdata
│ └── youssef.xcuserdatad
├── LICENSE
├── README.md
├── Temp
│ ├── Payload
│ │ └── app-resign.app
│ └── __MACOSX
│ └── Payload
└── Tools
├── create_ipa.sh
├── options.plist
├── optool
├── patch.sh
└── restore-symbol
我们可以看到,在Assets文件夹下,可以放入脱壳的app.ipa,这里有两点要注意,首先必须是脱壳的ipa,其次必须重新命名成app.ipa.
Assets文件夹下面的Frameworks文件夹里,可以放入需要重新打包进APP的framework,这里我放了RevealServer.framework,是为了用Reveal查看他的UI结构。
重新打包之后生成的app放在了Temp->Payload文件夹下面。
然后用xcode打开IPAPatch工程。
其实我们需要用到的就是IPAPatchEntry.m文件,我们主要的hook代码就写在里面。
在重新打包之前,我们要先改一下IPAPatch-DummyApp的bundleID和证书文件:
证书选择个人证书就行,bundleID随便改,只要不跟别人的冲突。
将已经砸壳过得app.ipa放入Assets文件夹中,然后连接上手机,运行一下。。
这个手机选择也是有讲究的,我试过iOS8-iOS11的未越狱手机,发现在iOS11.4.1上会安装失败,其他系统会成功,所以最好是找个iOS10或者iOS9的手机测试。
在安装过程中,如果出现错误:
couldn’t be opened because you don’t have permission to view it. Even though i have placed my app decrypted with clutch and named it app.ipa
我的解决方法是进入options.plist文件(Xcode里面文件搜一下),把里面的RESTORE_SYMBOLS字段改为NO,然后重新运行就好。