ios已安装app提取_了解iOS内部原理

微信消息禁止撤回、自动抢红包、虾米音乐VIP怎么来???。

为了满足一下好奇心更为了能够深入的了解iOS内部原理

1.要做什么

在手机不越狱的情况下,可以修改微信运动步数。当然网上也有很多教程(包括越狱的和非越狱的),可以直接拿来用。但为了知其所以然,所以打算自己动手一步步实现。

45d0cc4052b0d34a18ee69dec420a3a1.png

2.准备工作

需要用到的工具:已砸壳的ipa文件、iOSOpenDev、yololib、CaptainHook、iReSign(很好用的签名工具)。由于直接从AppStore里下载的App都是经过加密的,所以需要解密(即砸壳,需要有一部越狱设备),没有越狱设备直接去网上下载即可。

3.开始实现

(1)下载ipa完成后要确认下是否真的已被解密。

先通过命令

unzip weChat.ipa

解压得到weChat.app文件,

再通过命令

otool -l WeChat.app/WeChat | grep -B 2 crypt

来查看是否已解密。结果如下:

        
  cmd LC_ENCRYPTION_INFO     // armv7架构      cmdsize 20     cryptoff 16384    cryptsize 49463296      cryptic 0   // 0代表解密、1代表加密--          cmd LC_ENCRYPTION_INFO_64  // arm64架构      cmdsize 24     cryptoff 16384    cryptsize 53149696
cryptic 0  // 0代表解密、1代表加密

(2)安装iOSOpenDev来编写Hook代码实现你想要的功能。

安装成功后,新建工程选择CaptainHook Tweak,

并将CaptainHook.h文件导入工程中。

dc5468016789fbf722f23ffe10de5cf2.png

至于如何用class-dump提取接口文件以及编写Hook代码,上一次。代码写完后,选择真机编译程序,成功后生成的动态库(xxx.dylib)便是我们需要注入到二进制文件中的程序。


(3)新建一正常项目,bundle Id可以自由设置,这样不会覆盖掉手机里已安装的原版微信。build一下,保存好生成的描述文件embedded.mobileprovision(名字貌似不可自定义)。

feb19c3259ac140cf9d510feafdf2dec.png

(4)下载yololib,将yololib、xxx.dylib、embedded.mobileprovision、解压后的wechat.app放在同一目录中,

执行命令

./yololib WeChat.app/WeChat xxx.dylib

将动态库注入到微信的二进制文件中。成功后结果如下:

2017-03-21 01:28:00.199 yololib[39045:1159498] FAT binary!2017-03-21 01:28:00.199 yololib[39045:1159498] Injecting to arch 92017-03-21 01:28:00.200 yololib[39045:1159498] Patching mach_header..2017-03-21 01:28:00.203 yololib[39045:1159498] Attaching dylib..2017-03-21 01:28:00.203 yololib[39045:1159498] Injecting to arch 02017-03-21 01:28:00.203 yololib[39045:1159498] 64bit arch wow2017-03-21 01:28:00.206 yololib[39045:1159498] dylib size wow 722017-03-21 01:28:00.207 yololib[39045:1159498] mach.ncmds 762017-03-21 01:28:00.207 yololib[39045:1159498] mach.ncmds 772017-03-21 01:28:00.207 yololib[39045:1159498] Patching mach_header..2017-03-21 01:28:00.210 yololib[39045:1159498] Attaching dylib..2017-03-21 01:28:00.210 yololib[39045:1159498] size 662017-03-21 01:28:00.210 yololib[39045:1159498] complete!

注入成功后,再将xxx.dylib和embedded.mobileprovision拷贝到weChat.app目录下即可。


(5)新建目录Payload,将weChat.app放入该目录下执行命令zip -qry weChat.ipa Payload/生成ipa文件,接下里对ipa进行重签名、打包即可安装到手机。


(6)对ipa签名和打包为了方便,可以选择用这个开源工具iReSign,很实用(entitlements.plist可以不用选择,会自动生成)。


(7)额外说明:如果想查看App原来的bundle Id,可通过系统自带命令行工具Plutil(property list utitlity)

plutil -p ~/Desktop/xxx.app/Info.plist | grep CFBundleIdentifier
4.遇到的坑

如果自定义enlitiments.plist,记得Team ID一定要填写生产证书ID

181768fd28d34274cba529edcac65999.png


版权声明:本文为weixin_36199904原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。