Android逆向——定位到某书 Sign 算法(下)

简介: Android逆向——定位到某书 Sign 算法(下)

但我们总不可能点几百几千下,这样实在太麻烦了。Jadx 的设计者给我们提供了一种类似正则表达式的匹配方法,可以屏蔽这些讨人厌的第三方类,操作也很简单。打开文件——首选项,如下图,(建议)不要勾选“自动后台反编译”,因为它可能占用你电脑更多的内存。

640.jpg


点击编辑,像我这样输入,类名以 baidu 或 android 开头的类就会被 Jadx 屏蔽掉,点击确定后保存设置,Jadx 会重新加载这个 Apk,你会发现已经生效,这些类变成了灰色。

640.png

我们浏览一下列表,将比较明显的一些刺头并闭掉。

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 中用于处理网络请求的模块,怎么避免误伤呢?百度一下就行,如果消息模棱两可,就搁在那儿不排除即可。

640.jpg


640.jpg

android com.alipay com.baidu com.facebook com.google com.huawei com.meizu com.networkbench com.qiniu com.tencent com.vivo kotlin

一路保存设置,最好重启一下JADX,这样可以释放掉由于反复操作Jadx的设置而导致的内存占用。

640.png


640.jpg

Jadx默认在使用搜索功能时,才开始反编译,点击Jadx左上角魔法棒,然后稍等片刻。


640.jpg

原先反编译某书时占用6G左右内存,现在少了几乎一半。


640.png

经过这一顿调教

我们正式开始搜索拦截器相关的特征。

三、定位关键代码

Jadx 并不支持正则表达式的方式进行检索,所以我们这儿搜索 “implements Interceptor {”

640.jpg


再试试第二个关键词

640.jpg


再试试第三个关键词

640.jpg

真是让人惊喜,只有三处适宜的代码,而且其实就在两个类里,先看一下第一个类

640.png

传入了一个 map 集合,不停 for 循环,按照键和值的方式将内容传进 addQueryParameter 方法中,妙啊,比如map为 {“sign:12345678”},这不就传进去了吗,赶紧右键查找一下用例,只有一处,点进去。

640.jpg

代码越来越乱了,这个时候冷静一下,要避免一叶障目,不要先钻进去研究逻辑,保持怀疑,然后直接看下一个符合条件的类,要知道这儿可是出现多处 .addQueryParameter 方法,也很像添加多个参数的操作。

点进去看一下,有些代码会让你觉得很 demo 很像,比如什么request.url().newBuilder(),除此之外,我们看到了大量类似 oldRequest 的提示,这也只能说明这个地方很可疑,就像第一个检索内容一样,但不足以让我们认定它就是我们要找到拦截器。

640.jpg

从上往下看一下这个类

640.jpg

这儿似乎就是我们需要的那个拦截器类,我们看一下sign的用例,j上右键——查找用例

640.jpg

两处方法点开后,仔细瞅瞅,不管是map的put方法,还是newBuilder的add方法,其实都是往集合里塞东西,里面都是两个参数,迷糊的同学可以看一下前面的demo,参数一是键,也就是参数名,在这儿也就是this.j,也就是”sign“,参数二就是具体的sign值,也就是我们要破解的sign。我们可以发现,两处的sign值都是由a方法生成,a方法的传入是一个map集合(linkedhashmap是map的一种),返回一个String。

640.gif

多半这个a方法就是sign的生成处了,在下一讲中,我们会验证一下是否属实,如果没找错的话,就可以分析这个 sign,进行 sign 的破解。这篇文章就到此为止了。

640.jpg

看我教程的人不多,但读者一直支撑着我继续写这些拙劣的文字和教程,非常非常感谢大家。

在这儿做一下更新的说明,我每一节的内容其实量挺大的,再加上我需要反复琢磨表达和思路,所以更新比较慢,以后会减少单篇的内容,在保证质量的前提下尝试一天一更,谢谢三五读者的支持和厚爱

相关文章
|
27天前
|
算法 Android开发
Android签名算法的原理
Android签名算法的原理
20 0
|
4月前
|
缓存 算法 Java
Linux内核新特性年终大盘点-安卓杀后台现象减少的背后功臣MGLRU算法简介
MGLRU是一种新型内存管理算法,它的出现是为了弥补传统LRU(Least Recently Used)和LFU(Least Frequently Used)算法在缓存替换选择上的不足,LRU和LFU的共同缺点就是在做内存页面替换时,只考虑内存页面在最近一段时间内被访问的次数和最后一次的访问时间,但是一个页面的最近访问次数少或者最近一次的访问时间较早,可能仅仅是因为这个内存页面新近才被创建,属于刚刚完成初始化的年代代页面,它的频繁访问往往会出现在初始化之后的一段时间里,那么这时候就把这种年轻代的页面迁移出去
|
4月前
|
JSON Java 定位技术
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
282 0
|
2月前
|
算法 Android开发
安卓逆向 -- 自吐算法(3DES和AES)
安卓逆向 -- 自吐算法(3DES和AES)
20 1
|
2月前
|
算法 Java Android开发
安卓逆向 -- NDK开发实现MD5算法
安卓逆向 -- NDK开发实现MD5算法
34 0
|
2月前
|
算法 安全 JavaScript
安卓逆向 -- 算法基础(SHA)
安卓逆向 -- 算法基础(SHA)
19 0
|
2月前
|
算法 JavaScript Java
安卓逆向 -- 算法基础(数字签名)
安卓逆向 -- 算法基础(数字签名)
21 1
|
2月前
|
算法 Android开发
安卓逆向 -- 自吐算法(MAC)
安卓逆向 -- 自吐算法(MAC)
22 1
|
2月前
|
移动开发 算法 安全
安卓逆向 -- 算法基础(Base64与HEX)
安卓逆向 -- 算法基础(Base64与HEX)
14 1
|
2月前
|
算法 JavaScript Java
安卓逆向 -- 算法基础(MAC)
安卓逆向 -- 算法基础(MAC)
10 1