初涉iOS逆向工程:免越狱修改微信(外观篇)
美国学者埃德加·戴尔(Edgar Dale)1946年提出了“学习金字塔”(Cone of Learning)的理论。他提到:学习效果在50%以上的,都是主动学习包括讨论、实践和讲授。我希望能通过做笔记的方式,巩固自己学过的知识,以及分享这些知识给其他对此感兴趣的人。
前言
微信成立七年多了,主界面也一直没有变过,和刚推出一样的简洁,纯粹。 但是看久了这个唯一的主题,总会有一些眼腻。偶然在网上看到了美化版的微信,而这些“分身版”、“美化版”的客户端预留了大量高危接口,一不注意手机就会中招(详情参考 :微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析),于是生出了自己捣鼓的念头。刚开始的时候什么都不懂,做了一大堆无用功,写下来避免更多人重蹈覆辙。
iMazing导入(失败)
之前在Mac上用iMazing改过几个小游戏的数据,所以我先试着从iMazing导出,结果发现导出的.imazingapp文件只有几份简单的数据(猜测是没受签名保护的文件),根本没有能修改的东西,心态崩了。
PP/爱思助手导入(失败)
这是网上出现*多的方法,在PP助手上下载正版ipa,提取其中的文件,发现朋友圈的颜色在其根目录下的color.css文件中。直接用记事本打开随便修改几个RGB颜色,保存。导入到手机时出现验证失败的提示,很明显是签名的问题。网上对这个问题的说法不一,个人觉得是版本的问题 。到这篇文章完成之前iOS 11.2 仍然不能越狱,第三方助手工具也没有找到此版本对应的漏洞,所以不支持导入修改过的ipa,心态继续崩。
IPAPatch导入(成功)
此方法涉及到了精彩的iOS逆向工程,感谢Naituw大神带我打开了新世界的大门。
IPAPatch是什么?
GitHub用户Naituw表示之前开源的关闭 Facebook for iOS 的 HTTPS 证书校验的方法操作太过繁琐,为了进一步简化调试、验证操作,研发了IPAPatch,它可以提供一个简单的方法来修补iOS应用程序,且不需要越狱。
IPAPatch 可以做什么呢?
和 “HackingFacebook” 类似,”IPAPatch” 主要可以在第三方的 IPA 文件上 “添加” 自己的代码,但过程有很大不同:
大神Github:https://github.com/Naituw/
开整
一 . *终效果展示
聊天界面
发现界面
我的界面
朋友圈界面
二 . 需要准备的工具及设备
- 清醒的头脑
- 开发者账号(或证书)
- Macbook
- Xcode for mac
- Reveal for mac
- PlistEdit Pro for mac
三 . 具体实现步骤
1.下载开源项目IPAPatch,下载地址:百度网盘 密码: wu1m;
2.打开Reveal,依次点击菜单栏 Help → Show Reveal Library in Finder → iOS Library , 在iOS Library里拿到集成文件RevealServer.framework,并将此集成文件移动到IPAPatch/Assets/Frameworks文件夹里;
3.准备一个解密过的 微信.ipa 文件。可以自行砸壳,因为身边没有越狱的手机,所以我是在PP助手下载的越狱版。放上已破壳6.6.6版本:百度网盘https://pan.baidu.com/share/init?surl=zP4MlvUfLkVXwgFGqcRZtA 密码: ipyj;
4.修改文件并保存;
5.将 微信.ipa 重命名为 app.ipa,替换文件夹IPAPatch/Assets里的模板文件app.ipa;
6.打开IPAPatch.xcodeproj文件,点击左上角项目栏的三角形感叹号移动界面至Show the Issue navigator,再点击进入左侧 IPAPatch-DummyApp 标签,在右边的详细信息里配置Bundle Identifier和开发者证书。其中Display Name更改后会作为前缀添加到更改后的App上;
7.连接iPhone,趁电脑不注意,迅速点击左上角的运行按钮,稍等片刻,将自动将此App安装到手机上;
上面的操作其实很简单,关键性的编译、执行以及注入步骤都已经由大神写进了patch.sh的脚本里,编译运行时,所有操作都是全自动完成的。
Build Succeed后,激起了我修改更多数据的兴趣,刚好又在网上找到了另一个大神制作的一大堆iOS主题包。
随便下载一个主题替换包,能替换的东西基本上已经全部包含在里面了。解压后将要替换的文件拖入之前的app.ipa里,等待文件替换完成。
再重复第七步即可。
简单介绍一下部分替换文件,有待继续挖掘
app.ipa/AppIcon**x**@*x.png:微信图标,目前更改后手机桌面仍然显示原图标,原因不详
app.ipa/Expression_**@2x.png :老掉牙的表情
app.ipa/zh_CN.lproj/InfoPlist.strings :包含微信的名称、以及发现页的几项文字(朋友圈、扫一扫)
app.ipa/zh_CN.lproj/mm.strings:大部分文字选项都在这个文件里,都可以修改,随便修改了两项
app.ipa/Assets.car:大多数图标文件集成在这个文件里
app.ipa/in.caf :消息铃声
四.遇到的几项问题以及注意事项
1.个人描述证书只有七天的期限,七天后需要重新安装。
2.用自己证书安装的微信不支持Safiri浏览器上的网页分享,应该是未上架App store客户端的通病。
3.有时候不推送通知,或只通知一次,原因不详。
4.解压后的IPAPatch文件只能用Xcode运行一次,第二次运行会出现“apple match-o linker error”,此问题还没有找到解决办法,望各路大神指点一二。
5.*次进入微信或者结束进程后再打开微信会有hock成功的提示。此提示可以在IPAPatchEntry.mm文件里更改(alertControllerWithTitle;message;alertControlleraddAction;)。
贴上代码
hook成功的标签
总结
这篇文章只记录了如何修改App的外观,其他的例如防撤回、自动抢红包以及隐藏小红点等功能性模块涉及到了更多Objective-C方面的知识,本人刚接触OC,尚未弄懂其深邃的语法,在接下来的日子里我会继续向深层次探索。