Frida打印类中的所有变量

时间:2018-09-18 10:05:11

标签: android reversing frida

嗨 我的教授问您如何在一个班级中打印变量的内容 他为我们提供了一个可以通过frida启动和分析的apk:

price

我读到frida可以钩住一个类,但我不知道如何打印printthis的值。

1 个答案:

答案 0 :(得分:0)

我将假设CallStateReadycom.test_uni_apk.lib.proftest.ProfApi的内部类,并且您想挂接c'tor并打印第二个参数#PleaseSubmitElegantCode

function printParamArrayOfCallConnection() {
    var ArrayList = Java.use("java.util.ArrayList");
    var CallConnection = Java.use("com.test_uni_apk.lib.proftest.ProfApi$CallConnection");
    Java.use("com.test_uni_apk.lib.proftest.ProfApi$CallStateReady") // dollar sign for inner class
        .$init // init represent the constructor
        // list of arguments are passed in byte code style, [B represents byte array
        // when you try to hook Frida will provide an informative error with all the possible arguments for overloading
        // copy & paste the right one which will look like this:
        .overload("Lcom..ProfApi.CallProc;", "Lcom...ProfApi.CallConnection;", "java.lang.String", "[B", "Ljava.lang.String;")
        .implementation = function(paramCallProc, paramArrayOfCallConnection, paramString, paramArrayOfByte, paramArrayOfString) {
            // first we cast to list
            var list = Java.cast(paramArrayOfCallConnection, ArrayList);
            // iterating the list
            for (var i = 0, l = list.size(); i < l; i++) {
                // casting each element to the object we created earlier
                var currentElement = Java.cast(list.get(i), CallConnection);
                // printing to terminal
                console.log(i, currentElement);
            }
            // executing original c'tor 
            this.$init(paramCallProc, paramArrayOfCallConnection, paramString, paramArrayOfByte, paramArrayOfString);
        }
}
Java.perform(printParamArrayOfCallConnection);