Android逆向之旅—逆向「某借款理财App第一版」防抓包策略

安全和逆向 尼古拉斯.赵四 9744℃

一、前言

最近在编码美丽小密圈里面有人问了最近很多app都做了应用防抓包策略,没法抓包了,这个最近我正好需要手机样本然后分析出现在大部分的应用的防抓包策略,整理说一下,当然前提需要先分析多个样本才能总结,所以就在小密圈里收到了很多人反馈的一些app,后续会对这些样本进行防抓包策略分析,今天首先来看一下这款借款理财应用的防抓包策略。

 

二、逆向抓包分析

首先我下载了最新的版本应用之后,按照正规流程来先装Charles证书,然后开始抓包,一般有防护的这时候都是失败的:

这里毋庸置疑,直接用通用的Xposed工具JustTrustMe工具,不过可惜的是这个工具没生效,因为这个工具是有日志输出的,可以直接通过日志查看发现日志也没有,也就是说这个工具Hook失败无效了,然后Jadx中查看代码:

因为怀疑他对Xposed等hook工具做了防护,所以全局搜索Xposed即可看到的确有一个Hook检查类,不过可惜的是这个这里的方法全局搜索都没有地方调用,可能怀疑在so中用反射调用的,当然要去分析so,不过可惜的这不是我们本文的目的,因为这个工作要到后面的第二版逆向来做了,到这里我们知道他最新版已经做了Xposed防护了,所以那个工具没用了,那么到这里我们怎么办呢?其实按照之前的思路是最新版有问题,可以碰运气去看他的历史版本最好是越早越好,当然网上搜到了他的第一版,发现的确没有做防护,直接用JustTrustMe就可以抓包了:

这里看到了可以正常抓包了,不过可惜的是没法用,因为大家都能猜到,应用在新版做了防护,不可能让你在继续使用旧版的,所以会有一个强提示升级:

如果不更新肯定是没法用的,所以这时候怎么办呢?其实很简单直接把本地版本号改成最新版即可,这个直接修改AndroidManifest.xml文件即可:

然后回编译即可。
拓展说明:
首先第一版app我们会发现这个应用几乎是所有防护都没做,用最新的apktool工具即可反编译和回编译操作,没有任何报错,由此发现这个应用在第一版是多么忽略安全问题,最主要是这个应用还是一个借款的应用,之前说过有些应用不选择安全防护因为需要牺牲一些成本或者性能问题,但是对于涉及到钱财的应用第一个想法不是把应用赶紧做出来,而是需要把安全放到第一位,如果安全不过关最好不要发版,因为那是对用户不负责任!

好了上面说的一些题外话,继续看改了版本号之后安装再看,还是一样没效果,这个后面再说为什么,那么我们全局搜索这个更新提示信息:

继续查看:

看到这里有个更新对话框展示逻辑,有个强更新判断,这个简单直接找到对应的smali代码注释即可:

然后再回编译回去安装运行:

我们点击登录的时候发现弹出提示还是说版本过低,这个就是和上面那个问题一样,我们虽然修改了AndroidManifest.xml中的值为最新版其实没什么用,那么就看看他是怎么读取版本号的:

继续抓包看看他的上传信息里面也没有携带版本号信息,这个就需要想到我们之前在逆向秒拍的签名算法的时候就遇到了,除了这个上传参数地方可以加数据,还有一个地方就是Header信息中:

果然在Headers中携带了很多信息,他把这些信息放到了Headers字段中了,看到这里的版本号的确还是第一版的值,然后全局搜索这个字段:

看到这里的定义值,继续看方法:

这里读取的是一个常量值:

这里竟然是直接读取常量值版本号,不是调用系统Api读取xml中的versionCode的,所以上面看到的确是无效的,所以以后如果发现改了xml里面的版本号无效就全局搜索版本号值,那么知道这个地方了,修改最新版即可,不过这里其实有个坑,因为我们知道Android编译过程中会做优化操作,会把static final类型的值直接全局替换到指定用到的地方,所以现在看看全局用到的地方:

这里直接用命令搜索:0x2715=10005,看到其实还是蛮多的,如果笨一点的方法就是依次把这些文件打开替换成最新的版本即可:0x4f4d=20301,不过笨办法的操作这里就不说了,这里我们可以利用Mac中的命令全局替换,说到这里真的不得不说Mac中的命令行工具比Windows强大不少,感觉还是Mac更适合开发哈哈哈,不过可惜的是现在很多好用的破解小工具都是在Windows下编写的,Mac上没法使用,这一点挺可惜的

全局替换命令很常用,大家可以记住:

Mac中查找命令:

find . |xargs grep -ri “find_str” 或者 grep -rn “find_str” /.

Mac中查找全局替换内容:

grep -rl ‘src_str’ ./ |xargs sed -i “” “s/src_str/new_str/g”

通过上面的命令我们就把全局的版本号替换成最新的了,然后再回编译运行即可:

这时候在登录就成功了,然后就是信息认证的过程了:

这里有个讽刺的地方,他每个页面都声称是银行加密标准,结果登录接口竟然把密码明文上传:

 

三、知识点回顾

好了到这里我们其实已经过掉他的防抓包策略,可以正常抓包了,只是这个不是真正意义上的过掉,而是我们用了一个巧妙的方式操作的,所以通过本文我们可以学习到这些重要知识点:

  • 第一、当我们抓包发现我们想要的信息没有在请求参数列表中,有可能藏在Headers字段中
  • 第二、如果发现一些应用抓包防护很厉害,即使一些工具也没法用,可以曲线救国碰运气的去找他的历史版本,因为现在的应用制作非常浮躁,第一版都觉得先把功能做好就上线了,后续版本再说安全问题,那么这时候我们就可以去弄旧版本,当然这时候需要解决强更新操作
  • 第三、如果有的应用有强更新操作,但是我们又不想更新,可以直接修改xml中的versionCode值来进行操作,但是如果发现失败了,可以直接全局搜索反编译之后的代码中是否有指定的版本号,如果有直接用命令全局替换即可

 

严重说明

本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,长按下方二维码加入小密圈一起学习探讨技术

四、总结

感觉这个应用的第一版作为这种借款类型的应用几乎是不合格的就发布了,对用户来说信息安全是最重要的,虽然在最新版进行了防护操作,其实也就是hook防护,签名防护等,这个后续还会继续出第二版的操作过程,敬请期待!

 

《Android应用安全防护和逆向分析》

点击立即购买:京东  天猫  

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

转载请注明:尼古拉斯.赵四 » Android逆向之旅—逆向「某借款理财App第一版」防抓包策略

喜欢 (25)or分享 (0)