123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- export let HOOK_DY = {
- hookTextViewClick: function () {
- Java.perform(function () {
- var View = Java.use("android.view.View"); // setOnClickListener 定义在 View 类中
- var TextView = Java.use("android.widget.TextView"); // 为了访问 getText 方法
- // 重写 setOnClickListener
- View.setOnClickListener.implementation = function (listener) {
- // 检查 this 是否是 TextView 的实例
- console.log("type of this: " + this.getClass().getName());
- if (this.getClass().getName().includes("TextView")) {
- try { // 安全地转换 this 为 TextView
- var textView = Java.cast(this, TextView);
- let text = textView.getText();
- console.log("id: " + textView.getId(), "\t\t >>> \t\t" + text)
- if (text.toString().includes("***")) {
- // var stack = Java.use("java.lang.Thread").currentThread().getStackTrace();
- // for (var i = 0; i < stack.length; i++) {
- // console.log(stack[i].toString());
- // }
- //打印堆栈信息
- console.log("1111")
- var jThrowable = Java.use("java.lang.Throwable");
- console.log("2222")
- var jStackTrace = jThrowable.$new().getStackTrace();
- console.log("Stack trace:");
- jStackTrace.forEach(function (stackTraceElement) {
- console.log("\t" + stackTraceElement.toString());
- });
- console.log("33333")
- }
- } catch (e) {
- console.log("报错:",e);
- }
- } else {
- // console.log("Not a TextView");
- }
- // 调用原始的 setOnClickListener 方法
- this.setOnClickListener(listener);
- };
- //监听Toast.makeText
- var Toast = Java.use("android.widget.Toast");
- Toast.makeText.overload('android.content.Context', 'java.lang.CharSequence', 'int').implementation = function (context, text, duration) {
- console.log("Toast.makeText:", text);
- return this.makeText(context, text, duration);
- };
- });
- }
- }
|