From b533a8a64cb1426fc4fb9800d8ead358e05596d8 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 23 Jan 2017 14:53:49 +0100 Subject: [PATCH 01/12] [TASK] Reverted class adapter --- .../core/asm/RedirectClassAdapter.java | 56 ++++++++----------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index 3421a50..60317f9 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -20,7 +20,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { private String className; - private static PrintStream str_out, class_out, dec_out; + private static PrintStream str_out, class_out; static { redirects.put("java/awt/Toolkit", ToolkitRedirect.class); @@ -32,7 +32,6 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { StackTraceElementRedirect.class); redirects.put("java/lang/ProcessBuilder", ProcessBuilderRedirect.class); redirects.put("java/lang/System", SystemRedirect.class); - redirects.put("java/io/File", FileRedirect.class); } public RedirectClassAdapter(ClassVisitor cv) { @@ -40,31 +39,26 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { if (str_out == null && Core.shouldDump()) try { str_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"strings.txt"))); - dec_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"decrypted_strings.txt"))); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - + } catch (FileNotFoundException e) { + e.printStackTrace(); + } if(class_out == null && Core.shouldDump()) try { class_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"classes.txt"))); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } } @Override public void visit(int version, int access, String name, String signature, - String superName, String[] interfaces) { + String superName, String[] interfaces) { this.className = name; super.visit(version, access, name, signature, superName, interfaces); - if(class_out != null) { + if(class_out != null) class_out.println(className + " References:"); - } } - + @Override public void visitEnd(){ super.visitEnd(); @@ -76,7 +70,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { @Override public MethodVisitor visitMethod(int access, String name, String desc, - String signature, String[] exceptions) { + String signature, String[] exceptions) { return new ReflectionMethodVisitor(name, desc, super.visitMethod( access, name, desc, signature, exceptions)); } @@ -84,45 +78,43 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { private class ReflectionMethodVisitor extends MethodVisitor { public ReflectionMethodVisitor(String name, String desc, - MethodVisitor mv) { + MethodVisitor mv) { super(ASM5, mv); } @Override public void visitLdcInsn(Object o) { - if (o instanceof String && str_out != null) { - str_out.println(className + " " + o); - if (!className.toLowerCase().contains("parabot")) { - dec_out.println(o + ":"); - dec_out.println(); - } - } + if (o instanceof String && str_out != null) { + str_out.println(className + " " + o); + } super.visitLdcInsn(o); } @Override public void visitMethodInsn(int opcode, String owner, String name, - String desc) { + String desc) { if (Core.isSecure()) { if (redirects.containsKey(owner) && !name.equals("") && !name.equals("")) { - if (opcode != INVOKESTATIC) + if (opcode != INVOKESTATIC) { desc = "(L" + owner + ";" + desc.substring(1); + } opcode = INVOKESTATIC; owner = redirects.get(owner).getName() .replaceAll("\\.", "/"); } } - - if(class_out != null) + + if(class_out != null) { class_out.println(owner); + } super.visitMethodInsn(opcode, owner, name, desc); } - + @Override public void visitFieldInsn(int opcode, String owner, String name, - String desc){ + String desc){ if (Core.isSecure() && (opcode == GETSTATIC || opcode == PUTSTATIC)) { if (redirects.containsKey(owner)) { owner = redirects.get(owner).getName() @@ -133,7 +125,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { class_out.println(owner); super.visitFieldInsn(opcode, owner, name, desc); } - + } public static SecurityException createSecurityException() { From db180661adfdbd9fe5027e342fbb41f5546dbba1 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 23 Jan 2017 14:55:00 +0100 Subject: [PATCH 02/12] [FEATURE] Added String array reader, to display in Reflection GUI --- src/main/java/org/parabot/core/ui/ReflectUI.java | 10 ++++++++++ .../parabot/environment/api/utils/StringUtils.java | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/org/parabot/core/ui/ReflectUI.java b/src/main/java/org/parabot/core/ui/ReflectUI.java index 351ca66..c57a943 100644 --- a/src/main/java/org/parabot/core/ui/ReflectUI.java +++ b/src/main/java/org/parabot/core/ui/ReflectUI.java @@ -5,6 +5,7 @@ import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; import org.parabot.core.reflect.RefClass; import org.parabot.core.reflect.RefField; +import org.parabot.environment.api.utils.StringUtils; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; @@ -91,6 +92,8 @@ public class ReflectUI extends JFrame { result = f; } else if (value.toLowerCase().endsWith(search.toLowerCase())) { result = f; + } else if (value.toLowerCase().contains(search.toLowerCase())){ + result = f; } } } @@ -238,6 +241,13 @@ public class ReflectUI extends JFrame { builder.append("Type: ").append(refField.getASMType().getClassName()).append("
"); builder.append("Static: ").append(refField.isStatic() ? "yes" : "no").append("
"); builder.append("Array: ").append(refField.isArray() ? refField.getArrayDimensions() + " dimension(s)" : "no").append("
"); + + if (refField.isArray() && refField.getASMType().getClassName().contains("String") && refField.getArrayDimensions() == 1){ + String[] strings = (String[]) refField.asObject(); + String values = StringUtils.implode(", ", strings); + + builder.append("Values: ").append(values).append("
"); + } selectionInfoPane.setText(builder.toString()); fillBasicInfoPane(); diff --git a/src/main/java/org/parabot/environment/api/utils/StringUtils.java b/src/main/java/org/parabot/environment/api/utils/StringUtils.java index 573d5a1..892c75b 100644 --- a/src/main/java/org/parabot/environment/api/utils/StringUtils.java +++ b/src/main/java/org/parabot/environment/api/utils/StringUtils.java @@ -28,6 +28,19 @@ public class StringUtils { return sb.toString(); } + public static String implode(String separator, String... data) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < data.length - 1; i++) { + //data.length - 1 => to not add separator at the end + if (!data[i].matches(" *")) {//empty string are ""; " "; " "; and so on + sb.append(data[i]); + sb.append(separator); + } + } + sb.append(data[data.length - 1].trim()); + return sb.toString(); + } + public static String randomString(final int length) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 20; i++) { From 7231ee0e5fdd991a6d3581ec3415746c56e11734 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Wed, 25 Jan 2017 02:40:00 +0100 Subject: [PATCH 03/12] [CLEANUP] Proper format --- src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java index dd8c647..40fc7a4 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -21,6 +21,7 @@ public class ClassRedirect { if (validStack()) { return c.getDeclaredField(s); } + System.out.println(c.getName() + "." + c.getDeclaredField(s) + " Blocked."); throw RedirectClassAdapter.createSecurityException(); } @@ -29,6 +30,7 @@ public class ClassRedirect { if (validStack()) { return c.getDeclaredMethod(name, params); } + System.out.println(c.getName() + "#" + c.getDeclaredMethod(name, params) + " Blocked."); throw RedirectClassAdapter.createSecurityException(); } From adbb2bd78bd5f1bb0965fcfced5b3f9ea2255cbf Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Wed, 25 Jan 2017 02:40:11 +0100 Subject: [PATCH 04/12] [BUGFIX] Added #totalMemory and #freeMemory fakes --- .../org/parabot/core/asm/redirect/RuntimeRedirect.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/asm/redirect/RuntimeRedirect.java b/src/main/java/org/parabot/core/asm/redirect/RuntimeRedirect.java index 092b920..41f48ef 100644 --- a/src/main/java/org/parabot/core/asm/redirect/RuntimeRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/RuntimeRedirect.java @@ -11,9 +11,16 @@ public class RuntimeRedirect { } public static int availableProcessors(Runtime r){ - //lol faking it, fuck ikov return 2; } + + public static long totalMemory(Runtime runtime){ + return (long) 1024; + } + + public static long freeMemory(Runtime runtime){ + return (long) 1024; + } public static Process exec(Runtime r,String s){ if (s.contains("ping")){ From e037177dbb86dfa53d05b58acba173c08fb9decd Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Wed, 25 Jan 2017 02:40:32 +0100 Subject: [PATCH 05/12] [BUGFIX] Got rid of the deprecated visit functions --- src/main/java/org/parabot/core/asm/RedirectClassAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index 60317f9..8e32608 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -92,7 +92,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { @Override public void visitMethodInsn(int opcode, String owner, String name, - String desc) { + String desc, boolean itf) { if (Core.isSecure()) { if (redirects.containsKey(owner) && !name.equals("") && !name.equals("")) { @@ -109,7 +109,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { class_out.println(owner); } - super.visitMethodInsn(opcode, owner, name, desc); + super.visitMethodInsn(opcode, owner, name, desc, itf); } @Override From 6cc3e81583068797448aa877a95819a17d0c2410 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Wed, 25 Jan 2017 12:22:08 +0100 Subject: [PATCH 06/12] [TASK] Added class path redirect --- .../core/asm/redirect/SystemRedirect.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java b/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java index 4842f77..f18fe1f 100644 --- a/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java @@ -27,7 +27,10 @@ public class SystemRedirect { String value; switch (s) { case "user.home": - value = Directories.getHomeDir().getAbsolutePath(); + value = Directories.getCachePath().getAbsolutePath(); + break; + case "java.class.path": + value = "."; break; default: value = System.getProperty(s); @@ -40,14 +43,20 @@ public class SystemRedirect { String value = null; switch (s2) { case "user.home": - value = Directories.getHomeDir().getAbsolutePath(); + value = Directories.getCachePath().getAbsolutePath(); + break; + case "java.class.path": + value = "."; break; } if (value == null) { switch (s) { case "user.home": - value = Directories.getHomeDir().getAbsolutePath(); + value = Directories.getCachePath().getAbsolutePath(); + break; + case "java.class.path": + value = "."; break; default: value = System.getProperty(s); @@ -62,11 +71,12 @@ public class SystemRedirect { } public static String setProperty(String s1, String s2) { - System.out.printf("SetSystemProp %s = %s", s1, s2); + System.out.printf("SetSystemProp %s = %s\n", s1, s2); return System.setProperty(s1, s2); } public static String getenv(String string) { + System.out.printf("getEnv %s = %s\n", string, System.getenv(string)); return System.getenv(string); } @@ -74,7 +84,6 @@ public class SystemRedirect { } - public static void setErr(PrintStream printStream) { } From d8d7c06cff40f8b1aa9ad466eb00239642a1227c Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Thu, 26 Jan 2017 20:52:36 +0100 Subject: [PATCH 07/12] [TASK] Temp disable of ClassLoaderRedirect --- src/main/java/org/parabot/core/asm/RedirectClassAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index 8e32608..3acc130 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -25,7 +25,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { static { redirects.put("java/awt/Toolkit", ToolkitRedirect.class); redirects.put("java/lang/Class", ClassRedirect.class); - redirects.put("java/lang/ClassLoader", ClassLoaderRedirect.class); +// redirects.put("java/lang/ClassLoader", ClassLoaderRedirect.class); redirects.put("java/lang/Runtime", RuntimeRedirect.class); redirects.put("java/lang/Thread", ThreadRedirect.class); redirects.put("java/lang/StackTraceElement", From 04a90761add2032e01917198b84df0c04a221c8d Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Thu, 26 Jan 2017 20:52:59 +0100 Subject: [PATCH 08/12] [TASK] Added more methods for ClassLoaderRedirect --- .../asm/redirect/ClassLoaderRedirect.java | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java index 5a771a4..54bc5d5 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java @@ -1,15 +1,53 @@ package org.parabot.core.asm.redirect; +import org.parabot.core.Core; import org.parabot.core.asm.RedirectClassAdapter; -public class ClassLoaderRedirect { - +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Enumeration; + +public class ClassLoaderRedirect extends ClassLoader { + + static int count = 0; + public static ClassloadClass(ClassLoader c,String name){ throw RedirectClassAdapter.createSecurityException(); } - static int count = 0; + public static ClassLoader getParent(ClassLoader c){ throw RedirectClassAdapter.createSecurityException(); } + public static URL getResource(ClassLoader classLoader, String name) { + Core.verbose("#getResource requested for ClassLoaderRedirect (" + name + ")"); + return classLoader.getResource(name); + } + + public static Enumeration getResources(ClassLoader classLoader, String name) throws IOException { + Core.verbose("#getResource requested for ClassLoaderRedirect (" + name + ")"); + return classLoader.getResources(name); + } + + public static InputStream getResourceAsStream(ClassLoader classLoader, String name) { + Core.verbose("#getResourceAsStream requested for ClassLoaderRedirect (" + name + ")"); + return classLoader.getResourceAsStream(name); + } + + public static void setDefaultAssertionStatus(ClassLoader classLoader, boolean enabled) { + + } + + public static void setPackageAssertionStatus(ClassLoader classLoader, String packageName, boolean enabled) { + + } + + public static void setClassAssertionStatus(ClassLoader classLoader, String className, boolean enabled) { + + } + + public static void clearAssertionStatus(ClassLoader classLoader) { + + } } From da0e0f4d8e17d368cb6059db959cc6af9b0d077b Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 30 Jan 2017 14:41:48 +0100 Subject: [PATCH 09/12] [TASK] Incremented version to 2.6.3 --- .travis.yml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5b5dea8..736f389 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ env: - secure: UG+b1tEgc8xv9x4r//2OAIK1RrYv6n209KTTFMMwcnAa7DI8HaP8nljRa5/VhDhuKHdlVrYH/tI90v7UVBs0GDVNwK5V17Io0fMm3FUGZekSthTCqqno5wAGa9r6a6mMLtSaSmIFeIKi0+0d2ZwplRuhj/dtEYjjBBj+kK8g4nE= - secure: St/fecUDInFBCRriYqgp2F8PU9/SooorgxD9Mrs+b0EsC7AbtSsQXvdIv2Lp6xzdQ0VSXPcLIhULPOYrmBKnGQ/NjXTIZXxnroyQxxnI6xyEWIZwiHRY/bKRJDRbQTxD9NL32szKiDSwnw7pu6llF4D64UqQvziq4Gm6VohU75M= - secure: bD15GVZWowiknbfLavh8CxSh0GsnF5kT4kZ6ggCuUDGyj0mzqf7dNRnchQIKkCG0WRYyTrFN4pEiygeywWsipEeAVv9Xhx3cuUZmzeQaR5KCWabSwJ8gK6jZd1YhcWmM9vrdPHobZr65MP0y/8mu/Fovgky9dY7KDf4G3SebNrM= - - PARABOT_VERSION=2.6.2 + - PARABOT_VERSION=2.6.3 cache: directories: diff --git a/pom.xml b/pom.xml index 0f5810a..4944707 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.parabot client - 2.6.2 + 2.6.3 jar From 82bf4ece9c75e01f3ac08b560646f63121a9d528 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 30 Jan 2017 14:50:05 +0100 Subject: [PATCH 10/12] [TASK] Updated README.md --- README.md | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index b263025..8f6354b 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,21 @@ # Parabot -Parabot V2.6.2. +Parabot V2.6.3. -#### Website +#### Links -[Community, scripts & more](http://www.parabot.org/) +[Website](http://www.parabot.org/) + +[Download latest version](http://v3.bdn.parabot.org/api/bot/download/client) #### Compilation -You'll need the [libraries](https://github.com/Parabot/Parabot/tree/master/libs) in order to compile parabot successfully. -The POM file contains the redirection to the libraries, so simply install them with Maven. +Build the project with the Maven POM file to have all required libraries installed. + +#### Automation +Every stable build is automatically generated from the last commits of the master branch. This will take the version from both the `pom.xml` and the version in `.travis.yml`. + +The nightly builds are automatically created from the last commits of the development branch. This will take the version from both the `pom.xml` and the version in `.travis.yml`, together with the build ID from travis. #### Issues If you've an issues regarding the bot itself, please report them [here](https://github.com/Parabot/Parabot/issues). @@ -19,7 +25,9 @@ If you've an issues regarding the bot itself, please report them [here](https:// #### Maven Parabot supports Maven as of September 2015. All information is included in the POM.xml. The API that is supported by Parabot is also published on a Maven repository. -If you'd like to have either or both the client and the API in your project, use the following repository and dependecy tags: + +To add the client as a library, you'll first have to add our repository: + ``` @@ -28,22 +36,17 @@ If you'd like to have either or both the client and the API in your project, use https://maven.parabot.org/ - +``` +Then you'll need to add the dependency +``` org.parabot client - 2.6 - - - org.parabot - 317provider - 1.14 + 2.6.3 ``` -**For the latest versions of our dependencies, please check our examples on [the Maven Repository](https://github.com/Parabot/Maven-Repository/tree/master/examples)** - #### Labels Labels are created with [GHLabel](https://github.com/jimmycuadra/ghlabel), whereas the yml is located in the .github directory \ No newline at end of file From e86cc4e5c1cd7dd5cd2a77030870b923e58de2e0 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 30 Jan 2017 14:52:52 +0100 Subject: [PATCH 11/12] [BUGFIX] Added correct layout --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8f6354b..41f5398 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,7 @@ The nightly builds are automatically created from the last commits of the develo If you've an issues regarding the bot itself, please report them [here](https://github.com/Parabot/Parabot/issues). #### Maven -Parabot supports Maven as of September 2015. All information is included in the POM.xml. -The API that is supported by Parabot is also published on a Maven repository. - -To add the client as a library, you'll first have to add our repository: +To add the client as a library, you'll first have to add our repository to your `pom.xml`: ``` @@ -37,7 +34,9 @@ To add the client as a library, you'll first have to add our repository: ``` -Then you'll need to add the dependency + +Then you'll need to add the dependency: + ``` From 25d46acb16498fa4387e4bcbdd88844b1a3d1231 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Thu, 2 Feb 2017 23:16:02 +0100 Subject: [PATCH 12/12] [CLEANUP] Reformatted code --- src/main/java/org/parabot/core/asm/RedirectClassAdapter.java | 3 ++- src/main/java/org/parabot/core/ui/ReflectUI.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index 3acc130..03cbb66 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -55,8 +55,9 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { String superName, String[] interfaces) { this.className = name; super.visit(version, access, name, signature, superName, interfaces); - if(class_out != null) + if(class_out != null) { class_out.println(className + " References:"); + } } @Override diff --git a/src/main/java/org/parabot/core/ui/ReflectUI.java b/src/main/java/org/parabot/core/ui/ReflectUI.java index c57a943..32d7f59 100644 --- a/src/main/java/org/parabot/core/ui/ReflectUI.java +++ b/src/main/java/org/parabot/core/ui/ReflectUI.java @@ -92,7 +92,7 @@ public class ReflectUI extends JFrame { result = f; } else if (value.toLowerCase().endsWith(search.toLowerCase())) { result = f; - } else if (value.toLowerCase().contains(search.toLowerCase())){ + } else if (value.toLowerCase().contains(search.toLowerCase())) { result = f; } } @@ -242,7 +242,7 @@ public class ReflectUI extends JFrame { builder.append("Static: ").append(refField.isStatic() ? "yes" : "no").append("
"); builder.append("Array: ").append(refField.isArray() ? refField.getArrayDimensions() + " dimension(s)" : "no").append("
"); - if (refField.isArray() && refField.getASMType().getClassName().contains("String") && refField.getArrayDimensions() == 1){ + if (refField.isArray() && refField.getASMType().getClassName().contains("String") && refField.getArrayDimensions() == 1) { String[] strings = (String[]) refField.asObject(); String values = StringUtils.implode(", ", strings);