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;
        }
    });
    
  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/c-x-a/p/15459723.html
Copyright © 2011-2022 走看看