/** * Frida debug script v8 — trace u01.f2 creator and LinkedList add */ function log(tag, msg) { console.log("[" + tag + "] " + msg); } function printStack(tag) { try { var Thread = Java.use("java.lang.Thread"); var stack = Thread.currentThread().getStackTrace(); var lines = []; for (var i = 0; i < stack.length; i++) { lines.push(" at " + stack[i].toString()); } console.log("[" + tag + " STACK]\n" + lines.join("\n") + "\n[END STACK]"); } catch (e) { console.log("[" + tag + " STACK] failed: " + e + "\n[END STACK]"); } } Java.perform(function () { log("MAIN", "Tracing u01.f2 creator and message queue..."); // Hook u01.f2 constructor with stack trace try { var f2 = Java.use("u01.f2"); f2.$init.overload("u01.g2").implementation = function(g2) { log("F2_CTOR", "===== u01.f2 created ====="); printStack("F2_CTOR"); this.$init(g2); }; log("MAIN", "u01.f2 constructor hooked"); } catch (e) { log("MAIN", "f2 ctor hook failed: " + e); } // Hook LinkedList.add to see when message IDs are added try { var LinkedList = Java.use("java.util.LinkedList"); LinkedList.add.overload("java.lang.Object").implementation = function(obj) { var objStr = obj ? obj.toString() : "null"; if (objStr.indexOf("_") !== -1 && objStr.length > 10 && objStr.length < 50) { log("LL_ADD", "LinkedList.add: " + objStr); printStack("LL_ADD"); } return this.add(obj); }; log("MAIN", "LinkedList.add hooked"); } catch (e) { log("MAIN", "LinkedList.add hook failed: " + e); } // Hook u01.g2 constructor try { var g2 = Java.use("u01.g2"); g2.$init.overload("u01.t").implementation = function(t) { log("G2_CTOR", "===== u01.g2 created ====="); printStack("G2_CTOR"); this.$init(t); }; log("MAIN", "u01.g2 constructor hooked"); } catch (e) { log("MAIN", "g2 ctor hook failed: " + e); } // Also hook u01.e2 (field a of g2) to see its role try { var e2 = Java.use("u01.e2"); var methods = e2.class.getDeclaredMethods(); for (var i = 0; i < methods.length; i++) { var m = methods[i]; if (m.getModifiers() & 0x0001) { var params = ""; var pts = m.getParameterTypes(); for (var j = 0; j < pts.length; j++) { params += pts[j].getName() + ","; } log("MAIN", "u01.e2 method: " + m.getName() + "(" + params + ") -> " + m.getReturnType().getName()); } } } catch (e) { log("MAIN", "e2 inspect failed: " + e); } log("MAIN", "All hooks installed. Send a message manually."); });