|
@@ -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);
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|