微信消息禁止撤回、自动抢红包、虾米音乐VIP怎么来???。
为了满足一下好奇心更为了能够深入的了解iOS内部原理
1.要做什么
在手机不越狱的情况下,可以修改微信运动步数。当然网上也有很多教程(包括越狱的和非越狱的),可以直接拿来用。但为了知其所以然,所以打算自己动手一步步实现。

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 53149696cryptic 0 // 0代表解密、1代表加密
(2)安装iOSOpenDev来编写Hook代码实现你想要的功能。
安装成功后,新建工程选择CaptainHook Tweak,
并将CaptainHook.h文件导入工程中。

至于如何用class-dump提取接口文件以及编写Hook代码,上一次。代码写完后,选择真机编译程序,成功后生成的动态库(xxx.dylib)便是我们需要注入到二进制文件中的程序。
(3)新建一正常项目,bundle Id可以自由设置,这样不会覆盖掉手机里已安装的原版微信。build一下,保存好生成的描述文件embedded.mobileprovision(名字貌似不可自定义)。

(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 CFBundleIdentifier4.遇到的坑
如果自定义enlitiments.plist,记得Team ID一定要填写生产证书ID
