* Generate Frida TypeScript hook code for a method.
(method: SmaliMethod)
| 124 | * Generate Frida TypeScript hook code for a method. |
| 125 | */ |
| 126 | function generateFridaHook(method: SmaliMethod): string { |
| 127 | const javaParams = method.paramTypes.map(smaliTypeToJava); |
| 128 | const javaReturn = smaliTypeToJava(method.returnType); |
| 129 | |
| 130 | const overloadArgs = javaParams.map((p) => `'${p}'`).join(", "); |
| 131 | const hookParams = method.paramTypes.map((_, i) => `arg${i}`).join(", "); |
| 132 | |
| 133 | if (method.isConstructor && method.methodName === "<init>") { |
| 134 | return ` |
| 135 | // Hook: ${method.className}.<init>(${javaParams.join(", ")}) |
| 136 | Java.perform(() => { |
| 137 | const cls = Java.use('${method.className}'); |
| 138 | cls.$init.overload(${overloadArgs}).implementation = function(${hookParams}) { |
| 139 | console.log(\`[*] ${method.className}.<init> called\`); |
| 140 | ${javaParams.map((_, i) => ` console.log(\` arg${i}: \${arg${i}}\`);`).join("\n")} |
| 141 | return this.$init(${hookParams}); |
| 142 | }; |
| 143 | }); |
| 144 | `.trim(); |
| 145 | } |
| 146 | |
| 147 | const returnLine = |
| 148 | javaReturn === "void" |
| 149 | ? `this.${method.methodName}(${hookParams});` |
| 150 | : `const ret = this.${method.methodName}(${hookParams});\n console.log(\` ret: \${ret}\`);\n return ret;`; |
| 151 | |
| 152 | return ` |
| 153 | // Hook: ${method.className}.${method.methodName}(${javaParams.join(", ")}): ${javaReturn} |
| 154 | Java.perform(() => { |
| 155 | const cls = Java.use('${method.className}'); |
| 156 | cls.${method.methodName}.overload(${overloadArgs}).implementation = function(${hookParams}) { |
| 157 | console.log(\`[*] ${method.className}.${method.methodName} called\`); |
| 158 | ${javaParams.map((_, i) => ` console.log(\` arg${i}: \${arg${i}}\`);`).join("\n")} |
| 159 | ${returnLine} |
| 160 | }; |
| 161 | }); |
| 162 | `.trim(); |
| 163 | } |
| 164 | |
| 165 | /** |
| 166 | * Find the APKTool project root from a file path. |
no test coverage detected