代码例子
原函数:
hook函数:
if(Java.available){
Java.perform(function(){
var a = Java.use("com.sankuai.waimai.foundation.utils.security.a");
a.a.overload("java.lang.String","java.lang.String","long","int").implementation=function(str1,str2,long1,int1){
var result = this.a(str1,str2,long1,int1);
send("string1:" + str1 + ",string2:" + str2 + ",long1:" + long1 +",int1:" + int1 + ",result: " + result);
return result;
}
});
}
js代码解释:
Java.use:返回类实例。
s.a.overload: 重载a方法。当然,如果确定目标函数没有重载,可以去掉".overload(param)",如果不确定,为了保险起见,可以无脑使用此参数。
this.a:调用原来的a函数。
Java.available:这个字段标记Java虚拟机( Dalvik 或者 ART)是否已加载, 操作Java任何东西之前,要确认这个值是否为true。
Java.perform(fn):在Javascript代码成功被附加到目标进程时调用。
hook执行后输出:
变量类型:
基本类型 | 缩写 |
---|---|
int | I |
long | J |
booleab | Z |
byte | B |
char | C |
float | F |
double | D |
short | S |
String | java.lang.String |
需要注意的是:
使用数组时才会使用缩写,如上例中的变量类型。
使用步骤
列出android手机上的进程:
ps -A
或者:
frida-ps -U
启动frida-server:
./frida-server-x86-64
注入代码:
frida -U -f com.sankuai.meituan.takeoutnew -l d:\adbtest\mt_mtgsig.js -no-pause
按爪ctrl + c后,输入exit推出frida:
参考链接