frida工具代码

安卓/手游逆向交流群:963612891

1。字符串比较。通常用于密码比较时会用到,直接输出比较的字符串
Java.perform(function x() {

const str = Java.use('java.lang.String');
const objectClass = 'java.lang.Object';

str.equals.overload(objectClass).implementation = function(obj) {
    //打印传入的参数
    var response = str.equals.overload(objectClass).call(this, obj);
    console.log(str.toString.call(this) + ' == ' + obj.toString() + ' ? ' + response);

    //return出去
    return response;
}

});

  1. 加密算法中,明文调用getBytes方法转换为字节数组,Hook并打印堆栈可以快速定位

Java.perform(function x() {

const str = Java.use('java.lang.String');


str.getBytes.overload().implementation = function() {


    var response = this["getBytes"]();
    console.log(this.toString());
  
    return response;
}

});
3.Android中使用StringBuffer,
StringBuilder这两个类操作字符串,Hook其toString方法并打印堆栈,在很多情况下可以定位到加密字段的生成堆栈Java.perform(function x() {
const stringbuilder = Java.use(“java.lang.StringBuilder”);
const stringbuffer = Java.use(“java.lang.StringBuffer”);

const toString = "toString";


// 使用log类和Exception类产生堆栈
var jAndroidLog = Java.use("android.util.Log");
var jException = Java.use("java.lang.Exception");


stringbuilder[toString].implementation = function(){
    //执行原逻辑
    const result = this[toString]();
    // 打印返回的字符串内容
    console.log(result);


    // 只有长度大于30时,才打印堆栈
    if (result.length > 30) {
        // 抛出异常。打印堆栈
        console.log(jAndroidLog.getStackTraceString(jException.$new()));
    }


    return result;
};


stringbuffer[toString].implementation = function() {
    //执行原逻辑
    const result = this[toString]();
    // 打印返回的字符串内容
    console.log(result);
    // 只有长度大于30时,才打印堆栈
    if (result.length > 30) {
        // 抛出异常。打印堆栈
        console.log(jAndroidLog.getStackTraceString(jException.$new()));
    }
    return result;
}

});

4.在hook的方法中输出该方法的调用层级关系

var file = Java.use(“java.io.File”);
//判断文件是否存在
file.exists.implementation = function(){
//判断的路径
console.log(“path value:”+this.path[‘value’]);
//输出调用堆栈
console.log(Java.use(“android.util.Log”).getStackTraceString(Java.use(“java.lang.Exception”).$new()));
return this.exists();
}

猜你喜欢

转载自blog.csdn.net/YJJYXM/article/details/105564619