zoukankan      html  css  js  c++  java
  • frida常见算法hook

     function showStacks() {
            Java.perform(function () {
                send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
            });
        }
        
    function bytesToHex(arr)
    {
        var str = "";
        for(var i=0; i<arr.length; i++)
        {
           var tmp = arr[i];
           if (tmp < 0) {
           tmp =(255+tmp+1).toString(16);
           } else {
                tmp = tmp.toString(16);
           }
           if(tmp.length == 1) 
           {
               tmp = "0" + tmp; 
           }
           str += tmp;
        }
        return str;
    }
    
    function bytesToBase64(arr)
    {
        var str = "";
        for(var i=0; i<arr.length; i++)
        {
           var tmp = arr[i];
           if (tmp < 0) {
           tmp =(255+tmp+1).toString(16);
           } else {
                tmp = tmp.toString(16);
           }
           if(tmp.length == 1) 
           {
               tmp = "0" + tmp; 
           }
           str += tmp;
        }
        return str;
    }
    
    function bytesToString(arr)
    {
        var str = "";
        for(var i=0; i<arr.length; i++)
        {
           var tmp = arr[i];
           if (tmp < 0) {
           tmp =(255+tmp+1).toString(16);
           } else {
                tmp = tmp.toString(16);
           }
           if(tmp.length == 1) 
           {
               tmp = "0" + tmp; 
           }
           str += tmp;
        }
        return str;
    }
    
    Java.perform(function () {
        var secretKeySpec = Java.use('javax.crypto.spec.SecretKeySpec');
        secretKeySpec.$init.overload('[B','java.lang.String').implementation = function (a,b) {
            showStacks();
            var result = this.$init(a, b);
            send("======================================");
            send("算法名:" + b + "|Dec密钥:" + bytesToString(a));
            send("算法名:" + b + "|Hex密钥:" + bytesToHex(a));
            return result;
        }
        var mac = Java.use('javax.crypto.Mac');
        mac.getInstance.overload('java.lang.String').implementation = function (a) {
            showStacks();
            var result = this.getInstance(a);
            send("======================================");
            send("算法名:" + a);
            return result;
        }
        mac.update.overload('[B').implementation = function (a) {
            showStacks();
            this.update(a);
            send("======================================");
            send("update:" + bytesToString(a))
        }
        mac.update.overload('[B','int','int').implementation = function (a,b,c) {
            showStacks();
            this.update(a,b,c)
            send("======================================");
            send("update:" + bytesToString(a) + "|" + b + "|" + c);
        }
        mac.doFinal.overload().implementation = function () {
            showStacks();
            var result = this.doFinal();
            send("======================================");
            send("doFinal结果:" + bytesToHex(result));
            send("doFinal结果:" + bytesToBase64(result));
            return result;
        }
        mac.doFinal.overload('[B').implementation = function (a) {
            showStacks();
            var result = this.doFinal(a);
            send("======================================");
            send("doFinal参数:" + bytesToString(a));
            send("doFinal结果:" + bytesToHex(result));
            send("doFinal结果:" + bytesToBase64(result));
            return result;
        }
            var md = Java.use('java.security.MessageDigest');
        md.getInstance.overload('java.lang.String','java.lang.String').implementation = function (a,b) {
            showStacks();
            send("======================================");
            send("算法名:" + a);
            return this.getInstance(a, b);
        }
        md.getInstance.overload('java.lang.String').implementation = function (a) {
            showStacks();
            send("======================================");
            send("算法名:" + a);
            return this.getInstance(a);
        }
        md.update.overload('[B').implementation = function (a) {
            showStacks();
            send("======================================");
            send("update:" + bytesToString(a))
            return this.update(a);
        }
        md.update.overload('[B','int','int').implementation = function (a,b,c) {
            showStacks();
            send("======================================");
            send("update:" + bytesToString(a) + "|" + b + "|" + c);
            return this.update(a,b,c);
        }
        md.digest.overload().implementation = function () {
            showStacks();
            send("======================================");
            var result = this.digest();
            send("digest结果:" + bytesToHex(result));
            send("digest结果:" + bytesToBase64(result));
            return result;
        }
        md.digest.overload('[B').implementation = function (a) {
            showStacks();
            send("======================================");
            send("digest参数:" + bytesToString(a));
            var result = this.digest(a);
            send("digest结果:" + bytesToHex(result));
            send("digest结果:" + bytesToBase64(result));
            return result;
        }
            var ivParameterSpec = Java.use('javax.crypto.spec.IvParameterSpec');
        ivParameterSpec.$init.overload('[B').implementation = function (a) {
            showStacks();
            var result = this.$init(a);
            send("======================================");
            send("iv向量:" + bytesToString(a));
            send("iv向量:" + bytesToHex(a));
            return result;
        }
        var cipher = Java.use('javax.crypto.Cipher');
        cipher.getInstance.overload('java.lang.String').implementation = function (a) {
            showStacks();
            var result = this.getInstance(a);
            send("======================================");
            send("模式填充:" + a);
            return result;
        }
        cipher.update.overload('[B').implementation = function (a) {
            showStacks();
            var result = this.update(a);
            send("======================================");
            send("update:" + bytesToString(a));
            return result;
        }
        cipher.update.overload('[B','int','int').implementation = function (a,b,c) {
            showStacks();
            var result = this.update(a,b,c);
            send("======================================");
            send("update:" + bytesToString(a) + "|" + b + "|" + c);
            return result;
        }
        cipher.doFinal.overload().implementation = function () {
            showStacks();
            var result = this.doFinal();
            send("======================================");
            send("doFinal结果:" + bytesToHex(result));
            send("doFinal结果:" + bytesToBase64(result));
            return result;
        }
        cipher.doFinal.overload('[B').implementation = function (a) {
            showStacks();
            var result = this.doFinal(a);
            send("======================================");
            send("doFinal参数:" + bytesToString(a));
            send("doFinal结果:" + bytesToHex(result));
            send("doFinal结果:" + bytesToBase64(result));
            return result;
        }
        var x509EncodedKeySpec = Java.use('java.security.spec.X509EncodedKeySpec');
        x509EncodedKeySpec.$init.overload('[B').implementation = function (a) {
            showStacks();
            var result = this.$init(a);
            send("======================================");
            send("RSA密钥:" + bytesToBase64(a));
            return result;
        }
        var rSAPublicKeySpec = Java.use('java.security.spec.RSAPublicKeySpec');
        rSAPublicKeySpec.$init.overload('java.math.BigInteger','java.math.BigInteger').implementation = function (a,b) {
            showStacks();
            var result = this.$init(a,b);
            send("======================================");
            //send("RSA密钥:" + bytesToBase64(a));
            send("RSA密钥N:" + a.toString(16));
            send("RSA密钥E:" + b.toString(16));
            return result;
        }
    });
    
  • 相关阅读:
    第五次作业——词法分析程序的设计与实现
    第四次作业——文法和语言总结与梳理
    第三次作业-语法树,短语,直接短语,句柄
    消除左递归
    DFA最小化
    非确定的自动机NFA确定化为DFA
    正规式到正规文法与自动机
    正规文法与正规式
    词法分析程序的设计与实现
    第四次作业-文法和语言总结与梳理
  • 原文地址:https://www.cnblogs.com/c-x-a/p/15459723.html
Copyright © 2011-2022 走看看