天天看點

Frida列印調用棧

package com.github.androiddemo.Activity;

import android.content.Intent;

public class FridaActivity10 extends BaseFridaActivity {
    @Override // com.github.androiddemo.Activity.BaseFridaActivity
    public String getNextCheckTitle() {
        return "目前第10關";
    }

    @Override // com.github.androiddemo.Activity.BaseFridaActivity
    public void onCheck() {
        if (new Exception().getStackTrace()[1].getMethodName().equals("FridaClick")) {
            CheckSuccess();
            startActivity(new Intent(this, FridaActivity10.class));
            finishActivity(0);
            return;
        }
        super.CheckFailed();
    }
}      
function printStackTrace() {
    Java.perform(function() {
        var Exception = Java.use("java.lang.Exception");
        var exception = Exception.$new();
        var stackTrace = exception.getStackTrace().toString();
        console.log("==========================\r\n" + stackTrace.replaceAll(",", "\r\n") 
            + "\r\n==========================");
        exception.$dispose();
    });
}


function hook_FridaActivity10() {
    Java.perform(function() {
       
        var FridaActivity10 = Java.use("com.github.androiddemo.Activity.FridaActivity10");
        FridaActivity10.onCheck.implementation = function() {
            // printStackTrace();
            this.onCheck();
            console.log("FridaActivity10.onCheck");
        }
        var Exception = Java.use("java.lang.Exception");
        var StackTraceElement = Java.use("java.lang.StackTraceElement");
        console.log(StackTraceElement)
        StackTraceElement.getMethodName.implementation = function() {
            var result = this.getMethodName();
            console.log("StackTraceElement.getMethodName:", result);
            return result;
        }
        Exception.getStackTrace.implementation = function() {
            console.log("Exception.getStackTrace:");

            var stackTrace = this.getStackTrace();
            var element = StackTraceElement.$new("frida", "FridaClick", "frida", 1);
            console.log(element);
            stackTrace[1] = element;
            console.log(stackTrace);
            return stackTrace;
        }
    });
}