美文网首页
某生活服务App返回数据密文解析(一) Android Devi

某生活服务App返回数据密文解析(一) Android Devi

作者: fenfei331 | 来源:发表于2020-12-03 15:52 被阅读0次

    一、目标

    我们来分析某生活服务App的返回数据加密问题,先打开首页的一篇文章,抓包结果:

    main

    getfeedcontent.bin 这个接口就是我们要的数据,不过很明显,加密的比较彻底,全部都是密文。

    二、步骤

    返回数据加密和sign定位不一样,没有很明显的sign字符串可以去查,只能从http请求入手

    hook okhttp3.OkHttpClient

    var OkHttpClient = Java.use("okhttp3.OkHttpClient");
    
    OkHttpClient.newCall.implementation = function (request) {
        var result = this.newCall(request);
        console.log(request.toString());
    
        var stack = threadinstance.currentThread().getStackTrace();
        console.log("http >>> Full call stack:" + Where(stack));
    
        return result;
    };
    

    跑一下,没有 getfeedcontent.bin 相关的数据。

    hook openConnection 试试

    var URL = Java.use('java.net.URL');
    URL.openConnection.overload().implementation = function() {
        var retval = this.openConnection();
    
        console.log('URL openConnection' + retval);
        var stack = threadinstance.currentThread().getStackTrace();
        console.log(">>> openConnection Full call stack:" + Where(stack));
    
        return retval;
    };
    

    这次运气不错,找到了 getfeedcontent.bin 的请求,不过堆栈却没有什么参考价值。

    堆栈唯一告诉我们的也就是App在网络访问这块用了RxJava,我们会看到一堆onNext和onComplete

    怎么办?正在一筹莫展之际,突然想起 Android Device Monitor

    Note:

    Android Device Monitor是android自带工具,在\sdk\tools\monitor,可以查看特定行程中正在运行的线程以及堆栈信息。

    Android Device Monitor

    adm
    • 首先选中要查看的进程,然后点击红框处的按钮 " start method profiling ", 现在就进入到跟踪状态了
    • 在App中打开一篇文章,等文章完全加载完毕之后,再点击刚才红框处的按钮,这时的功能是 " Stop Method Profiling ",点击之后停止Method Profiling。稍等片刻,会自动弹出TraceView窗口。
    • TraceView窗口Name一栏中显示的方法调用就是需要关注的地方,每一个方法调用都有一个数字编号,不同的方法调用采用不同的颜色区分,点击方法调用左边的加号展开任意一个方法调用都会看到其下有Parents和Children两个子项,Parents表示该方法被哪个方法调用,Children表示该方法调用了哪些方法。所有的方法调用都以链表的形式依次显示,从上往下查看调用情况。

    接收数据并解密的函数一定在这次抓到的堆栈里面,我们搜索一下 onRequestFinish,一共搜到了3处,(在搜索框直接回车可以切换高亮这搜到的三处)。

    比较有嫌疑的是 onRequestFinish 之后调用了 resolveDate ,并且返回值还是个 String 。 Hook它看一眼。

    var MapiModuleCls =  Java.use('com.xxxx.picasso.commonbridge.MapiModule');
    MapiModuleCls.resolveData.overload('com.xxxx.archive.DPObject', 'boolean', 'int').implementation = function(a,b,c){
        var result = this.resolveData(a,b,c);
        console.log("resolveData rc=" + result);
        return result;
    }
    

    跑一下结果出来了,收工。

    rc

    三、总结

    善用sdk自带的工具,往往事半功倍。

    有问题可以加我wx: fenfei331

    相关文章

      网友评论

          本文标题:某生活服务App返回数据密文解析(一) Android Devi

          本文链接:https://www.haomeiwen.com/subject/dswmwktx.html