经过修改UserInfo类+ (BOOL)isVip,效果并不好。需要更深入的研究isVip到底做了什么。
一、 Hopper Disassembler
将我们砸壳过后的decrypted文件拖入hopper中即可。但是反编译出来的为汇编,且不支持64位的Pseudo code。折腾了很久还是无法解决,找一台4s生成了32位decrypted文件。32位需要指定arch,如下:
$ class-dump --arch armv7 -S -s -H ~/Desktop/demo/wechat/WeChat.decrypted -o ~/Desktop/demoHeaders/wechat
1.将下载的Decompile.py文件放到~/Library/Application Support/Hopper/Scripts目录里。
2.点击菜单 Scripts –> Class Decompile
3.点击弹框Decompile All Classes
1.xcode新建project
2.将头文件导入项目
3.将m文件导入项目(hopper生成,目录为~/ClassDecompiles)
我们现在可以去查看函数isVip的实现。一目了然,使用了NSUserDefaults并且key也能清晰看到。
+ (id)isVip
{
if (CPU_FLAGS & NE) {
Push(r4);
Push(r5);
Push(r7);
Push(lr);
}
r0 = [NSUserDefaults standardUserDefaults];
r4 = [r0 retain];
r5 = [r4 boolForKey:@"KEY_CURRENT_IS_VIP_STATUS"];
[r4 release];
r0 = r5;
return r0;
}
%hook UserInfo
+ (BOOL)isVip
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"KEY_CURRENT_IS_VIP_STATUS"];
return YES;
}
%end
二、Charles
卡顿时,发现界面图片一直在刷新。怀疑APP在不停的获取数据。如何证明?
手机和PC必须在同一网段。
查PC的IP,将手机的代理设为PC的IP,端口为8888。
分别下载手机以及PC对应Charles证书,以支持https的抓包。
手机打开APP,PC权限同意。
将所有Host添加到white List,https请求设置Enable SSL Proxying。
我们发现该APP确实在循环发请求。我们把Tweak.xm删除后,请求正常。确实是Tweak.xm导致的问题,但是为什么呢?
如:http://api.frdic.com/api/v4/ting/homepage
三. Reveal
1.我们首先来看下首页界面,定位一下controller,缩小范围。
2.越狱机安装Reveal Loader,我们查看到首页对应的controller为MainViewController。
3.查看MainViewController的viewDidLoad方法,发现调用了configureContentView方法,其中初始化了RecommendViewController。
1.查看RecommendViewController,发现TingStorageManager。
2.搜索网络请求字段v4/ting/homepage,发现HTTPManager的getHomePage 方法。
3.对应TingStorageManager的getHomePages方法。
4.RecommendViewController调用getHomePages之后,设置了一个NSNotificationCenter,对应key为 NOTIFICATION_VIP_STATUS_UPDATE。
5.猜测,改变NSUserDefaults中的VIP属性触发了该Notification去发送请求。
屏蔽了NOTIFICATION_VIP_STATUS_UPDATE的对应post方法,只在进入文章列表页面之后设置VIP属性。
%hook ArticleListViewController
- (void)viewDidLoad
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"KEY_CURRENT_IS_VIP_STATUS"];
%orig;
}
%end
%hook EUStoreObserver
- (void)provideContentForTransaction:(id)arg1{
return;
}
%end
基本已经达到我们的需求,且无卡顿现象。