最近有个朋友需要一些某直播间关于猫砂的一些数据,于是就有了这篇文章 ~
1.小黄鸡三连击(抓包)
通过抓包分析先锁定 x-sign 和 x-mini-wua两个参数。
2.使用 Jadx 进行源码分析
首先搜索 x-sign 这个参数,通过搜索查看最后确定第二个搜索结果是我们想要的。
点进去,可以看到 x-sign 是从一个 Map 对象中获取的,继续看这个 Map 对象,他的生成式通过 iSign.getUnifiedSign(hashMap, hashMap2, str2, str3, z2) 这个方法生成。
此时直接在 getUnifiedSign 方法上鼠标右键跳到声明
,这个时候有的小伙伴看到跳转后的代码蒙了,这是一个接口,我们要实现主动调用最起码要有个类,这可怎么整?莫慌,此时继续在这个接口类的名字上右键查找应用
,可以看到有多个结果,但是看到有个 AbstractSignImpl 类实现了ISign 这个接口。点击进去之后我们在 AbstractSignImpl 这个类中发现了 getUnifiedSign 方法,但是这个方法默认返回了 null, 此时依旧不用慌,在类名 AbstractSignImpl 继续右键
查看应用
,可以到看到三个结果,第一个就是当前类不用管,第二个结果对应的类中没有 getUnifiedSign 方法,在第三个结果中我们可以看到 InnerSignImpl 类继承了 AbstractSignImpl 类并重写了 getUnifiedSign 方法,可以看到 getUnifiedSign 方法实现的具体逻辑。
3.使用 Frida hook 分析
上面我们已经分析到 InnerSignImpl 这个类,我们现在使用 frida hook 验证我们的分析。
输出打印:
通过 Frida hook 我们确定 InnerSignImpl 类的 getUnifiedSign 就是需要的,至于这个方法的参数类型和具体参数内容上面截图和打印内容已经给出来了,我们现在只需要关心怎么主动调用这个方法就可以了。查看 InnerSignImpl 类发现它并没有构造方法,但是我们在 getUnifiedSign 方法中看到有个字符串内容[getUnifiedSign]sg unified sign is null, please call ISign init()
,英语咱也看不懂,反正猜测就是在调用 getUnifiedSign 方法之前需要先调用 init 这个方法。
看来是绕不过去了,看一下 init 方法有个参数是一个 mtopsdk.mtop.global.MtopConfig 类,这个类有一个构造方法,使用 Frida hook:
输出:
完美,这样的话等于 MtopConfig 和 InnerSignImpl 两个类我们都可以构造出来了。接下来我们直接使用 Frida 简单实现一下试试:
输出:
通过输出内容可以看到我们已经拿到了之前抓包需要的所有参数。
4.使用 Frida 将 AsyncHttpServer 服务注入
直接上代码好了:
注入:
会提示:
requests 通过5555端口请求参数:
开心:
最后说一下,这里只做了搜索接口的演示,其他接口都是一样的操作,如果你生成的参数有问题,多半是那个data的内容转义问题。
更多爬虫/逆向相关内容可以进球讨论.