非越狱iOS应用逆向-更改微信步数

系统环境

  • macOS 10.12.2
  • Xcode 8.2
  • iOS 10.2

工具&软件:

分析微信

工欲善其事必先利其器,我们先将工具和软件都准备好,过程中会遇到很多问题,但我相信你能成功的。阻扰大家的主要是一些环境的搭建以及相关配置没设置好,结果导致dylib编译过程各种错误,重签名不成功,各种闪退等。所以本文里的每一步操作都会很详细的交代,确保大家都能操作成功。

我们先拿到用PP助手下载好的越狱版微信iOS客户端,因为从AppStore下载的微信是经过加密的,还需要砸壳.

Paste_Image.png

下载后解压,我把他放在了桌面上,然后又创建了一个空文件夹准备用来放dump出来的头文件

Paste_Image.png

打开终端,输入class-dump,可以看到class-dump的指令(我是10.12的系统,之前安装class-dump还费了点事,要更改下系统的权限,不然class-dump不允许安装)

Paste_Image.png

现在我们就可以输入命令dump出微信的头文件啦

$ class-dump -H /Users/zhangtaoran/Desktop/WeChat/Payload/WeChat.app -o /Users/zhangtaoran/Desktop/WeChatHeaders

但是过程肯定不会这么顺利,当我打开文件夹后只看到了一个CDStructures.h,里面什么都没有

Paste_Image.png

我一脸懵逼,可能我们从PP助手下载的越狱版微信仍然有壳?但我觉得这个可能性应该比较小,但是我们有了CDStructures.h这个线索,去Google和百度了一番,得知出现这种情况有两种可能:

  1. 还需要砸壳,砸壳工具有:AppCrackr、Clutch、dumpcrypted 等;由于 AppCrackr 、Clutch 暴力砸壳、操作简单,招致公愤,因此一些核心功能,已经下架,在高级系统中,已不能使用;因此,推荐: dumpcrypted 砸壳工具。工具获取及使用方法,参考:https://github.com/stefanesser/dumpdecrypted

  2. 当砸壳完毕后,使用 class-dump 仍然只导出 CDStructures.h一个文件,则可能架构选择错误,armv7对应的是iPhone5及以下的设备,arm64则是5s及以上的设备,所以微信也包含两个架构,armv7和arm64。关于架构与设备之间的对应关系可以从iOS Support Matrix上查看。理论上只要把最老的架构解密就可以了,因为新的cpu会兼容老的架构。我们这里加上armv7再输入命令。

class-dump --arch armv7 /Users/zhangtaoran/Desktop/WeChat/Payload/WeChat.app -H -o /Users/zhangtaoran/Desktop/WeChatHeaders

然后就看到文件开始跑了,非常多,有点小激动,算是成功了一小步,可以看到微信一共8393个头文件

Paste_Image.png

定位与步数相关的文件

微信这种项目的命名应该是很规范的,我们想要修改步数就先尝试查找一下step相关的头文件,search出来的结果有很多,最后我定位到这个文件

Paste_Image.png

打开过后可以看到,这两个应该就是记录步数的属性

Paste_Image.png

这里的属性get方法应该就是判断HealthKit是否可用然后去里面取数据,我们就把他们两个的get方法都替换掉就好了

利用iOSOpenDev替换方法

利用 iOSOpenDev 创建一个 hook 的模板,就连手动调用 method-swizzling 的代码也省了。

Paste_Image.png

然后开始写代码修改掉那两个方法的实现,直接返回想要的数值

Paste_Image.png

build 一下生成 .dylib

Paste_Image.png

再用 dylib_insert 把动态库的地址注入 Mach-O

$ insert_dylib @executable_path/ModifyStepCount.dylib /Users/zhangtaoran/Desktop/WeChat/Payload/WeChat.app/WeChat 

然后就会在相同位置生成一个新的 Mach-O 文件。

Paste_Image.png

我们用 MachOView 就能看到新的动态库已经被注入了:
在Fat Binary -> Executable -> Load Commands -> LC_LOAD_DYLIB

Paste_Image.png

最后把这个文件改名重新改回 WeChat替换原来的文件,再和动态库一起放入原 WeChat.app

因为微信中还有watch app,我怕他还是加密的,我也将WeChat.app里面的Watch文件夹,连同PlugIns文件夹一起删去,怕它影响我们重签名

重签名并打包

现在工作已经完成一大半了,现在只需要对刚才修改好的微信重新签名并打包,我是用的免费证书,要注意的是,由于中国的开发者利用免费的证书大量对应用进行重签名,所以目前苹果加上了许多限制,免费开发者的provisioning证书有效时间从之前的30天改为7天,过期后需要重新签名。另外就是一个星期内最多只能申请到10个证书。我就用Xcode新建了一个工程,让苹果给我生成一个新的有效期为7天的描述文件,然后用这个描述文件来签名我们自己修改的微信。

简单的来说就是创建一个APP,让苹果给我们这个APP发了一个可以免费在真机上测试的证书,然后用我们修改后的微信伪装成为这个APP,就达成了非越狱环境下iOS App Hook

Paste_Image.png

成功生成描述文件

Paste_Image.png

然后我们就可以用iOS App Signer重新签名了,其实iOS App Signer是帮我们获取到本地上的开发者签名证书和所有的Provisioning文件,然后对结果做了一个筛选,去掉了那些过期的证书,然后用描述文件对APP进行签名,再对签好名的应用打包。

我们就选择好刚才生成的那个证书,简单地点一下开始,就等着他帮我们重签名并打包好吧

Paste_Image.png

最后就将重新打包好的ipa安装到手机上,搞定!

Paste_Image.png

由于 Objective-C 动态的特性,我们可以不用对二进制文件进行反编译,然后再对汇编指令进行修改,只需要直接添加一个动态库就能实现功能的更改了。

参考资料

听说你想撤回信息?:http://www.jianshu.com/p/ac7eddd644c3
iOSAppHook:https://github.com/Urinx/iOSAppHook
class-dump 和 iOSOpenDev 的使用:http://blog.csdn.net/chaoyuan899/article/details/39271197
Objective-C的hook方案(一): Method Swizzling:http://blog.csdn.net/yiyaaixuexi/article/details/9374411

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容