APP逆向(中)

优化

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

结果

基本已经达到我们的需求,且无卡顿现象。

你可能感兴趣的:(iOS逆向学习)