From 305d4f4fe52af8e94c56b5eef8ce8ae7ea8367b4 Mon Sep 17 00:00:00 2001 From: Ran Naor <38539376+Ran-Naor@users.noreply.github.com> Date: Sat, 28 Jan 2023 19:59:42 +0200 Subject: [PATCH] fix(gui): print the renamed function name in a frida snippet log (#1772)(PR #1773) * frida snippet log now prints the correct method name if the method was renamed * fixed spotless check in frida snippet * get the renamed method name from the alias proprety and changed to format string to fit frida-trace style * fixed import order to fix gradle spotless warning --- .../java/jadx/gui/ui/codearea/FridaAction.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java index f59c7193f..111994f80 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java @@ -78,10 +78,13 @@ public final class FridaAction extends JNodeAction { MethodNode mth = jMth.getJavaMethod().getMethodNode(); MethodInfo methodInfo = mth.getMethodInfo(); String methodName; + String newMethodName; if (methodInfo.isConstructor()) { methodName = "$init"; + newMethodName = methodName; } else { methodName = StringEscapeUtils.escapeEcmaScript(methodInfo.getName()); + newMethodName = StringEscapeUtils.escapeEcmaScript(methodInfo.getAlias()); } String overload; if (isOverloaded(mth)) { @@ -97,8 +100,7 @@ public final class FridaAction extends JNodeAction { if (argNames.isEmpty()) { logArgs = ""; } else { - String joinStr = " + ', ' + "; - logArgs = joinStr + argNames.stream().map(a -> "'" + a + ": ' + " + a).collect(Collectors.joining(joinStr)); + logArgs = ": " + argNames.stream().map(arg -> arg + "=${" + arg + "}").collect(Collectors.joining(", ")); } String shortClassName = mth.getParentClass().getShortName(); String classSnippet = generateClassSnippet(jMth.getJParent()); @@ -106,16 +108,16 @@ public final class FridaAction extends JNodeAction { // no return value return classSnippet + "\n" + shortClassName + "[\"" + methodName + "\"]" + overload + ".implementation = function (" + args + ") {\n" - + " console.log('" + shortClassName + "." + methodName + " is called'" + logArgs + ");\n" + + " console.log(`" + shortClassName + "." + newMethodName + " is called" + logArgs + "`);\n" + " this[\"" + methodName + "\"](" + args + ");\n" + "};"; } return classSnippet + "\n" + shortClassName + "[\"" + methodName + "\"]" + overload + ".implementation = function (" + args + ") {\n" - + " console.log('" + shortClassName + "." + methodName + " is called'" + logArgs + ");\n" - + " let ret = this[\"" + methodName + "\"](" + args + ");\n" - + " console.log('" + shortClassName + "." + methodName + " return: ' + ret);\n" - + " return ret;\n" + + " console.log(`" + shortClassName + "." + newMethodName + " is called" + logArgs + "`);\n" + + " let result = this[\"" + methodName + "\"](" + args + ");\n" + + " console.log(`" + shortClassName + "." + newMethodName + " result=${result}`);\n" + + " return result;\n" + "};"; }