var btn_login_id = Java.use("com.dudunew.online.R$id").btn_login.value; console.log("btn_login_id:",btn_login_id); var appCompatActivity = Java.use("android.support.v7.app.AppCompatActivity"); appCompatActivity.findViewById.implementation = function (a) { if (a == btn_login_id){ showStack(); console.log("appCompatActivity.findViewById:" + a); } returnthis.findViewById(a); }
var stringBuilder = Java.use("java.lang.StringBuilder"); stringBuilder.toString.implementation = function () { var result = this.toString.apply(this, arguments); if(result == "username=11111"){ showStacks(); console.log("stringBuilder.toString is called!", result); } return result; }
Hook接口的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14
var classes = Java.enumerateLoadedClassesSync(); for (const index in classes) { let className = classes[index]; if(className.indexOf("com.xxx") === -1) continue; let clazz = Java.use(className); // 获取当前对象的接口 let resultArr = clazz.class.getInterfaces(); if(resultArr.length === 0) continue; for (let i = 0; i < resultArr.length; i++) { if(resultArr[i].toString().indexOf("com.xxx.app.TestRegisterClass") !== -1){ console.log(className, resultArr); } } }
Hook抽象类的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var classes = Java.enumerateLoadedClassesSync(); for (const index in classes) { // 获取所有类名 let className = classes[index]; // 最好过滤一下类名,是app包名前缀的才往后执行,不然类太多了 if(className.indexOf("com.xxx") === -1) continue; // 获取类的对象 let clazz = Java.use(className); // 获取父类,抽象类是单继承的额,直接getSuperclass就行 let resultClass = clazz.class.getSuperclass(); if(resultClass == null) continue; if(resultClass.toString().indexOf("com.xxx.app.TestAbstract") !== -1){ console.log(className, resultClass); } }