一、目标

一、目标

手机里没啥App了,连头条都没装,没办法只能看看足球资讯了。

main
1:main

二、步骤

Jadx下 "sign"

很明显就是这个

public static final String KEY_SIGN = "sign";

继续Jadx KEY_SIGN

一共50多个结果。

不怕,怎么说咱以前的ID 叫 愚公

一个一个翻呗……

Base64

翻起来还是挺累的。我们观察下 sign 字段里面有两个比较明显的特征

  • 字段里大量含有 + / 这两个字符串
  • 字段末尾是 == or =

啥也别说了,搞Base64

// Base64
var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){
    var rc =  this.encodeToString(a,b);
    return rc;
}

很好,逮住了我们要的签名,那就放大招了。

// Base64
var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){
    var rc =  this.encodeToString(a,b);

    if(rc.toString().length < 50){
        console.log(">>> Base64 " + rc);
        var stack = threadinstance.currentThread().getStackTrace();
        console.log("Rc Full call stack:" + Where(stack));
    }

    return rc;
}

通过我们仔细观察(反正我是掰着手指头数了),这个签名字串的长度大概40多。所以我们过滤一下再打印出堆栈信息。

>>> Base64 WTLS2zZdf2xIDqN5FNq4Q70esCTP+FQ0iahVvCC4JK4=

Rc Full call stack:dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:1720)
android.util.Base64.encodeToString(Native Method)
com.donxxiudi.core.http.g.a(HttpSignUtil.java:126)
com.donxxiudi.core.http.g.a(HttpSignUtil.java:83)
com.donxxiudi.core.http.h$9.intercept(HttpTools.java:389)
okhttp3.internal.c.g.a(RealInterceptorChain.java:147)
okhttp3.internal.c.g.proceed(RealInterceptorChain.java:121)
okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:250)
okhttp3.RealCall$AsyncCall.execute(RealCall.java:201)
okhttp3.internal.c.run(NamedRunnable.java:32)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)

木有悬念了,Hook这个 com.donxxiudi.core.http.g.a

var signCls = Java.use("com.donxxiudi.core.http.g");
signCls.a.overload('java.lang.String', 'java.lang.String', 'java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function(a1,a2,a3,a4,a5){
        var rc = this.a(a1,a2,a3,a4,a5);
        console.log(a1 + "," + a2 + "," + a3 + "," +a4 + "," + a5 );
        console.log(">>> rc= " + rc);
        return rc;
}

结果很清晰了

/v3/useract/app/search/getIndex,@ztxbDpXvtfDYLOXaEO2cV+g6oP34ClXCbes2fElXSWgBB9DupGYfJnxo5ZjxUXZP,donxxiudi.com,donxxiudi.com,1619429693
>>> rc= 5MPoQLRoTuKU8loJ9vBxg75AFoe8JuOUAyW1oergEdI=

三、总结

搜了一下,这都是第三篇靠Base64定位的教程了,看来Base64还是深受广大码农的喜爱呀。

ffshow
1:ffshow

幸福好像冰激凌,最好不要拿出去晒;否则水不是水,奶不是奶,糖不是糖……

100

关注微信公众号,最新技术干货实时推送

100