一、目标
分析某段子App的通讯协议,实现段子爬虫。
- 某段子App版本 5.5.10
二、分析
上一篇文章我们已经分析出了 某段子App的签名sign计算方法,但是签名之前的数据是二进制的密文,所以我们首先要定位明文的数据。
- 这里介绍一个用frida定位的方式:堆栈定位法,通过打印被hook函数的堆栈来定位调用的函数。
var threadef = Java.use('java.lang.Thread');
var threadinstance = threadef.$new();
function Where(stack){
var at = ""
for(var i = 0; i < stack.length; ++i){
at += stack[i].toString() + "\n"
}
return at
}
// 被hook的函数体中使用
var stack = threadinstance.currentThread().getStackTrace();
console.log("Full call stack:" + Where(stack));
- 运行 python3 run.py hook, 输出结果
Full call stack:dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:1538)
com.izuiyou.network.NetCrypto.sign(Native Method)
com.izuiyou.network.NetCrypto.a(SourceFile:1)
y04.intercept(SourceFile:42)
jp5.a(SourceFile:11)
jp5.a(SourceFile:2)
c40.intercept(SourceFile:8)
jp5.a(SourceFile:11)
可以看到调用签名函数NetCrypto.a的位置是 y04.intercept
- 这次我们使用一个新的反编译工具 JEB 3.19.1 PRO 来反编译某段子App的apk,然后搜索 y04
可以看到在调用 NetCrypto.a 之前入参的byte数组先经过了 NetCrypto.encodeAES 来加密,加密之前的数据类型也是一个byte数组 v1_2,但是仔细从前面的几行代码里找一下,发现 v1_2其实是String变量,现在我们需要把这个String打印出来。
- hook NetCrypto.encodeAES函数来打印入参字符串
ZYNetCrypto.encodeAES.implementation = function(arg1){
console.log("\nNetCrypto.encodeAES\n");
var strIn = Java.use('java.lang.String');
var outStr = strIn.$new(arg1);
console.log(outStr);
var result = this.encodeAES(arg1);
return result;
}
这里有个小技巧,入参是byte数组,如何转换成String呢?
//string 转 byte[]
String str = "Hello";
byte[] srtbyte = str.getBytes();
// byte[] 转 string
String res = new String(srtbyte);
System.out.println(res);
这次协议的明文显示出来了。
NetCrypto.encodeAES
{"h_av":"5.5.10","h_dt":0,"h_os":27,"h_app":"zuiyou","h_model":"Redmi 6A","h_did":"7011dadb0bff95b1","h_nt":1,"h_m":231231186,"h_ch":"xiaomi","h_ts":1602637244846,"token":"TfKcNnqg13_aFV9JwkfuiZtvPrbLuJ1ypraRae1vujr2MHJrhnuhgvnVTXOVyr5V2M3gh","android_id":"8018dadb0bff13b1","h_ids":{"imei2":"869839142239784","meid":"99002284061989","imei1":"868939032239776","imei":"99002284063389"},"h_os_type":"miui"}
三、总结
某段子App的通讯协议流程是, 请求参数→AES加密→密文做sign签名,下一篇文章我们就来实现这个爬虫。
关注微信公众号,最新技术干货实时推送