Java.perform(function x() {
var File = Java.use('java.io.File')
//构造函数
let initMethodName = '$init';
//获取该类的所有构造方法(重载)
let overloadedMethods = File[initMethodName].overloads;
/*
* 查 JDK 代码可知 File 有以下构造方法:
* 1、File(String pathname, int prefixLength)
* 2、File(String child, File parent)
* 3、File(String pathname)
* 4、File(String parent, String child)
* 5、File(File parent, String child)
* 6、File(URI uri)
*
* 输出 constructionMethod 如下(构造函数方法签名):
* 1、function File(java.io.File, java.lang.String): void
* 2、function File(java.lang.String): void
* 3、function File(java.lang.String, int): void
* 4、function File(java.lang.String, java.io.File): void
* 5、function File(java.lang.String, java.lang.String): void
* 6、function File(java.net.URI): void
*
*/
for (const constructionMethod of overloadedMethods) {
// console.log('constructionMethod name = ' + constructionMethod)
// hook 每一个构造方法
constructionMethod.implementation = function() {
let result = this[initMethodName].apply(this, arguments);
let arg0 = arguments[0];
//本次我们只处理第一个参数是 string 类型的构造函数
if (typeof arg0 === 'string' && arg0 !== undefined) {
if (arg0.startsWith(
'/storage/emulated/0/Android/data/com.ss.aaaaa.mi/')) {
console.log('File.mkdirs path = ' + arg0)
//输出调用堆栈
console.log(
Java.use('android.util.Log')
.getStackTraceString(Java.use('java.lang.Throwable').$new()));
}
}
return result;
}
}
})
Frida hook 某个类的所有构造函数(例子)
最新推荐文章于 2025-05-18 01:32:45 发布