frida复杂类型参数打印、参数转换、调用栈打印

Frida是一款基于Python + JavaScript的Hook与调试框架。从Java层到Native层的Hook无所不能。我们分析app的参数加密的时候,经常使用他来帮助分析我们分析调试。

在hook我们的关键函数的时候,我们经常会把参数打和函数调用栈印出来,方便我们分析app的加密行为。

下面是总结的一些常用的方法:

参数打印问题

当参数是不是string类型的时候(HashMap、Map等),那我们打印出来查看的时候很可能显示[object Object]

下面的一些方法可以帮助我们把他们转成string来打印。

  1. HashMap和Map类型
var Map = Java.use('java.util.HashMap');
var args_x = Java.cast(x, Map);
send(args_x.toString());
  1. byte[]类型
var arr = Java.use("java.util.Arrays");
var JavaString =Java.use("java.lang.String");
send("参数对应数组:" + arr.toString(x))
send("参数对应字符串:" + JavaString.$new(x))

打印函数调用栈

我们hook一些关键函数的时候,有时候很想看一下这个函数的调用栈,我们有两种方法可以打印函数调用栈:

第一种方法:

var jAndroidLog = Java.use("android.util.Log");
var jException = Java.use("java.lang.Exception");    


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函数里调用上面定义的方法

var stack = threadinstance.currentThread().getStackTrace();
send("Full call stack:" + Where(stack));  

第二种方式:

直接在hook函数里send:

send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));

手动构造参数时候常用的方法

我们hook app的时候,可以通过注入参数,来修改app的行为,下面是一些非常有用的方法帮助我们来注入参数:

  1. string转byte[]
function stringToBytes(str) {  
        var ch, st, re = []; 
        for (var i = 0; i < str.length; i++ ) { 
            ch = str.charCodeAt(i);  
            st = [];                 
           do {  
                st.push( ch & 0xFF );  
                ch = ch >> 8;          
            }    
            while ( ch );  
            re = re.concat( st.reverse() ); 
        }  
        return re;  
    } 
  1. 获得context

有时候参数可能是context,那我们可以通过下面的方式获得context

var currentApplication= Java.use("android.app.ActivityThread").currentApplication();
var context = currentApplication.getApplicationContext();

上面的一些方法是我们在利用app经常会用到的一些方法,希望在逆向分析的时候对大家有所帮助

  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值