但我们总不可能点几百几千下,这样实在太麻烦了。Jadx 的设计者给我们提供了一种类似正则表达式的匹配方法,可以屏蔽这些讨人厌的第三方类,操作也很简单。打开文件——首选项,如下图,(建议)不要勾选“自动后台反编译”,因为它可能占用你电脑更多的内存。
点击编辑,像我这样输入,类名以 baidu 或 android 开头的类就会被 Jadx 屏蔽掉,点击确定后保存设置,Jadx 会重新加载这个 Apk,你会发现已经生效,这些类变成了灰色。
我们浏览一下列表,将比较明显的一些刺头并闭掉。
android
com.alipay
com.baidu
com.facebook
com.google
com.huawei
com.meizu
com.networkbench
com.qiniu
com.tencent
com.vivo
kotlin
你可能会难以把控,怕误伤,比如 com.networkbench.xxx,它似乎很像 App 中用于处理网络请求的模块,怎么避免误伤呢?百度一下就行,如果消息模棱两可,就搁在那儿不排除即可。
android com.alipay com.baidu com.facebook com.google com.huawei com.meizu com.networkbench com.qiniu com.tencent com.vivo kotlin
一路保存设置,最好重启一下JADX,这样可以释放掉由于反复操作Jadx的设置而导致的内存占用。
Jadx默认在使用搜索功能时,才开始反编译,点击Jadx左上角魔法棒,然后稍等片刻。
原先反编译某书时占用6G左右内存,现在少了几乎一半。
经过这一顿调教
我们正式开始搜索拦截器相关的特征。
三、定位关键代码
Jadx 并不支持正则表达式的方式进行检索,所以我们这儿搜索 “implements Interceptor {”
再试试第二个关键词
再试试第三个关键词
真是让人惊喜,只有三处适宜的代码,而且其实就在两个类里,先看一下第一个类
传入了一个 map 集合,不停 for 循环,按照键和值的方式将内容传进 addQueryParameter 方法中,妙啊,比如map为 {“sign:12345678”},这不就传进去了吗,赶紧右键查找一下用例,只有一处,点进去。
代码越来越乱了,这个时候冷静一下,要避免一叶障目,不要先钻进去研究逻辑,保持怀疑,然后直接看下一个符合条件的类,要知道这儿可是出现多处 .addQueryParameter 方法,也很像添加多个参数的操作。
点进去看一下,有些代码会让你觉得很 demo 很像,比如什么request.url().newBuilder(),除此之外,我们看到了大量类似 oldRequest 的提示,这也只能说明这个地方很可疑,就像第一个检索内容一样,但不足以让我们认定它就是我们要找到拦截器。
从上往下看一下这个类
这儿似乎就是我们需要的那个拦截器类,我们看一下sign的用例,j上右键——查找用例
两处方法点开后,仔细瞅瞅,不管是map的put方法,还是newBuilder的add方法,其实都是往集合里塞东西,里面都是两个参数,迷糊的同学可以看一下前面的demo,参数一是键,也就是参数名,在这儿也就是this.j,也就是”sign“,参数二就是具体的sign值,也就是我们要破解的sign。我们可以发现,两处的sign值都是由a方法生成,a方法的传入是一个map集合(linkedhashmap是map的一种),返回一个String。
多半这个a方法就是sign的生成处了,在下一讲中,我们会验证一下是否属实,如果没找错的话,就可以分析这个 sign,进行 sign 的破解。这篇文章就到此为止了。
看我教程的人不多,但读者一直支撑着我继续写这些拙劣的文字和教程,非常非常感谢大家。
在这儿做一下更新的说明,我每一节的内容其实量挺大的,再加上我需要反复琢磨表达和思路,所以更新比较慢,以后会减少单篇的内容,在保证质量的前提下尝试一天一更,谢谢三五读者的支持和厚爱