您的位置:首页 > 移动开发

APP逆向(中)

2016-08-04 23:06 176 查看

优化

经过修改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;
}


修改Tweak.xm

现在怀疑之前某些VIP权限不能使用,是因为他没有调用isVip函数,而是直接获取来NSUserDefaults对应值。我们来修改一下Tweak.xm。重新安装以后,果然所有的VIP权限都可用。但是我们还有卡顿问题。

%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

定位controller

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去发送请求。

修改Tweak.xm

屏蔽了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


结果

基本已经达到我们的需求,且无卡顿现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: