From 47eb88ccc981fe4362624af5c9b9fe60f6d2c824 Mon Sep 17 00:00:00 2001 From: ran Date: Fri, 27 Jan 2023 20:47:36 +0200 Subject: [PATCH 1/4] frida snippet log now prints the correct method name if the method was renamed --- .../java/jadx/gui/ui/codearea/FridaAction.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 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 f59c7193ffc..f6883966349 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 @@ -16,6 +16,8 @@ import jadx.api.JavaClass; import jadx.api.JavaField; import jadx.api.JavaMethod; +import jadx.api.data.ICodeRename; +import jadx.api.data.impl.JadxNodeRef; import jadx.api.metadata.ICodeNodeRef; import jadx.api.metadata.annotations.NodeDeclareRef; import jadx.api.metadata.annotations.VarNode; @@ -78,10 +80,18 @@ private String generateMethodSnippet(JMethod jMth) { 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 = methodName; + for (ICodeRename rename : getCodeArea().getContentPanel().getTabbedPane().getMainWindow().getProject().getCodeData().getRenames()) { + if (null == rename.getCodeRef() && rename.getNodeRef().equals(JadxNodeRef.forMth(jMth.getJavaMethod()))) { + newMethodName = rename.getNewName(); + } + } } String overload; if (isOverloaded(mth)) { @@ -106,15 +116,15 @@ private String generateMethodSnippet(JMethod jMth) { // 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" + + " console.log('" + shortClassName + "." + newMethodName + " is called'" + logArgs + ");\n" + " let ret = this[\"" + methodName + "\"](" + args + ");\n" - + " console.log('" + shortClassName + "." + methodName + " return: ' + ret);\n" + + " console.log('" + shortClassName + "." + newMethodName + " return: ' + ret);\n" + " return ret;\n" + "};"; } From 88325aa68ae86535f02eb917c6d2ebef11a0c8a9 Mon Sep 17 00:00:00 2001 From: ran Date: Fri, 27 Jan 2023 21:15:13 +0200 Subject: [PATCH 2/4] fixed spotless check in frida snippet --- jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f6883966349..53466aafa45 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 @@ -87,7 +87,8 @@ private String generateMethodSnippet(JMethod jMth) { } else { methodName = StringEscapeUtils.escapeEcmaScript(methodInfo.getName()); newMethodName = methodName; - for (ICodeRename rename : getCodeArea().getContentPanel().getTabbedPane().getMainWindow().getProject().getCodeData().getRenames()) { + for (ICodeRename rename : getCodeArea().getContentPanel().getTabbedPane().getMainWindow().getProject().getCodeData() + .getRenames()) { if (null == rename.getCodeRef() && rename.getNodeRef().equals(JadxNodeRef.forMth(jMth.getJavaMethod()))) { newMethodName = rename.getNewName(); } From 09d79b3bb13c0e47068c8900a6b5b5ae1365cdcf Mon Sep 17 00:00:00 2001 From: ran Date: Fri, 27 Jan 2023 21:46:00 +0200 Subject: [PATCH 3/4] get the renamed method name from the alias proprety and changed to format string to fit frida-trace style --- .../jadx/gui/ui/codearea/FridaAction.java | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 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 53466aafa45..6718904d4da 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 @@ -86,13 +86,7 @@ private String generateMethodSnippet(JMethod jMth) { newMethodName = methodName; } else { methodName = StringEscapeUtils.escapeEcmaScript(methodInfo.getName()); - newMethodName = methodName; - for (ICodeRename rename : getCodeArea().getContentPanel().getTabbedPane().getMainWindow().getProject().getCodeData() - .getRenames()) { - if (null == rename.getCodeRef() && rename.getNodeRef().equals(JadxNodeRef.forMth(jMth.getJavaMethod()))) { - newMethodName = rename.getNewName(); - } - } + newMethodName = StringEscapeUtils.escapeEcmaScript(methodInfo.getAlias()); } String overload; if (isOverloaded(mth)) { @@ -108,8 +102,7 @@ private String generateMethodSnippet(JMethod jMth) { 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()); @@ -117,16 +110,16 @@ private String generateMethodSnippet(JMethod jMth) { // no return value return classSnippet + "\n" + shortClassName + "[\"" + methodName + "\"]" + overload + ".implementation = function (" + args + ") {\n" - + " console.log('" + shortClassName + "." + newMethodName + " 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 + "." + newMethodName + " is called'" + logArgs + ");\n" - + " let ret = this[\"" + methodName + "\"](" + args + ");\n" - + " console.log('" + shortClassName + "." + newMethodName + " 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" + "};"; } From c1222c00eb574bfb471e1254b13d125f783621d6 Mon Sep 17 00:00:00 2001 From: ran Date: Fri, 27 Jan 2023 21:49:47 +0200 Subject: [PATCH 4/4] fixed import order to fix gradle spotless warning --- jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java | 2 -- 1 file changed, 2 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 6718904d4da..111994f8086 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 @@ -16,8 +16,6 @@ import jadx.api.JavaClass; import jadx.api.JavaField; import jadx.api.JavaMethod; -import jadx.api.data.ICodeRename; -import jadx.api.data.impl.JadxNodeRef; import jadx.api.metadata.ICodeNodeRef; import jadx.api.metadata.annotations.NodeDeclareRef; import jadx.api.metadata.annotations.VarNode;