🛫 系列文章导航
▒ 目录 ▒
🛫 导读
开发环境
| 版本号 | 描述 |
---|
文章日期 | 2024-03-24 | |
操作系统 | Win11 - 22H2 | 22621.2715 |
node -v | v20.10.0 | |
npm -v | 10.2.3 | |
夜神模拟器 | 7.0.5.8 | |
Android | 9 | |
python | 3.9.9 | |
frida | 16.2.1 | |
frida-tools | 12.3.0 | |
objection | 1.11.0 | |
| | |
1️⃣ Android App 代码介绍
中文内部类和方法
重载函数
public class MainActivity extends AppCompatActivity {
void fun(int x , int y ){
Log.d("yemao.sum" , String.valueOf(x+y));
}
String fun(String x){
return x.toLowerCase();
}
}
成员变量及静态函数
public class MainActivity extends AppCompatActivity {
private String total = "hello";
void secret(){
total += " secretFunc";
Log.d("yemao.secret" , "this is secret func");
}
static void staticSecret(){
Log.d("yemao.secret" , "this is static secret func");
}
}
2️⃣ 普通函数HOOK
Java.perform
function main() {
普通函数()
重载函数()
构造函数()
函数主动调用()
}
Java.perform(main)
操作步骤
function 普通函数() {
var cls = Java.use('com.yemao.demo.MainActivity$非重载测试类')
console.log("Java.Use.Successfully!")
cls['中文方法'].implementation = function(x: number, y: number) {
console.log("[普通函数] x => ",x,", y => ",y)
var ret_value = this['中文方法'](x, y);
return ret_value
}
}
3️⃣ 重载函数HOOK
function 普通函数() {
var MainAcitivity = Java.use('com.yemao.demo.MainActivity')
console.log("Java.Use.Successfully!")
MainAcitivity.fun.overload('int', 'int').implementation = function(x: number, y: number) {
console.log("[重载函数] x => ",x,", y => ",y)
var ret_value = this.fun(x, y);
return ret_value
}
}
4️⃣ 构造函数HOOK
function 普通函数() {
var cls = Java.use('com.yemao.demo.MainActivity$非重载测试类')
console.log("Java.Use.Successfully!")
cls.$init.implementation = function(mainAcitivity) {
console.log("[构造函数] ===")
var ret_value = this.$init(mainAcitivity);
return ret_value
}
}
5️⃣ 函数主动调用
function 函数主动调用() {
var MainAcitivity = Java.use('com.yemao.demo.MainActivity')
console.log("Java.Use.Successfully! 函数主动调用")
MainAcitivity.staticSecret();
Java.choose('com.yemao.demo.MainActivity',{
onMatch: function(instance){
console.log('instance found',instance)
instance.secret()
},
onComplete: function(){
console.log('search Complete')
}
})
}
🛬 文章小结
frida api释义
函数名 | 参数 | 返回值 | 含义 |
---|
Java.perform | 函数 | | 任何对App中Java层的操作都必须包裹在这个函数 |
中,否则Frida运行起来后就会报错 | | | |
Java.use | className | JavaScript wrapper | 动态获取类实例对象 |
MainAcitivity.fun.implementation | | | 函数实现 |
MainAcitivity.fun.overload | 参数数组 | | 重载函数中,区分不同的函数 |
Java.choose | className, callbacks | | 枚举className的实例对象,调用callbacks处理回调逻辑 |
📖 参考资料