之前已经介绍了某借款应用他的抓包策略防护,因为在小密圈里有人告知这个应用有一个抓包策略,抓不到数据包了,所以就分析的确他的最新版已经做了一些防护比如签名校验,Xposed防护等导致JustTrustMe插件以及之前介绍的升级版插件都用不了了,不过再怎么变他都是用的okhttp网络框架,设置ssl信息也就是那几个接口,但是因为现在Xposed插件没法用了,所以我们只能手动的去分析代码了。今天这篇文章就直接分析代码修改代码来直接搞定抓包策略。
首先因为我们这一次要改代码所有,我们先用apktool工具反编译,然后在回编译签名安装运行看效果:
安装运行之后提示这样的错误信息,这个明显是签名校验问题,我们可以直接用Jadx打开代码查看:
这里展示对话框,然后继续追踪代码查看:
这里看到是获取签名信息然后进行比对的:
然后看到的确用的是系统Api获取签名信息,其实到这里我们可以直接修改这个方法返回值是true即可,但是这里就不做修改了,因为为了验证我的kstools工具的威力,直接用这个工具一键搞定,当然肯定是可以的,不然我也不会在这里说了,所以大家可以直接用kstools工具即可搞定这个签名校验。
弄完签名校验之后直接签名打包安装就好了,这里可以看到他没有对二次打包做太多的校验逻辑,这个也算是安全的遗漏点,因为有了二次打包成功,我们就可以随意的修改代码了,首先我们然后抓包看看信息:
还是提示错误网络不安全,全局搜索错误信息到这里了,其实我们可以利用Xposed进行hook操作打印这个异常信息的,但是可惜他做了防护Xposed操作,所以搞不了但是没关系,这里在告诉大家一个小技巧:一般okhttp框架时候的时候如果有网络请求错误一般都会打印日志,就是会调用e.printStackTrace()打印信息:
我们通过日志发现的确有错误信息报道,然后把错误异常信息去网上搜索也是说的证书错误问题,但是这里有个问题就是我们没法查看在那个地方错误,以至于我们怎么去修改代码呢?这里又有一个小技巧了:在使用这个框架设置ssl的时候都知道就是三个Api的使用方法:
sslSocketFactory(SSLSocketFactory factory)
hostnameVerifier(HostnameVerifier verifiter)
getSocketFactory()
所以其实很简单,我们只要全局搜索这两个方法即可,但是这里可能不能这么做,因为我们之前分析另外一个应用的时候发现现在很多应用为了防止JustTrustMe插件,他直接把okhttp的一些方法全部混淆了,所以我们直接搜索这两个方法名可能不全,所以我们可以搜索两个参数类型,这两个是java系统库中的,所以不可能被混淆的,但是我们其实还有一种更加高效的方式,直接搜索这两个类的构造地方,因为既然要用那就要初始化:
这样就全局搜索到了初始化的地方,可以排除一下比如okhttp内部的一些方法,还有通过包名可以判断肯定没有关系的方法,最后就剩下这两个比较可疑了方法了:
看到这个类中设置ssl的方法,其实我们只要把这些方法全部设置一遍:
我们找到第一个方法的类中,直接用#注释了设置ssl的两个方法,然后再看第二个地方:
然后看到这个类有个好玩的地方,他本身做了一个兜底策略就是信任全部证书,但是有个if条件判断,这个就简单了,我们直接把判断条件改一下即可,把之前的a != null 改成a == null即可,怎么改其实很简单:
改了这个之后我们直接回编译然后安装即可:
抓包看到接口已经可以了:
但是当我们点击进入二级页面发现提示打不开错误信息,我们查看当前页面信息:
然后查看这个类定义:
继续查看代码:
我们看到了这个是WebView中的ssl校验逻辑,这个会判断如果正确的证书校验成功调用proceed方法,否则就调用cancel方法,这个校验方法还是在HttpsUtils里面:
这个可以直接改成返回值true即可,当然可以直接改,但是这里介绍一个AndroidStudio的一个好用的插件java2smali:
直接在Plugins->java2Smali,然后直接安装即可,安装之后我们可以编写好java代码:
然后点击菜单中的Build->Compile to smali:
这样编译成smali代码了:
我们只关心.prologue后面的代码,其实看代码也很简单,直接返回true:
这样就把原来的方法直接返回true了,修改好之后我们在用jadx打开看看:
这样就改成功了,这时候在安装就可以打开所有页面了,而且可以正常使用了,到这里其实我们已经通过直接改代码逻辑搞定了这个应用的防护抓包策略,但是问题依然还有就是这个应用是如何进行Xposed防护,其实他是用了第三方的安全框架,这个可能需要后续深入分析了。
第一、对于一些应用做了Xposed防护我们可以尝试修改代码,修改代码之后一般都会有签名防护的,可以用kstools工具一键先搞定签名防护操作。
第二、对于后续所有的抓包失败的应用,因为有了Xposed防护,所以原有的JustTrustMe插件没法使用了,所以需要分析代码,这时候查看入口很简单,直接全局搜索
sslSocketFactory(SSLSocketFactory factory)
hostnameVerifier(HostnameVerifier verifiter)
getSocketFactory()
等方法和类型信息。因为不管怎么变最终都是需要调用这三个方法,先需要初始化类然后在设置到okhttp中,所以一些应用没法在这些操作中做防护,就直接防xposed操作了。
第三、有时候我们手动改smali代码可能比较难,可以借助AndroidStudio中的插件编写好对应的Java代码然后变成smali代码即可
严重说明
本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,长按下方二维码加入小密圈一起学习探讨技术
对于本文内容其实还是比较简单的,但是又引出另外一个问题就是这个应用他竟然用了第三方的安全SDK做了一些防护,导致一些核心数据无法获取到,这个是后续需要弄得问题,当然这个可能直接对抗的是这个第三方的安全SDK功能了,不过有个好奇的地方,既然都用了这个SDK做了Xposed防护,却没有对代码二次打包做个好的防护,很是奇怪!
更多内容:点击这里
关注微信公众号,最新技术干货实时推送