美文网首页
FridaHook笔记

FridaHook笔记

作者: 八月欢喜 | 来源:发表于2022-03-15 10:30 被阅读0次

    前言

    个人学习笔记

    置顶

    hook加密

    Java.perform(function() {
        //Base64
        var base64=Java.use('android.util.Base64');
        var string=Java.use('java.lang.String');
        /*base64.encode.overload('[B', 'int', 'int', 'int').implementation = function(){
            send("=================base64 encode====================");
            send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            send(arguments[0]);
            send(arguments[1]);
            send(arguments[2]);
            send(arguments[3]);
            var data=this.encode(arguments[0],arguments[1],arguments[2],arguments[3])
            send("base64:"+string.$new(data));
            return data;
        }*/
        
        /*base64.decode.overload('[B', 'int', 'int', 'int').implementation = function(){
            send("=================base64 decode====================");
            send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            send(arguments[0]);
            send(arguments[1]);
            send(arguments[2]);
            send(arguments[3]);
            var data=this.decode(arguments[0],arguments[1],arguments[2],arguments[3])
            send("base64:"+string.$new(data));
            return data;
        }*/
       
    
        // MD SHA 
        var messageDigest=Java.use('java.security.MessageDigest');
        // update
        for(var i = 0; i < messageDigest.update.overloads.length; i++){
            messageDigest.update.overloads[i].implementation = function(){
                var name=this.getAlgorithm()
                send("================="+name+"====================");
                send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
                if(arguments.length == 1){
                    send(arguments[0]);
                    this.update(arguments[0]);
                }else if(arguments.length == 3){
                    send(arguments[0]);
                    send(arguments[1]);
                    send(arguments[2]);
                    this.update(arguments[0],arguments[1],arguments[2]);
                }
            }
        }
        // digest
        for(var i = 0; i < messageDigest.digest.overloads.length; i++){
            messageDigest.digest.overloads[i].implementation = function(){
                var name=this.getAlgorithm()
                send("================="+name+"====================");
                send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
                if(arguments.length == 0){
                    var data=this.digest();
                    send(data);
                    return data;
                }else if(arguments.length == 1){
                    send(arguments[0]);
                    var data=this.digest(arguments[0]);
                    send(data);
                    return data;
                }else if(arguments.length == 3){
                    send(arguments[0]);
                    send(arguments[1]);
                    send(arguments[2]);
                    var data=this.digest(arguments[0],arguments[1],arguments[2]);
                    send(data);
                    return data;
                }
            }
        }
    
        //MAC
        var mac=Java.use('javax.crypto.Mac');
        for(var i = 0; i < mac.doFinal.overloads.length; i++){
            mac.doFinal.overloads[i].implementation = function(){
                var name=this.getAlgorithm()
                send("================="+name+"====================");
                send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
                if(arguments.length == 0){
                    var data=this.doFinal();
                    send(data);
                    return data;
                }else if(arguments.length == 1){
                    send(arguments[0]);
                    var data=this.doFinal(arguments[0]);
                    send(data);
                    return data;
                }else if(arguments.length == 2){
                    send(arguments[0]);
                    send(arguments[1]);
                    var data=this.doFinal(arguments[0],arguments[1]);
                    send(data);
                    return data;
                }
            }
        }
        
        // DES DESede AES PBE RSA
        var cipher=Java.use('javax.crypto.Cipher');
         for(var i = 0; i < cipher.doFinal.overloads.length; i++){
            cipher.doFinal.overloads[i].implementation = function(){
                var name=this.getAlgorithm()
                send("================="+name+"====================");
                send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
                if(arguments.length == 0){
                    var data=this.doFinal();
                    send(data);
                    return data;
                }else if(arguments.length == 1){
                    send(arguments[0]);
                    var data=this.doFinal(arguments[0]);
                    send(data);
                    return data;
                }else if(arguments.length == 2){
                    send(arguments[0]);
                    send(arguments[1]);
                    var data=this.doFinal(arguments[0],arguments[1]);
                    send(data);
                    return data;
                }else if(arguments.length == 3){
                    send(arguments[0]);
                    send(arguments[1]);
                    send(arguments[2]);
                    var data=this.doFinal(arguments[0],arguments[1],arguments[2]);
                    send(data);
                    return data;
                }else if(arguments.length == 5){
                    send(arguments[0]);
                    send(arguments[1]);
                    send(arguments[2]);
                    send(arguments[3]);
                    send(arguments[4]);
                    var data=this.doFinal(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]);
                    send(data);
                    return data;
                }else{
                    send(arguments[0]);
                    send(arguments[1]);
                    send(arguments[2]);
                    send(arguments[3]);
                    var data=this.doFinal(arguments[0],arguments[1],arguments[2],arguments[3]);
                    send(data);
                    return data;
                }
            }
        }
        
        //KEY
        var secretKey=Java.use('javax.crypto.spec.SecretKeySpec');
        for(var i = 0; i < secretKey.$init.overloads.length; i++){
            secretKey.$init.overloads[i].implementation = function(){
                var name=this.getAlgorithm()
                send("=================KEY====================");
                //send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
                if(arguments.length == 2){
                    send(arguments[0]);
                    send(arguments[1]);
                    this.$init(arguments[0],arguments[1]);
                }else if(arguments.length == 4){
                    send(arguments[0]);
                    send(arguments[1]);
                    send(arguments[2]);
                    send(arguments[3]);
                    this.$init(arguments[0],arguments[1],arguments[2],arguments[3]);
                }
            }
        }
        //IV
        //DES KEY  
        //DESede KEY
        //PBE KEY salt
    });
    

    hook js 笔记

    // 将列表以字符串输出
    var ArrayList = Java.use('java.util.ArrayList');
    var string = Java.cast(a, ArrayList);
     console.log(string);
    

    一、解决淘系抓不到包的问题

    使用Charles、Fiddle等抓包工具对淘系App进行抓包时,你会发现总是抓不到包,出现请求不走Charles代理的情况。这是因为淘系app底层网络通信的协议并不是普通的http协议,而是自己实现的一套私有协议Spdy。

    image.png

    hook代码:

    Java.perform(function () {
        var SwitchConfig = Java.use('mtopsdk.mtop.global.SwitchConfig');
        SwitchConfig.nQ.overload().implementation = function () {
            return false;
        }
    });
    

    不同版本对应的hook类名可能不一致,因为有混淆的原因,具体看图

    相关文章

      网友评论

          本文标题:FridaHook笔记

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