这几天在用frida分析apk,遇到了一个问题就是,需要打印堆栈信息,然后来查看内部的方法的调用。在网上找了很久,由于新手的原因,不得入门,最终找了了一个可以打印日志的,经过测试发现可以打印出堆栈信息。
以下是打印日志的具体代码
import frida, sys,os
jscode = """
Java.perform(function () {
//要hook的类名完整路径
var HttpRequestEntity = Java.use('com.tencent.mm.ui.contact');
var threadef = Java.use('java.lang.Thread');
var threadinstance = threadef.$new();
function Where(stack){
for(var i = 0; i < stack.length; ++i){
send(stack[i].toString());
}
}
// 重写要hook的方法,如果是重载的话,overload中是类的全路径(大概~~),function括号为函数的参数个数
HttpRequestEntity.b.overload("com.tencent.mm.ui.contact.SelectContactUI","java.util.List").implementation = function (str,list) {
//调用原始的函数实现并且获得返回值
var ret = this.b(str,list);
//打印日志信息
var stack = threadinstance.currentThread().getStackTrace();
send("Full call stack:" + Where(stack));