• frida 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
    });
  • 相关阅读:
    Pig设计模式概要以及与SQL的设计模式的对比
    Pig设计模式概要以及与SQL的设计模式的对比
    ArcGIS API for Silverlight 学习笔记
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/tjp40922/p/15647593.html
Copyright © 2020-2023  润新知