代码例子
原函数:
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;}var pp = Java.use("com.meituan.robust.PatchProxy");pp.isSupport.overload("[Ljava.lang.Object;","java.lang.Object","com.meituan.robust.ChangeQuickRedirect","int").implementation=function(objs1,obj1,cr,int1){var result = this.isSupport(objs1,obj1,cr,int1); if(result ){send("PatchProxy result: " + result);}return result;}});
}
还有一种方式:
function jsfunc(){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;}var pp = Java.use("com.meituan.robust.PatchProxy");pp.isSupport.overload("[Ljava.lang.Object;","java.lang.Object","com.meituan.robust.ChangeQuickRedirect","int").implementation=function(objs1,obj1,cr,int1){var result = this.isSupport(objs1,obj1,cr,int1); if(result ){send("PatchProxy result: " + result);}return result;}});}
}
setImmediate(jsfunc);
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 |
Object | java.lang.Object |
需要注意的是:
使用数组时才会使用缩写。如果数组类型是java.lang.String 或者java.lang.Object,需要在前面加"L",后面加";"
比如上例中的"[Ljava.lang.Object;"
使用步骤
列出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:
参考链接
- https://www.cnblogs.com/luoyesiqiu/p/10718997.html
- https://blog.csdn.net/freeking101/article/details/112634649