Browse Source

hook douyin

Alex 1 year ago
parent
commit
cb827d6328
2 changed files with 53 additions and 7 deletions
  1. 51 0
      agent/HookDY.js
  2. 2 7
      agent/index.ts

+ 51 - 0
agent/HookDY.js

@@ -0,0 +1,51 @@
+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);
+            };
+        });
+    }
+}

+ 2 - 7
agent/index.ts

@@ -1,16 +1,11 @@
-import {hooklinker} from "./hooklinker";
-import {SafeSelf} from "./safeSelf";
-import {dumper} from "./dumper";
+import {HOOK_DY} from "./HookDY";
 
 setImmediate(main)
 
 function main() {
 
+    HOOK_DY.hookTextViewClick()
 
-    // init_array 通用模板的注入
-    SafeSelf.start();
-    hooklinker.start();
-    // dumper.start();
 }