Translations & Better About Window
This commit is contained in:
parent
f3c7c1881a
commit
bd636f2125
30 changed files with 607 additions and 195 deletions
|
@ -56,18 +56,12 @@ public class Boot {
|
||||||
private static final List<String> libsFileList = new ArrayList<>();
|
private static final List<String> libsFileList = new ArrayList<>();
|
||||||
private static final List<String> urlList = new ArrayList<>();
|
private static final List<String> urlList = new ArrayList<>();
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
screen = new InitialBootScreen();
|
|
||||||
} catch (Exception e) {
|
|
||||||
BytecodeViewer.handleException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void boot(String[] args, boolean CLI) throws Exception {
|
public static void boot(String[] args, boolean CLI) throws Exception {
|
||||||
bootstrap();
|
bootstrap();
|
||||||
ILoader<?> loader = findLoader();
|
ILoader<?> loader = findLoader();
|
||||||
|
|
||||||
|
screen = new InitialBootScreen();
|
||||||
|
|
||||||
if (!CLI)
|
if (!CLI)
|
||||||
SwingUtilities.invokeLater(() -> screen.setVisible(true));
|
SwingUtilities.invokeLater(() -> screen.setVisible(true));
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,9 @@ import javax.swing.text.html.HTMLEditorKit;
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||||
import the.bytecode.club.bytecodeviewer.Resources;
|
import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
|
import the.bytecode.club.bytecodeviewer.gui.components.HTMLPane;
|
||||||
|
|
||||||
|
import static the.bytecode.club.bytecodeviewer.Configuration.language;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -40,12 +43,12 @@ import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
* @author Bibl (don't ban me pls)
|
* @author Bibl (don't ban me pls)
|
||||||
* @created 19 Jul 2015 04:12:21
|
* @created 19 Jul 2015 04:12:21
|
||||||
*/
|
*/
|
||||||
public class InitialBootScreen extends JFrame {
|
public class InitialBootScreen extends JFrame
|
||||||
private static final long serialVersionUID = -1098467609722393444L;
|
{
|
||||||
|
|
||||||
private final JProgressBar progressBar = new JProgressBar();
|
private final JProgressBar progressBar = new JProgressBar();
|
||||||
|
|
||||||
public InitialBootScreen() throws IOException {
|
public InitialBootScreen() throws IOException
|
||||||
|
{
|
||||||
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
||||||
addWindowListener(new WindowAdapter() {
|
addWindowListener(new WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,24 +59,14 @@ public class InitialBootScreen extends JFrame {
|
||||||
});
|
});
|
||||||
this.setIconImages(Resources.iconList);
|
this.setIconImages(Resources.iconList);
|
||||||
|
|
||||||
int i = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
|
setSize(getSafeSize());
|
||||||
if (i >= 840)
|
|
||||||
setSize(new Dimension(600, 800));
|
|
||||||
else if (i >= 640)
|
|
||||||
setSize(new Dimension(500, 600));
|
|
||||||
else if (i >= 440)
|
|
||||||
setSize(new Dimension(400, 400));
|
|
||||||
else
|
|
||||||
setSize(Toolkit.getDefaultToolkit().getScreenSize());
|
|
||||||
|
|
||||||
setTitle("Bytecode Viewer Boot Screen - Starting Up");
|
setTitle("Bytecode Viewer Boot Screen - Starting Up");
|
||||||
GridBagLayout gridBagLayout = new GridBagLayout();
|
GridBagLayout gridBagLayout = new GridBagLayout();
|
||||||
gridBagLayout.columnWidths = new int[]{0, 0};
|
gridBagLayout.columnWidths = new int[]{0, 0};
|
||||||
gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
0, 0};
|
|
||||||
gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
|
gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
|
||||||
gridBagLayout.rowWeights = new double[]{1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
gridBagLayout.rowWeights = new double[]{1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
|
||||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
|
|
||||||
getContentPane().setLayout(gridBagLayout);
|
getContentPane().setLayout(gridBagLayout);
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane();
|
JScrollPane scrollPane = new JScrollPane();
|
||||||
|
@ -85,13 +78,7 @@ public class InitialBootScreen extends JFrame {
|
||||||
gbc_scrollPane.gridy = 0;
|
gbc_scrollPane.gridy = 0;
|
||||||
getContentPane().add(scrollPane, gbc_scrollPane);
|
getContentPane().add(scrollPane, gbc_scrollPane);
|
||||||
|
|
||||||
JEditorPane editorPane = new JEditorPane();
|
scrollPane.setViewportView(HTMLPane.fromResource(language.getHTMLPath("intro")));
|
||||||
editorPane.setEditorKit(new HTMLEditorKit());
|
|
||||||
|
|
||||||
editorPane.setText(convertStreamToString(InitialBootScreen.class.getClassLoader().getResourceAsStream("intro"
|
|
||||||
+ ".html")));
|
|
||||||
|
|
||||||
scrollPane.setViewportView(editorPane);
|
|
||||||
|
|
||||||
GridBagConstraints gbc_progressBar = new GridBagConstraints();
|
GridBagConstraints gbc_progressBar = new GridBagConstraints();
|
||||||
gbc_progressBar.fill = GridBagConstraints.HORIZONTAL;
|
gbc_progressBar.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
@ -101,16 +88,22 @@ public class InitialBootScreen extends JFrame {
|
||||||
this.setLocationRelativeTo(null);
|
this.setLocationRelativeTo(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
static String convertStreamToString(java.io.InputStream is) throws IOException {
|
public static Dimension getSafeSize()
|
||||||
@SuppressWarnings("resource")
|
{
|
||||||
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
|
int i = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
|
||||||
String string = s.hasNext() ? s.next() : "";
|
if (i >= 840)
|
||||||
is.close();
|
return new Dimension(600, 800);
|
||||||
s.close();
|
else if (i >= 640)
|
||||||
return string;
|
return new Dimension(500, 600);
|
||||||
|
else if (i >= 440)
|
||||||
|
return new Dimension(400, 400);
|
||||||
|
else
|
||||||
|
return Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public JProgressBar getProgressBar() {
|
public JProgressBar getProgressBar() {
|
||||||
return progressBar;
|
return progressBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -1098467609722393444L;
|
||||||
}
|
}
|
|
@ -22,7 +22,7 @@ public class GlobalHotKeys
|
||||||
*/
|
*/
|
||||||
public static void keyPressed(KeyEvent e)
|
public static void keyPressed(KeyEvent e)
|
||||||
{
|
{
|
||||||
if (System.currentTimeMillis() - Configuration.lastHotKeyExecuted <= (4000))
|
if (System.currentTimeMillis() - Configuration.lastHotKeyExecuted <= (600))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//CTRL + O
|
//CTRL + O
|
||||||
|
|
|
@ -20,9 +20,11 @@ import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.*;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -143,8 +145,9 @@ public class CFRDecompiler extends InternalDecompiler
|
||||||
if (file.exists())
|
if (file.exists())
|
||||||
return findFile(Objects.requireNonNull(file.listFiles()));
|
return findFile(Objects.requireNonNull(file.listFiles()));
|
||||||
|
|
||||||
return "CFR error! " + ExceptionUI.SEND_STACKTRACE_TO +
|
return CFR + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler." + nl + nl + exception;
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
Random r = new Random();
|
Random r = new Random();
|
||||||
|
@ -171,10 +174,10 @@ public class CFRDecompiler extends InternalDecompiler
|
||||||
e.printStackTrace(new PrintWriter(sw));
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
||||||
String exception =
|
String exception = "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
||||||
"Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
|
||||||
return "CFR error! " + ExceptionUI.SEND_STACKTRACE_TO +
|
return CFR + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler." +
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
nl + nl + exception;
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +186,7 @@ public class CFRDecompiler extends InternalDecompiler
|
||||||
}
|
}
|
||||||
|
|
||||||
return "CFR error!" +
|
return "CFR error!" +
|
||||||
nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler.";
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] generateMainMethod(String filePath, String outputPath) {
|
public String[] generateMainMethod(String filePath, String outputPath) {
|
||||||
|
|
|
@ -12,9 +12,11 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.Resources;
|
import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.*;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -130,9 +132,10 @@ public class FernFlowerDecompiler extends InternalDecompiler
|
||||||
exception += nl + nl + sw;
|
exception += nl + nl + sw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "FernFlower error! " + ExceptionUI.SEND_STACKTRACE_TO
|
|
||||||
+ nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler."
|
return FERNFLOWER + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
+ nl + nl + exception;
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] generateMainMethod(String className, String folder) {
|
private String[] generateMainMethod(String className, String folder) {
|
||||||
|
|
|
@ -14,9 +14,11 @@ import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.*;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -86,9 +88,9 @@ public class JADXDecompiler extends InternalDecompiler
|
||||||
if(exception.isEmpty())
|
if(exception.isEmpty())
|
||||||
exception = "Decompiled source file not found!";
|
exception = "Decompiled source file not found!";
|
||||||
|
|
||||||
return "JADX error! " + ExceptionUI.SEND_STACKTRACE_TO
|
return JADX + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
+ nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler."
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
+ nl + nl + exception;
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
Random r = new Random();
|
Random r = new Random();
|
||||||
|
@ -116,15 +118,16 @@ public class JADXDecompiler extends InternalDecompiler
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
String exception = "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
String exception = "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
||||||
|
|
||||||
return "JADX error! " + ExceptionUI.SEND_STACKTRACE_TO +
|
return JADX + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
nl + nl + "Suggested Fix: Click refresh class, " +
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
"if it fails again try another decompiler." + nl + nl + exception;
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "JADX error!" + nl + nl + "Suggested Fix: Click refresh class, if it "
|
|
||||||
+ "fails again try another decompiler.";
|
return "JADX error!" +
|
||||||
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -18,9 +18,11 @@ import me.konloch.kontainer.io.DiskReader;
|
||||||
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
|
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bytecodeviewer.Constants;
|
import the.bytecode.club.bytecodeviewer.Constants;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.*;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -118,9 +120,9 @@ public class JDGUIDecompiler extends InternalDecompiler
|
||||||
"Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
"Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "JD-GUI error! " + ExceptionUI.SEND_STACKTRACE_TO
|
return JDGUI + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
+ nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler."
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
+ nl + nl + exception;
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -34,10 +34,12 @@ import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.EncodeUtils;
|
import the.bytecode.club.bytecodeviewer.util.EncodeUtils;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.*;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -115,9 +117,8 @@ public class ProcyonDecompiler extends InternalDecompiler
|
||||||
decompilationOptions.setFullDecompilation(true);
|
decompilationOptions.setFullDecompilation(true);
|
||||||
|
|
||||||
TypeDefinition resolvedType;
|
TypeDefinition resolvedType;
|
||||||
if (type == null || ((resolvedType = type.resolve()) == null)) {
|
if (type == null || ((resolvedType = type.resolve()) == null))
|
||||||
throw new Exception("Unable to resolve type.");
|
throw new Exception("Unable to resolve type.");
|
||||||
}
|
|
||||||
|
|
||||||
StringWriter stringwriter = new StringWriter();
|
StringWriter stringwriter = new StringWriter();
|
||||||
settings.getLanguage().decompileType(resolvedType, new PlainTextOutput(stringwriter), decompilationOptions);
|
settings.getLanguage().decompileType(resolvedType, new PlainTextOutput(stringwriter), decompilationOptions);
|
||||||
|
@ -130,9 +131,10 @@ public class ProcyonDecompiler extends InternalDecompiler
|
||||||
|
|
||||||
exception = "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
exception = "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
||||||
}
|
}
|
||||||
return "Procyon error! " + ExceptionUI.SEND_STACKTRACE_TO
|
|
||||||
+ nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler."
|
return PROCYON + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
+ nl + nl + exception;
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -12,11 +12,13 @@ import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.Dex2Jar;
|
import the.bytecode.club.bytecodeviewer.util.Dex2Jar;
|
||||||
import the.bytecode.club.bytecodeviewer.util.FileContainer;
|
import the.bytecode.club.bytecodeviewer.util.FileContainer;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.*;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
@ -116,9 +118,9 @@ public class SmaliDisassembler extends InternalDecompiler
|
||||||
exception += "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
exception += "Bytecode Viewer Version: " + VERSION + nl + nl + sw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Smali Disassembler error! " + ExceptionUI.SEND_STACKTRACE_TO
|
return SMALI + " " + DISASSEMBLER + " " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO +
|
||||||
+ nl + nl + "Suggested Fix: Click refresh class, if it fails again try another decompiler."
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR +
|
||||||
+ nl + nl + exception;
|
nl + nl + exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -62,7 +62,6 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
*/
|
*/
|
||||||
public class MainViewerGUI extends JFrame
|
public class MainViewerGUI extends JFrame
|
||||||
{
|
{
|
||||||
public AboutWindow aboutWindow = new AboutWindow();
|
|
||||||
public boolean isMaximized;
|
public boolean isMaximized;
|
||||||
public final List<JMenuItem> waitIcons = new ArrayList<>();
|
public final List<JMenuItem> waitIcons = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -156,7 +155,7 @@ public class MainViewerGUI extends JFrame
|
||||||
public JCheckBoxMenuItem debugHelpers = new TranslatedJCheckBoxMenuItem("Debug Helpers", Translation.DEBUG_HELPERS);
|
public JCheckBoxMenuItem debugHelpers = new TranslatedJCheckBoxMenuItem("Debug Helpers", Translation.DEBUG_HELPERS);
|
||||||
|
|
||||||
//FernFlower settings
|
//FernFlower settings
|
||||||
public final JMenu fernFlowerSettingsSecondaryMenu = new JMenu("FernFlower");
|
public final JMenu fernFlowerSettingsSecondaryMenu = new TranslatedJMenu("FernFlower", Translation.FERNFLOWER);
|
||||||
public JCheckBoxMenuItem rbr = new JCheckBoxMenuItem("Hide bridge methods");
|
public JCheckBoxMenuItem rbr = new JCheckBoxMenuItem("Hide bridge methods");
|
||||||
public JCheckBoxMenuItem rsy = new JCheckBoxMenuItem("Hide synthetic class members");
|
public JCheckBoxMenuItem rsy = new JCheckBoxMenuItem("Hide synthetic class members");
|
||||||
public JCheckBoxMenuItem din = new JCheckBoxMenuItem("Decompile inner classes");
|
public JCheckBoxMenuItem din = new JCheckBoxMenuItem("Decompile inner classes");
|
||||||
|
@ -178,7 +177,7 @@ public class MainViewerGUI extends JFrame
|
||||||
public JCheckBoxMenuItem ren = new JCheckBoxMenuItem("Rename ambiguous classes and class elements");
|
public JCheckBoxMenuItem ren = new JCheckBoxMenuItem("Rename ambiguous classes and class elements");
|
||||||
|
|
||||||
//Proycon
|
//Proycon
|
||||||
public final JMenu procyonSettingsSecondaryMenu = new JMenu("Procyon");
|
public final JMenu procyonSettingsSecondaryMenu = new TranslatedJMenu("Procyon", Translation.PROCYON);
|
||||||
public final JCheckBoxMenuItem alwaysGenerateExceptionVars = new JCheckBoxMenuItem("Always Generate Exception Variable For Catch Blocks");
|
public final JCheckBoxMenuItem alwaysGenerateExceptionVars = new JCheckBoxMenuItem("Always Generate Exception Variable For Catch Blocks");
|
||||||
public final JCheckBoxMenuItem excludeNestedTypes = new JCheckBoxMenuItem("Exclude Nested Types");
|
public final JCheckBoxMenuItem excludeNestedTypes = new JCheckBoxMenuItem("Exclude Nested Types");
|
||||||
public final JCheckBoxMenuItem showDebugLineNumbers = new JCheckBoxMenuItem("Show Debug Line Numbers");
|
public final JCheckBoxMenuItem showDebugLineNumbers = new JCheckBoxMenuItem("Show Debug Line Numbers");
|
||||||
|
@ -195,7 +194,7 @@ public class MainViewerGUI extends JFrame
|
||||||
public final JCheckBoxMenuItem unicodeOutputEnabled = new JCheckBoxMenuItem("Unicode Output Enabled");
|
public final JCheckBoxMenuItem unicodeOutputEnabled = new JCheckBoxMenuItem("Unicode Output Enabled");
|
||||||
|
|
||||||
//CFR
|
//CFR
|
||||||
public final JMenu cfrSettingsSecondaryMenu = new JMenu("CFR");
|
public final JMenu cfrSettingsSecondaryMenu = new TranslatedJMenu("CFR", Translation.CFR);
|
||||||
public final JCheckBoxMenuItem decodeEnumSwitch = new JCheckBoxMenuItem("Decode Enum Switch");
|
public final JCheckBoxMenuItem decodeEnumSwitch = new JCheckBoxMenuItem("Decode Enum Switch");
|
||||||
public final JCheckBoxMenuItem sugarEnums = new JCheckBoxMenuItem("SugarEnums");
|
public final JCheckBoxMenuItem sugarEnums = new JCheckBoxMenuItem("SugarEnums");
|
||||||
public final JCheckBoxMenuItem decodeStringSwitch = new JCheckBoxMenuItem("Decode String Switch");
|
public final JCheckBoxMenuItem decodeStringSwitch = new JCheckBoxMenuItem("Decode String Switch");
|
||||||
|
@ -342,7 +341,7 @@ public class MainViewerGUI extends JFrame
|
||||||
saveAsZip.addActionListener(arg0 -> Export.ZIP.getExporter().promptForExport());
|
saveAsZip.addActionListener(arg0 -> Export.ZIP.getExporter().promptForExport());
|
||||||
decompileSaveAll.addActionListener(arg0 -> ResourceDecompiling.decompileSaveAll());
|
decompileSaveAll.addActionListener(arg0 -> ResourceDecompiling.decompileSaveAll());
|
||||||
decompileSaveOpened.addActionListener(arg0 -> ResourceDecompiling.decompileSaveOpenedOnly());
|
decompileSaveOpened.addActionListener(arg0 -> ResourceDecompiling.decompileSaveOpenedOnly());
|
||||||
about.addActionListener(arg0 -> aboutWindow.setVisible(true));
|
about.addActionListener(arg0 -> new AboutWindow().setVisible(true));
|
||||||
exit.addActionListener(arg0 -> askBeforeExiting());
|
exit.addActionListener(arg0 -> askBeforeExiting());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,8 +381,8 @@ public class MainViewerGUI extends JFrame
|
||||||
settingsMainMenu.add(setOptionalLibrary);
|
settingsMainMenu.add(setOptionalLibrary);
|
||||||
settingsMainMenu.add(setJavac);
|
settingsMainMenu.add(setJavac);
|
||||||
settingsMainMenu.add(new JSeparator());
|
settingsMainMenu.add(new JSeparator());
|
||||||
fontSpinner.setPreferredSize(new Dimension(42, 20));
|
fontSpinner.setPreferredSize(new Dimension(60, 24));
|
||||||
fontSpinner.setSize(new Dimension(42, 20));
|
fontSpinner.setMinimumSize(new Dimension(60, 24));
|
||||||
fontSpinner.setModel(new SpinnerNumberModel(12, 1, null, 1));
|
fontSpinner.setModel(new SpinnerNumberModel(12, 1, null, 1));
|
||||||
fontSize.add(fontSpinner);
|
fontSize.add(fontSpinner);
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package the.bytecode.club.bytecodeviewer.gui.components;
|
package the.bytecode.club.bytecodeviewer.gui.components;
|
||||||
|
|
||||||
import java.awt.CardLayout;
|
import java.awt.*;
|
||||||
import java.awt.Color;
|
import java.io.IOException;
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.Toolkit;
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
|
|
||||||
|
import the.bytecode.club.bootloader.InitialBootScreen;
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
|
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||||
import the.bytecode.club.bytecodeviewer.Resources;
|
import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
|
|
||||||
import static the.bytecode.club.bytecodeviewer.Configuration.*;
|
import static the.bytecode.club.bytecodeviewer.Configuration.*;
|
||||||
|
@ -32,79 +33,33 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The about frame.
|
* The about frame
|
||||||
*
|
*
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class AboutWindow extends JFrame
|
public class AboutWindow extends JFrame
|
||||||
{
|
{
|
||||||
JTextArea textArea = new JTextArea();
|
|
||||||
|
|
||||||
public AboutWindow()
|
public AboutWindow()
|
||||||
{
|
{
|
||||||
this.setIconImages(Resources.iconList);
|
this.setIconImages(Resources.iconList);
|
||||||
setSize(Toolkit.getDefaultToolkit().getScreenSize());
|
setSize(InitialBootScreen.getSafeSize());
|
||||||
setType(Type.UTILITY);
|
|
||||||
setTitle("Bytecode Viewer - About - https://bytecodeviewer.com | https://the.bytecode.club");
|
setTitle("Bytecode Viewer - About - https://bytecodeviewer.com | https://the.bytecode.club");
|
||||||
getContentPane().setLayout(new CardLayout(0, 0));
|
getContentPane().setLayout(new CardLayout(0, 0));
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane();
|
JScrollPane scrollPane = new JScrollPane();
|
||||||
getContentPane().add(scrollPane, "name_845520934713596");
|
getContentPane().add(scrollPane);
|
||||||
textArea.setWrapStyleWord(true);
|
|
||||||
textArea.setEnabled(false);
|
try
|
||||||
textArea.setDisabledTextColor(Color.BLACK);
|
{
|
||||||
scrollPane.setViewportView(textArea);
|
scrollPane.setViewportView(HTMLPane.fromResource(language.getHTMLPath("intro")));
|
||||||
this.setResizable(false);
|
}
|
||||||
this.setLocationRelativeTo(null);
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
this.setLocationRelativeTo(null);
|
||||||
public void setVisible(boolean b)
|
|
||||||
{
|
|
||||||
super.setVisible(b);
|
|
||||||
textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int) BytecodeViewer.viewer.fontSpinner.getValue()));
|
|
||||||
textArea.setText("Bytecode Viewer " + VERSION + " is an open source program developed and " +
|
|
||||||
"maintained by Konloch (konloch@gmail.com) 100% free and open sourced licensed under GPL v3 " +
|
|
||||||
"CopyLeft" + nl + nl +
|
|
||||||
"Settings:" + nl +
|
|
||||||
" Preview Copy: " + PREVIEW_COPY + nl +
|
|
||||||
" Fat Jar: " + FAT_JAR + nl +
|
|
||||||
" Java: " + java + nl +
|
|
||||||
" Javac: " + javac + nl +
|
|
||||||
" BCV Dir: " + getBCVDirectory() + nl +
|
|
||||||
" Python 2.7 (or PyPy): " + python + nl +
|
|
||||||
" Python 3.X (or PyPy): " + python3 + nl +
|
|
||||||
" RT.jar:" + rt + nl +
|
|
||||||
" Optional Lib: " + library + nl +
|
|
||||||
" BCV Krakatau: v" + krakatauVersion + nl +
|
|
||||||
" Krakatau Dir: " + krakatauWorkingDirectory + nl +
|
|
||||||
" BCV Enjarify: v" + enjarifyVersion + nl +
|
|
||||||
" Enjarify Dir: " + enjarifyWorkingDirectory + nl + nl +
|
|
||||||
"Command Line Input:" + nl +
|
|
||||||
" -help Displays the help menu" + nl +
|
|
||||||
" -list Displays the available decompilers" + nl +
|
|
||||||
" -decompiler <decompiler> Selects the decompiler, procyon by default" + nl +
|
|
||||||
" -i <input file> Selects the input file (Jar, Class, APK, ZIP, DEX all work " +
|
|
||||||
"automatically)" + nl +
|
|
||||||
" -o <output file> Selects the output file (Java or Java-Bytecode)" + nl +
|
|
||||||
" -t <target classname> Must either be the fully qualified classname or \"all\" to decompile" +
|
|
||||||
" all as zip" + nl +
|
|
||||||
" -nowait Doesn't wait for the user to read the CLI messages" + nl + nl +
|
|
||||||
"Keybinds:" + nl +
|
|
||||||
" CTRL + O: Open/add new jar/class/apk" + nl +
|
|
||||||
" CTLR + N: Reset the workspace" + nl +
|
|
||||||
" CTRL + W: Closes the currently opened tab" + nl +
|
|
||||||
" CTRL + T: Compile" + nl +
|
|
||||||
" CTRL + S: Save classes as zip" + nl +
|
|
||||||
" CTRL + R: Run (EZ-Inject) - dynamically load the classes and invoke a main class" +
|
|
||||||
"\r\n\r\nCode from various projects has been used, including but not limited to:\r\n J-RET by " +
|
|
||||||
"WaterWolf\r\n JHexPane by Sam Koivu\r\n RSynaxPane by Robert Futrell\r\n Commons IO by " +
|
|
||||||
"Apache\r\n ASM by OW2\r\n FernFlower by Stiver\r\n Procyon by Mstrobel\r\n CFR by Lee " +
|
|
||||||
"Benfield\r\n CFIDE by Bibl\r\n Smali by JesusFreke\r\n Dex2Jar by pxb1..?\r\n Krakatau by " +
|
|
||||||
"Storyyeller\r\n JD-GUI + JD-Core by The Java-Decompiler Team\r\n Enjarify by " +
|
|
||||||
"Storyyeller\r\n\r\nIf you're interested in Java Reverse Engineering, join The Bytecode Club - " +
|
|
||||||
"https://the.bytecode.club");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final long serialVersionUID = -8230501978224923296L;
|
private static final long serialVersionUID = -8230501978224923296L;
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
package the.bytecode.club.bytecodeviewer.gui.components;
|
||||||
|
|
||||||
|
import the.bytecode.club.bootloader.InitialBootScreen;
|
||||||
|
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.text.html.HTMLEditorKit;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Konloch
|
||||||
|
* @since 7/7/2021
|
||||||
|
*/
|
||||||
|
public class HTMLPane extends JEditorPane
|
||||||
|
{
|
||||||
|
private HTMLPane()
|
||||||
|
{
|
||||||
|
setEditorKit(new HTMLEditorKit());
|
||||||
|
setEditable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HTMLPane fromResource(String resourcePath) throws IOException
|
||||||
|
{
|
||||||
|
return fromString(convertStreamToString(InitialBootScreen.class.getClassLoader().getResourceAsStream(resourcePath)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HTMLPane fromString(String text)
|
||||||
|
{
|
||||||
|
HTMLPane pane = new HTMLPane();
|
||||||
|
|
||||||
|
text = text.replace("{previewCopy}", String.valueOf(PREVIEW_COPY));
|
||||||
|
text = text.replace("{fatJar}", String.valueOf(FAT_JAR));
|
||||||
|
text = text.replace("{java}", Configuration.java);
|
||||||
|
text = text.replace("{javac}", Configuration.javac);
|
||||||
|
text = text.replace("{bcvDir}", BCVDir.getAbsolutePath());
|
||||||
|
text = text.replace("{python}", Configuration.python);
|
||||||
|
text = text.replace("{python3}", Configuration.python3);
|
||||||
|
text = text.replace("{rt}", Configuration.rt);
|
||||||
|
text = text.replace("{lib}", Configuration.library);
|
||||||
|
text = text.replace("{krakatauVersion}", krakatauVersion);
|
||||||
|
text = text.replace("{krakatauDir}", krakatauWorkingDirectory);
|
||||||
|
text = text.replace("{enjarifyVersion}", enjarifyVersion);
|
||||||
|
text = text.replace("{enjarifyDir}", enjarifyWorkingDirectory);
|
||||||
|
|
||||||
|
pane.setText(text);
|
||||||
|
pane.setCaretPosition(0);
|
||||||
|
|
||||||
|
return pane;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String convertStreamToString(java.io.InputStream is) throws IOException
|
||||||
|
{
|
||||||
|
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
|
||||||
|
String string = s.hasNext() ? s.next() : "";
|
||||||
|
is.close();
|
||||||
|
s.close();
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ import the.bytecode.club.bytecodeviewer.gui.components.SearchableRSyntaxTextArea
|
||||||
import the.bytecode.club.bytecodeviewer.gui.components.SystemConsole;
|
import the.bytecode.club.bytecodeviewer.gui.components.SystemConsole;
|
||||||
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ClassViewer;
|
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ClassViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.gui.util.PaneUpdaterThread;
|
import the.bytecode.club.bytecodeviewer.gui.util.PaneUpdaterThread;
|
||||||
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
||||||
import the.bytecode.club.bytecodeviewer.util.JarUtils;
|
import the.bytecode.club.bytecodeviewer.util.JarUtils;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
@ -77,6 +78,7 @@ public class ResourceViewPanel
|
||||||
SystemConsole errConsole = new SystemConsole("Java Compile Issues");
|
SystemConsole errConsole = new SystemConsole("Java Compile Issues");
|
||||||
errConsole.setText("Error compiling class: " + viewer.cn.name +
|
errConsole.setText("Error compiling class: " + viewer.cn.name +
|
||||||
nl + "Keep in mind most decompilers cannot produce compilable classes" +
|
nl + "Keep in mind most decompilers cannot produce compilable classes" +
|
||||||
|
nl + nl + TranslatedStrings.SUGGESTED_FIX_COMPILER_ERROR +
|
||||||
nl + nl);
|
nl + nl);
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|
|
@ -39,17 +39,17 @@ import java.util.HashSet;
|
||||||
*/
|
*/
|
||||||
public enum Language
|
public enum Language
|
||||||
{
|
{
|
||||||
ARABIC("/translations/arabic.json", "عربى", "ab"),
|
ARABIC("/translations/arabic.json", "عربى", "English", "ab"),
|
||||||
ENGLISH("/translations/english.json", "English", "en"),
|
ENGLISH("/translations/english.json", "English", "English", "en"),
|
||||||
FRENCH("/translations/french.json", "Français", "fr"),
|
FRENCH("/translations/french.json", "Français", "English", "fr"),
|
||||||
GERMAN("/translations/german.json", "Deutsch", "de"),
|
GERMAN("/translations/german.json", "Deutsch", "German", "de"),
|
||||||
//HINDI("/translations/hindi.json", "हिंदी", "hi"),
|
//HINDI("/translations/hindi.json", "हिंदी", "English", "hi"),
|
||||||
JAPANESE("/translations/japanese.json", "日本語", "ja"),
|
JAPANESE("/translations/japanese.json", "日本語", "English", "ja"),
|
||||||
MALAY("/translations/malay.json", "Bahasa Melayu", "ms"),
|
MALAY("/translations/malay.json", "Bahasa Melayu", "English", "ms"),
|
||||||
MANDARIN("/translations/mandarin.json", "普通话", "zh_cn", "zh"),
|
MANDARIN("/translations/mandarin.json", "普通话", "Mandarin", "zh_cn", "zh"),
|
||||||
PORTUGUESE("/translations/portuguese.json", "Português", "pt"),
|
PORTUGUESE("/translations/portuguese.json", "Português", "English", "pt"),
|
||||||
RUSSIAN("/translations/russian.json", "русский", "ru"),
|
RUSSIAN("/translations/russian.json", "русский", "English", "ru"),
|
||||||
SPANISH("/translations/spanish.json", "Español", "es"),
|
SPANISH("/translations/spanish.json", "Español", "English", "es"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private static final HashedMap<String, Language> languageCodeLookup;
|
private static final HashedMap<String, Language> languageCodeLookup;
|
||||||
|
@ -64,13 +64,15 @@ public enum Language
|
||||||
|
|
||||||
private final String resourcePath;
|
private final String resourcePath;
|
||||||
private final String readableName;
|
private final String readableName;
|
||||||
|
private final String htmlIdentifier;
|
||||||
private final HashSet<String> languageCode;
|
private final HashSet<String> languageCode;
|
||||||
|
|
||||||
Language(String resourcePath, String readableName, String... languageCodes)
|
Language(String resourcePath, String readableName, String htmlIdentifier, String... languageCodes)
|
||||||
{
|
{
|
||||||
this.resourcePath = resourcePath;
|
this.resourcePath = resourcePath;
|
||||||
this.languageCode = new HashSet<>(Arrays.asList(languageCodes));
|
|
||||||
this.readableName = readableName;
|
this.readableName = readableName;
|
||||||
|
this.htmlIdentifier = htmlIdentifier.toLowerCase();
|
||||||
|
this.languageCode = new HashSet<>(Arrays.asList(languageCodes));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadLanguage() throws IOException
|
public void loadLanguage() throws IOException
|
||||||
|
@ -92,9 +94,16 @@ public enum Language
|
||||||
//update translation text value
|
//update translation text value
|
||||||
text.value = translationMap.get(text.key);
|
text.value = translationMap.get(text.key);
|
||||||
|
|
||||||
|
//translate constant strings
|
||||||
|
try {
|
||||||
|
TranslatedStrings str = TranslatedStrings.valueOf(text.key);
|
||||||
|
str.setText(text.value);
|
||||||
|
} catch (IllegalArgumentException e) { }
|
||||||
|
|
||||||
//check if translation key has been assigned to a component,
|
//check if translation key has been assigned to a component,
|
||||||
//on fail print an error alerting the devs
|
//on fail print an error alerting the devs
|
||||||
if(translation.getTranslatedComponent().runOnUpdate.isEmpty())
|
if(translation.getTranslatedComponent().runOnUpdate.isEmpty()
|
||||||
|
&& TranslatedStrings.nameSet.contains(translation.name()))
|
||||||
{
|
{
|
||||||
System.err.println("Translation Reference " + translation.name() + " is missing component attachment, skipping...");
|
System.err.println("Translation Reference " + translation.name() + " is missing component attachment, skipping...");
|
||||||
continue;
|
continue;
|
||||||
|
@ -126,7 +135,7 @@ public enum Language
|
||||||
existingKeys.add(t.name());
|
existingKeys.add(t.name());
|
||||||
|
|
||||||
for(String key : translationMap.keySet())
|
for(String key : translationMap.keySet())
|
||||||
if(!existingKeys.contains(key) && !key.startsWith("TODO"))
|
if(!existingKeys.contains(key))
|
||||||
System.err.println(key + ",");
|
System.err.println(key + ",");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +154,11 @@ public enum Language
|
||||||
return readableName;
|
return readableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getHTMLPath(String identifier)
|
||||||
|
{
|
||||||
|
return "translations/html/" + identifier + "." + htmlIdentifier + ".html";
|
||||||
|
}
|
||||||
|
|
||||||
public static HashedMap<String, Language> getLanguageCodeLookup()
|
public static HashedMap<String, Language> getLanguageCodeLookup()
|
||||||
{
|
{
|
||||||
return languageCodeLookup;
|
return languageCodeLookup;
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
package the.bytecode.club.bytecodeviewer.translation;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant-like strings not associated with any specific JComponent
|
||||||
|
*
|
||||||
|
* @author Konloch
|
||||||
|
* @since 7/6/2021
|
||||||
|
*/
|
||||||
|
|
||||||
|
public enum TranslatedStrings
|
||||||
|
{
|
||||||
|
JAVA("Java"),
|
||||||
|
PROCYON("Procyon"),
|
||||||
|
CFR("CFR"),
|
||||||
|
FERNFLOWER("FernFlower"),
|
||||||
|
KRAKATAU("Krakatau"),
|
||||||
|
JDGUI("JD-GUI"),
|
||||||
|
JADX("JADX"),
|
||||||
|
SMALI("Smali"),
|
||||||
|
SMALI_DEX("Smali/DEX"),
|
||||||
|
HEXCODE("Hexcode"),
|
||||||
|
BYTECODE("Bytecode"),
|
||||||
|
ASM_TEXTIFY("ASM Textify"),
|
||||||
|
ERROR("Error"),
|
||||||
|
DISASSEMBLER("Disassembler"),
|
||||||
|
SUGGESTED_FIX_DECOMPILER_ERROR("Suggested Fix: Click refresh class, if it fails again try another decompiler."),
|
||||||
|
SUGGESTED_FIX_COMPILER_ERROR("Suggested Fix: Try View>Pane>Krakatau>Bytecode and enable Editable."),
|
||||||
|
;
|
||||||
|
|
||||||
|
public static final HashSet<String> nameSet = new HashSet<>();
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
for(TranslatedStrings s : values())
|
||||||
|
nameSet.add(s.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
TranslatedStrings(String text) {this.text = text;}
|
||||||
|
|
||||||
|
public void setText(String text)
|
||||||
|
{
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText()
|
||||||
|
{
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return getText();
|
||||||
|
}
|
||||||
|
}
|
|
@ -114,14 +114,19 @@ public enum Translation
|
||||||
DEX_TO_JAR,
|
DEX_TO_JAR,
|
||||||
ENJARIFY,
|
ENJARIFY,
|
||||||
PROCYON,
|
PROCYON,
|
||||||
CRF,
|
CFR,
|
||||||
FERNFLOWER,
|
FERNFLOWER,
|
||||||
KRAKATAU,
|
KRAKATAU,
|
||||||
JDGUI,
|
JDGUI,
|
||||||
JADX,
|
JADX,
|
||||||
SMALI_DEX,
|
SMALI_DEX,
|
||||||
|
SMALI,
|
||||||
|
DISASSEMBLER,
|
||||||
|
ERROR,
|
||||||
|
SUGGESTED_FIX_DECOMPILER_ERROR,
|
||||||
|
SUGGESTED_FIX_COMPILER_ERROR,
|
||||||
PROCYON_DECOMPILER,
|
PROCYON_DECOMPILER,
|
||||||
CRF_DECOMPILER,
|
CFR_DECOMPILER,
|
||||||
FERNFLOWER_DECOMPILER,
|
FERNFLOWER_DECOMPILER,
|
||||||
JADX_DECOMPILER,
|
JADX_DECOMPILER,
|
||||||
JD_DECOMPILER,
|
JD_DECOMPILER,
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "تعيين Javac للتنفيذ",
|
"SET_JAVAC_EXECUTABLE": "تعيين Javac للتنفيذ",
|
||||||
"JAVA": "جافا",
|
"JAVA": "جافا",
|
||||||
"PROCYON": "بروسيون",
|
"PROCYON": "بروسيون",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "نبات السرخس",
|
"FERNFLOWER": "نبات السرخس",
|
||||||
"KRAKATAU": "كراكاتاو",
|
"KRAKATAU": "كراكاتاو",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Allatori سلسلة ديكريبتر",
|
"ALLATORI_STRING_DECRYPTER": "Allatori سلسلة ديكريبتر",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "ZStringArray ديكريبتر",
|
"ZSTRINGARRAY_DECRYPTER": "ZStringArray ديكريبتر",
|
||||||
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
||||||
"CRF_DECOMPILER": "CFR Decompiler",
|
"CFR_DECOMPILER": "CFR Decompiler",
|
||||||
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
||||||
"JADX_DECOMPILER": "JADX Decompiler",
|
"JADX_DECOMPILER": "JADX Decompiler",
|
||||||
"JD_DECOMPILER": "JD-GUI Decompiler",
|
"JD_DECOMPILER": "JD-GUI Decompiler",
|
||||||
|
|
|
@ -66,11 +66,12 @@
|
||||||
|
|
||||||
"JAVA": "Java",
|
"JAVA": "Java",
|
||||||
"PROCYON": "Procyon",
|
"PROCYON": "Procyon",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "FernFlower",
|
"FERNFLOWER": "FernFlower",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
"JADX": "JADX",
|
"JADX": "JADX",
|
||||||
|
"SMALI": "Smali",
|
||||||
"SMALI_DEX": "Smali/Dex",
|
"SMALI_DEX": "Smali/Dex",
|
||||||
"HEXCODE": "Hexcode",
|
"HEXCODE": "Hexcode",
|
||||||
"BYTECODE": "Bytecode",
|
"BYTECODE": "Bytecode",
|
||||||
|
@ -96,11 +97,16 @@
|
||||||
|
|
||||||
|
|
||||||
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
||||||
"CRF_DECOMPILER": "CFR Decompiler",
|
"CFR_DECOMPILER": "CFR Decompiler",
|
||||||
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
||||||
"JADX_DECOMPILER": "JADX Decompiler",
|
"JADX_DECOMPILER": "JADX Decompiler",
|
||||||
"JD_DECOMPILER": "JD-GUI Decompiler",
|
"JD_DECOMPILER": "JD-GUI Decompiler",
|
||||||
"BYTECODE_DISASSEMBLER": "Bytecode Disassembler",
|
"BYTECODE_DISASSEMBLER": "Bytecode Disassembler",
|
||||||
|
"DISASSEMBLER": "Disassembler",
|
||||||
|
|
||||||
|
"ERROR": "Error",
|
||||||
|
"SUGGESTED_FIX_DECOMPILER_ERROR": "Suggested Fix: Click refresh class, if it fails again try another decompiler.",
|
||||||
|
"SUGGESTED_FIX_COMPILER_ERROR": "Suggested Fix: Try View>Pane>Krakatau>Bytecode and enable Editable.",
|
||||||
|
|
||||||
"FILES": "Files",
|
"FILES": "Files",
|
||||||
"QUICK_FILE_SEARCH_NO_FILE_EXTENSION": "Quick file search (no file extension)",
|
"QUICK_FILE_SEARCH_NO_FILE_EXTENSION": "Quick file search (no file extension)",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "Définir l'exécutable Javac",
|
"SET_JAVAC_EXECUTABLE": "Définir l'exécutable Javac",
|
||||||
"JAVA": "Java",
|
"JAVA": "Java",
|
||||||
"PROCYON": "Procyon",
|
"PROCYON": "Procyon",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "FougèreFleur",
|
"FERNFLOWER": "FougèreFleur",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Décrypteur de chaînes Allatori",
|
"ALLATORI_STRING_DECRYPTER": "Décrypteur de chaînes Allatori",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "Décrypteur ZStringArray",
|
"ZSTRINGARRAY_DECRYPTER": "Décrypteur ZStringArray",
|
||||||
"PROCYON_DECOMPILER": "Décompilateur Procyon",
|
"PROCYON_DECOMPILER": "Décompilateur Procyon",
|
||||||
"CRF_DECOMPILER": "Décompilateur CFR",
|
"CFR_DECOMPILER": "Décompilateur CFR",
|
||||||
"FERNFLOWER_DECOMPILER": "Décompilateur FernFlower",
|
"FERNFLOWER_DECOMPILER": "Décompilateur FernFlower",
|
||||||
"JADX_DECOMPILER": "Décompilateur JADX",
|
"JADX_DECOMPILER": "Décompilateur JADX",
|
||||||
"JD_DECOMPILER": "Décompilateur JD-GUI",
|
"JD_DECOMPILER": "Décompilateur JD-GUI",
|
||||||
|
|
|
@ -86,7 +86,7 @@
|
||||||
|
|
||||||
"TODO5": "Diese existieren nur als Key/Value-Paare",
|
"TODO5": "Diese existieren nur als Key/Value-Paare",
|
||||||
"PROCYON_DECOMPILER": "Procyon-Dekompilierer",
|
"PROCYON_DECOMPILER": "Procyon-Dekompilierer",
|
||||||
"CRF_DECOMPILER": "CFR-Dekompilierer",
|
"CFR_DECOMPILER": "CFR-Dekompilierer",
|
||||||
"FERNFLOWER_DECOMPILER": "FernFlower-Dekompilierer",
|
"FERNFLOWER_DECOMPILER": "FernFlower-Dekompilierer",
|
||||||
"JADX_DECOMPILER": "JADX-Dekompilierer",
|
"JADX_DECOMPILER": "JADX-Dekompilierer",
|
||||||
"JD_DECOMPILER": "JD-GUI-Dekompilierer",
|
"JD_DECOMPILER": "JD-GUI-Dekompilierer",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "जावैक निष्पादन योग्य सेट करें",
|
"SET_JAVAC_EXECUTABLE": "जावैक निष्पादन योग्य सेट करें",
|
||||||
"JAVA": "जावा",
|
"JAVA": "जावा",
|
||||||
"PROCYON": "प्रोसिओन",
|
"PROCYON": "प्रोसिओन",
|
||||||
"CRF": "सीएफआर",
|
"CFR": "सीएफआर",
|
||||||
"FERNFLOWER": "फर्नफ्लावर",
|
"FERNFLOWER": "फर्नफ्लावर",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "जद-जीयूआई",
|
"JDGUI": "जद-जीयूआई",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "एलाटोरी स्ट्रिंग डिक्रिप्टर",
|
"ALLATORI_STRING_DECRYPTER": "एलाटोरी स्ट्रिंग डिक्रिप्टर",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "ZStringArray डिक्रिप्टर",
|
"ZSTRINGARRAY_DECRYPTER": "ZStringArray डिक्रिप्टर",
|
||||||
"PROCYON_DECOMPILER": "प्रोसीओन डीकंपाइलर",
|
"PROCYON_DECOMPILER": "प्रोसीओन डीकंपाइलर",
|
||||||
"CRF_DECOMPILER": "सीएफआर डीकंपाइलर",
|
"CFR_DECOMPILER": "सीएफआर डीकंपाइलर",
|
||||||
"FERNFLOWER_DECOMPILER": "फर्नाफ्लावर डीकंपेलर",
|
"FERNFLOWER_DECOMPILER": "फर्नाफ्लावर डीकंपेलर",
|
||||||
"JADX_DECOMPILER": "JADX डीकंपेलर",
|
"JADX_DECOMPILER": "JADX डीकंपेलर",
|
||||||
"JD_DECOMPILER": "जद-जीयूआई डीकंपेलर",
|
"JD_DECOMPILER": "जद-जीयूआई डीकंपेलर",
|
||||||
|
|
|
@ -1,9 +1,29 @@
|
||||||
<html>Bytecode Viewer (BCV) was designed to be extremely user and beginner friendly, because of this almost everything
|
<html>
|
||||||
is accessible through an interface, settings, tools, etc. This means if you give BCV a try you should get the gist of it
|
<h2>About</h2>
|
||||||
can do, however for those who don't want to run BCV until they're convinced they should use it, below is a complete list
|
|
||||||
of features BCV has, and what they do.
|
|
||||||
|
|
||||||
<h2>Command Line Interface (CLI):</h2>
|
Bytecode Viewer (BCV) was designed to be extremely user and beginner friendly, because of this almost everything
|
||||||
|
is accessible through an interface, settings, tools, etc.
|
||||||
|
|
||||||
|
<br><br>To start drag your Jar/APK/Class file into the resource list.
|
||||||
|
|
||||||
|
<h2>Settings</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Preview Copy: {previewCopy}</li>
|
||||||
|
<li>Fat Jar: {farJar}</li>
|
||||||
|
<li>Java: {java}</li>
|
||||||
|
<li>Javac: {javac}</li>
|
||||||
|
<li>BCV Dir: {bcvDir}</li>
|
||||||
|
<li>Python 2.7 (or PyPy): {python}</li>
|
||||||
|
<li>Python 3.X (or PyPy): {python3}</li>
|
||||||
|
<li>RT.jar: {rt}</li>
|
||||||
|
<li>Optional Lib: {lib}</li>
|
||||||
|
<li>BCV Krakatau: v{krakatauVersion}</li>
|
||||||
|
<li>Krakatau Dir: {krakatauDir}</li>
|
||||||
|
<li>BCV Enjarify: v{enjarifyVersion}</li>
|
||||||
|
<li>Enjarify Dir: {enjarifyDir}</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Command Line Interface (CLI)</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li> -help Displays the help menu</li>
|
<li> -help Displays the help menu</li>
|
||||||
<li> -list Displays the available decompilers</li>
|
<li> -list Displays the available decompilers</li>
|
||||||
|
@ -14,7 +34,7 @@ of features BCV has, and what they do.
|
||||||
<li> -nowait Doesn't wait for the user to read the CLI messages</li>
|
<li> -nowait Doesn't wait for the user to read the CLI messages</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>File:</h2>
|
<h2>File</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Add (Ctrl + O) - If you add a jar/zip BCV will unzip it, if you add an APK or DEX file, BCV will run dex2jar
|
<li>Add (Ctrl + O) - If you add a jar/zip BCV will unzip it, if you add an APK or DEX file, BCV will run dex2jar
|
||||||
then run the jar input process.
|
then run the jar input process.
|
||||||
|
@ -37,7 +57,7 @@ of features BCV has, and what they do.
|
||||||
<li>Exit - Closes BCV.</li>
|
<li>Exit - Closes BCV.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>View Panes:</h2>
|
<h2>View Panes</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Editable - Defines if that viewing pane will be editable.</li>
|
<li>Editable - Defines if that viewing pane will be editable.</li>
|
||||||
<li>None - Nothing will be displayed.</li>
|
<li>None - Nothing will be displayed.</li>
|
||||||
|
@ -52,7 +72,7 @@ of features BCV has, and what they do.
|
||||||
<li>Hexcode - Shows the classfile in a hex viewer. Not Editable.</li>
|
<li>Hexcode - Shows the classfile in a hex viewer. Not Editable.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Settings:</h2>
|
<h2>Settings</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Compile On Save - If selected whenever you do one of the File>Save * functions it will try to compile before it
|
<li>Compile On Save - If selected whenever you do one of the File>Save * functions it will try to compile before it
|
||||||
saves.
|
saves.
|
||||||
|
@ -74,7 +94,7 @@ of features BCV has, and what they do.
|
||||||
<li>Set JRE RT Library - Set the JRE RT library for Krakatau decompiler.</li>
|
<li>Set JRE RT Library - Set the JRE RT library for Krakatau decompiler.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Plugins:</h2>
|
<h2>Plugins</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Open Plugin - Open a .java plugin created for BCV.</li>
|
<li>Open Plugin - Open a .java plugin created for BCV.</li>
|
||||||
<li>Recent Plugins - Last 25 plugins you've opened with BCV.</li>
|
<li>Recent Plugins - Last 25 plugins you've opened with BCV.</li>
|
||||||
|
@ -82,20 +102,36 @@ of features BCV has, and what they do.
|
||||||
<li>Malicious Code Scanner - Allows you to define what to search for, and outputs what it found.</li>
|
<li>Malicious Code Scanner - Allows you to define what to search for, and outputs what it found.</li>
|
||||||
<li>Show Main Methods - Detects and outputs all of the public static void main(String[]) functions.</li>
|
<li>Show Main Methods - Detects and outputs all of the public static void main(String[]) functions.</li>
|
||||||
<li>Show All Strings - Grabs then outputs all of the strings in every classfile.</li>
|
<li>Show All Strings - Grabs then outputs all of the strings in every classfile.</li>
|
||||||
<li>Replace Strings - Allows you to do a simple permanent .replace on the classfile strings, very useful for URL
|
<li>Replace Strings - Allows you to do a simple permanent .replace on the classfile strings, very useful for URL swapping.</li>
|
||||||
swapping.
|
|
||||||
</li>
|
|
||||||
<li>Allatori String Decrypter - Decrypts the Allatori obfuscated/encrypted strings.</li>
|
<li>Allatori String Decrypter - Decrypts the Allatori obfuscated/encrypted strings.</li>
|
||||||
<li>ZKM String Decrypter - Decrypts the ZKM obfuscated/encrypted strings.</li>
|
<li>ZKM String Decrypter - Decrypts the ZKM obfuscated/encrypted strings.</li>
|
||||||
<li>ZStringArray String Decrypter - Decrypts the ZStringArray obfuscated/encrypted strings.</li>
|
<li>ZStringArray String Decrypter - Decrypts the ZStringArray obfuscated/encrypted strings.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Notes:</h2>
|
<h2>Code from various projects has been used, including but not limited to</h2>
|
||||||
|
<ul>
|
||||||
|
<li>J-RET by WaterWolf</li>
|
||||||
|
<li>JHexPane by Sam Koivu</li>
|
||||||
|
<li>RSynaxPane by Robert Futrell</li>
|
||||||
|
<li>Commons IO by Apache</li>
|
||||||
|
<li>ASM by OW2</li>
|
||||||
|
<li>FernFlower by Stiver</li>
|
||||||
|
<li>Procyon by Mstrobel</li>
|
||||||
|
<li>CFR by Lee Benfield</li>
|
||||||
|
<li>CFIDE by Bibl</li>
|
||||||
|
<li>Smali by JesusFreke</li>
|
||||||
|
<li>Dex2Jar by pxb1988</li>
|
||||||
|
<li>Krakatau by Storyyeller</li>
|
||||||
|
<li>JD-GUI + JD-Core by The Java-Decompiler Team</li>
|
||||||
|
<li>Enjarify by Storyyeller</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Notes</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>If BCV fails to boot simply append -clean as an argument to clean the lib directory.</li>
|
<li>If BCV fails to boot simply append -clean as an argument to clean the lib directory.</li>
|
||||||
<li>Relax and take notes, while I take tokes of the marijuana smoke.</li>
|
<li>Relax and take notes, while I take tokes of the marijuana smoke.</li>
|
||||||
<li>BCV was created out of love for Java Reverse engineering.</li>
|
<li>BCV was created out of love for Java Reverse engineering.</li>
|
||||||
<li>Bytecode Viewer's Homepage is <a href="http://bytecodeviewer.com">http://bytecodeviewer.com</a></li>
|
<li>Bytecode Viewer's Homepage is <a href="https://bytecodeviewer.com">https://bytecodeviewer.com</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</html>
|
</html>
|
137
src/main/resources/translations/html/intro.german.html
Normal file
137
src/main/resources/translations/html/intro.german.html
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
<html>
|
||||||
|
<h2>Über uns</h2>
|
||||||
|
|
||||||
|
Der Bytecode Viewer (BCV) wurde so konzipiert, dass er extrem benutzer- und einsteigerfreundlich ist, deshalb ist fast alles
|
||||||
|
ist über eine Schnittstelle zugänglich, Einstellungen, Werkzeuge, etc.
|
||||||
|
|
||||||
|
<br><br>Zum Starten ziehen Sie Ihre Jar/APK/Class-Datei in die Ressourcenliste.
|
||||||
|
|
||||||
|
<h2>Einstellungen</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Preview Copy: {previewCopy}</li>
|
||||||
|
<li>Fat Jar: {farJar}</li>
|
||||||
|
<li>Java: {java}</li>
|
||||||
|
<li>Javac: {javac}</li>
|
||||||
|
<li>BCV Dir: {bcvDir}</li>
|
||||||
|
<li>Python 2.7 (oder PyPy): {python}</li>
|
||||||
|
<li>Python 3.X (oder PyPy): {python3}</li>
|
||||||
|
<li>RT.jar: {rt}</li>
|
||||||
|
<li>Optional Lib: {lib}</li>
|
||||||
|
<li>BCV Krakatau: v{krakatauVersion}</li>
|
||||||
|
<li>Krakatau Dir: {krakatauDir}</li>
|
||||||
|
<li>BCV Enjarify: v{enjarifyVersion}</li>
|
||||||
|
<li>Enjarify Dir: {enjarifyDir}</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Befehlszeilenschnittstelle (CLI)</h2>
|
||||||
|
<ul>
|
||||||
|
<li> -help Zeigt das Hilfemenü an</li>
|
||||||
|
<li> -list Zeigt die verfügbaren Dekompilierer an</li>
|
||||||
|
<li> -decompiler [decompiler] Wählt den Decompiler aus, standardmäßig procyon</li>
|
||||||
|
<li> -i [input file] Wählt die Eingabedatei aus (Jar, Class, APK, ZIP, DEX funktionieren alle automatisch)</li>
|
||||||
|
<li> -o [Ausgabedatei] Wählt die Ausgabedatei aus (Java oder Java-Bytecode)</li>
|
||||||
|
<li> -t [target classname] Muss entweder der voll qualifizierte Klassenname sein oder "all", um alle als zip zu dekompilieren</li>
|
||||||
|
<li> -nowait Wartet nicht auf den Benutzer, um die CLI-Meldungen zu lesen</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Datei</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Hinzufügen (Strg + O) - Wenn Sie ein jar/zip hinzufügen, wird BCV es entpacken, wenn Sie eine APK- oder DEX-Datei hinzufügen, wird BCV dex2jar
|
||||||
|
und führt dann den Jar-Eingabeprozess aus.
|
||||||
|
</li>
|
||||||
|
<li>Neue Datei öffnen (Strg + L) - Öffnet die zuletzt geöffnete Datei erneut.</li>
|
||||||
|
<li>Neuer Arbeitsbereich (Strg + N) - Es löscht die geöffneten Jars/Ressourcen.</li>
|
||||||
|
<li>Ausführen (Strg + R) - Führt die Klassendateien, die Sie in BCV geladen haben, in einer sicheren, sandboxed JVM-Instanz aus, die Sie
|
||||||
|
vollständig debuggen können.
|
||||||
|
</li>
|
||||||
|
<li>Kompilieren (Strg + T) - Versucht, alle bearbeitbaren Bereiche, die Sie ausgewählt haben, zu kompilieren, wenn es sich um Java handelt, wird es mit
|
||||||
|
Ranino. Krakatau und *Smali verwenden ihre eigenen Assembler.
|
||||||
|
</li>
|
||||||
|
<li>Save As Jar - Exportiert die Klassendateien und geladenen Ressourcen als lauffähige Jar-Datei.</li>
|
||||||
|
<li>Speichern als DEX - Führen Sie jar2dex aus und exportieren Sie die Klassendateien als DEX.</li>
|
||||||
|
<li>Dateien speichern unter - Speichert alle Klassendateien und Ressourcen als Zip-Datei.</li>
|
||||||
|
<li>Java-Datei speichern unter - Speichert die aktuell geöffnete dekompilierte Klassendatei.</li>
|
||||||
|
<li>Java-Dateien speichern unter - Alle dekompilierten Klassendateien als Zip-Datei speichern.</li>
|
||||||
|
<li>Aktuelle Dateien - Die letzten 25 Dateien/Verzeichnisse, die Sie mit BCV geöffnet haben.</li>
|
||||||
|
<li>About - Ein kleines Informationsfenster über BCV.</li>
|
||||||
|
<li>Beenden - Schließt BCV.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Ansichtsfenster</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Bearbeitbar - Legt fest, ob dieses Ansichtsfenster bearbeitet werden kann.</li>
|
||||||
|
<li>Keine - Es wird nichts angezeigt.</li>
|
||||||
|
<li>Procyon - Dekompiliert mit Procyon Decompiler.</li>
|
||||||
|
<li>CFR - Dekompiliert mit dem CFR-Decompiler.</li>
|
||||||
|
<li>FernFlower - Dekompiliert mit dem FernFlower-Decompiler.</li>
|
||||||
|
<li>JD-GUI - Dekompiliert mit dem JD-GUI-Decompiler.</li>
|
||||||
|
<li>Krakatau Java - Dekompiliert mit dem Krakatau Decompiler.</li>
|
||||||
|
<li>Krakatau Bytecode - Disassembliert mit Krakatau Disassembler.</li>
|
||||||
|
<li>Smali - Disassembliert mit Smali.</li>
|
||||||
|
<li>Bytecode - Dekompiliert den Bytecode mit CFIDE. Nicht editierbar.</li>
|
||||||
|
<li>Hexcode - Zeigt die Klassendatei in einem Hex-Viewer an. Nicht editierbar.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Einstellungen</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Kompilieren beim Speichern - Wenn diese Option ausgewählt ist, wird jedes Mal, wenn Sie eine der Funktionen Datei>Speichern * ausführen, versucht, die Datei zu kompilieren, bevor sie
|
||||||
|
speichert.
|
||||||
|
</li>
|
||||||
|
<li>Beim Aktualisieren kompilieren - Wenn diese Option ausgewählt ist, wird bei jedem Aktualisieren kompiliert, bevor die Ressource/Klasse neu geladen wird.
|
||||||
|
</li>
|
||||||
|
<li>Aktualisierungsprüfung - Wenn ausgewählt, wird https://github.com/Konloch/bytecode-viewer abgefragt, um sicherzustellen, dass Sie die neueste Version haben.
|
||||||
|
Version haben.
|
||||||
|
</li>
|
||||||
|
<li>Auffrischen bei Ansichtsänderung - Wenn diese Option ausgewählt ist, werden bei jeder Änderung einer Option in den Ansichtsfenstern die
|
||||||
|
aktuell geöffneten Ressourcen/Klasse aktualisiert.
|
||||||
|
</li>
|
||||||
|
<li>APK-Ressourcen dekodieren - Wenn diese Option ausgewählt ist, wird beim Hinzufügen einer APK zuerst APKTool.jar ausgeführt, um die Ressourcen zu dekodieren.
|
||||||
|
Ressourcen zu dekodieren.
|
||||||
|
</li>
|
||||||
|
<li>Set Python 2.7 Executable - Setzen Sie das Python 2.7 Executable, wenn Sie möchten, dass Krakatau Decompiler/Disassembler/Assembler
|
||||||
|
funktionieren soll.
|
||||||
|
</li>
|
||||||
|
<li>Set JRE RT Library - Stellen Sie die JRE RT Library für Krakatau Decompiler ein.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Plugins</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Plugin öffnen - Öffnen Sie ein für BCV erstelltes .java-Plugin.</li>
|
||||||
|
<li>Recent Plugins - Die letzten 25 Plugins, die Sie mit BCV geöffnet haben.</li>
|
||||||
|
<li>Codefolgediagramm - Erstellt ein grobes Codefolgediagramm für die aktuell geöffnete Klassendatei.</li>
|
||||||
|
<li>Scanner für bösartigen Code - Ermöglicht es Ihnen, zu definieren, wonach gesucht werden soll, und gibt aus, was gefunden wurde.</li>
|
||||||
|
<li>Hauptmethoden anzeigen - Erkennt und gibt alle öffentlichen statischen void main(String[]) Funktionen aus.</li>
|
||||||
|
<li>Alle Zeichenketten anzeigen - Erkennt alle Zeichenketten in jeder Klassendatei und gibt sie aus.</li>
|
||||||
|
<li>Strings ersetzen - Ermöglicht ein einfaches, permanentes Ersetzen der Strings in der Klassendatei, sehr nützlich für URL-Swapping.</li>
|
||||||
|
<li>Allatori String Decrypter - Entschlüsselt die mit Allatori verdeckten/verschlüsselten Strings.</li>
|
||||||
|
<li>ZKM String Decrypter - Entschlüsselt die ZKM-verschleierten/verschlüsselten Strings.</li>
|
||||||
|
<li>ZStringArray String Decrypter - Entschlüsselt die ZStringArray-verschleierten/verschlüsselten Strings.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Es wurde Code aus verschiedenen Projekten verwendet, einschließlich, aber nicht beschränkt auf</h2>
|
||||||
|
<ul>
|
||||||
|
<li>J-RET von WaterWolf</li>
|
||||||
|
<li>JHexPane von Sam Koivu</li>
|
||||||
|
<li>RSynaxPane von Robert Futrell</li>
|
||||||
|
<li>Commons IO von Apache</li>
|
||||||
|
<li>ASM von OW2</li>
|
||||||
|
<li>FernFlower von Stiver</li>
|
||||||
|
<li>Procyon von Mstrobel</li>
|
||||||
|
<li>CFR von Lee Benfield</li>
|
||||||
|
<li>CFIDE von Bibl</li>
|
||||||
|
<li>Smali von JesusFreke</li>
|
||||||
|
<li>Dex2Jar von pxb1988</li>
|
||||||
|
<li>Krakatau von Storyyeller</li>
|
||||||
|
<li>JD-GUI + JD-Core von The Java-Decompiler Team</li>
|
||||||
|
<li>Enjarify von Storyyeller</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Hinweise</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Wenn BCV nicht bootet, fügen Sie einfach -clean als Argument an, um das lib-Verzeichnis zu bereinigen.</li>
|
||||||
|
<li>Ruhen Sie sich aus und machen Sie sich Notizen, während ich einen Schluck Marihuanarauch nehme.</li>
|
||||||
|
<li>BCV wurde aus Liebe zum Java Reverse Engineering entwickelt.</li>
|
||||||
|
<li>Die Homepage von Bytecode Viewer ist <a href="https://bytecodeviewer.com">https://bytecodeviewer.com</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</html>
|
135
src/main/resources/translations/html/intro.mandarin.html
Normal file
135
src/main/resources/translations/html/intro.mandarin.html
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
<html>
|
||||||
|
<h2>关于 </h2>
|
||||||
|
|
||||||
|
Bytecode Viewer (BCV)被设计成对用户和初学者非常友好,因此,几乎所有的东西都可以通过一个界面访问。
|
||||||
|
都可以通过一个界面、设置、工具等进行访问。
|
||||||
|
|
||||||
|
<br><br>开始时,将你的Jar/APK/Class文件拖到资源列表中。
|
||||||
|
|
||||||
|
<h2>设置</h2>
|
||||||
|
<ul>
|
||||||
|
<li>预览副本。{previewCopy}</li>
|
||||||
|
<li>Fat Jar。{farJar}</li>
|
||||||
|
<li>Java。{java}</li>
|
||||||
|
<li>Javac: {javac}</li>
|
||||||
|
<li>BCV Dir: {bcvDir}</li>
|
||||||
|
<li>Python 2.7 (或 PyPy): {python}</li>
|
||||||
|
<li>Python 3.X (or PyPy): {python3}</li>
|
||||||
|
<li>RT.jar。{rt}</li>
|
||||||
|
<li>可选的 Lib。{lib}</li>
|
||||||
|
<li>BCV Krakatau: v{krakatauVersion}</li>
|
||||||
|
<li>Krakatau Dir: {krakatauDir}</li>
|
||||||
|
<li>BCV Enjarify: v{enjarifyVersion}</li>
|
||||||
|
<li>Enjarify Dir: {enjarifyDir}</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>命令行界面(CLI)</h2>
|
||||||
|
<ul>
|
||||||
|
<li> -help 显示帮助菜单</li>
|
||||||
|
<li> -list 显示可用的反编译器</li>
|
||||||
|
<li> -decompiler [decompiler] 选择反编译器,默认为procyon</li>
|
||||||
|
<li> -i [输入文件] 选择输入文件(Jar、Class、APK、ZIP、DEX都能自动工作)</li>
|
||||||
|
<li> -o [输出文件] 选择输出文件(Java或Java-Bytecode)</li>
|
||||||
|
<li> -t [目标类名] 必须是完全合格的类名,或者是 "全部",以便将所有的文件反编译为zip</li>
|
||||||
|
<li> -nowait 不等待用户阅读CLI信息</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>文件</h2>
|
||||||
|
<ul>
|
||||||
|
<li>添加 (Ctrl + O) - 如果你添加一个jar/zip,BCV将解压它,如果你添加一个APK或DEX文件,BCV将运行dex2jar
|
||||||
|
然后运行jar的输入过程。
|
||||||
|
</li>
|
||||||
|
<li>重新打开最近的文件(Ctrl + L)--重新打开你最近打开的文件。
|
||||||
|
<li>新工作区(Ctrl + N)--它清除了已打开的 jars/资源。
|
||||||
|
<li>运行(Ctrl + R)--在一个安全的沙盒JVM实例中运行你已加载到BCV的类文件,你可以
|
||||||
|
完全调试。
|
||||||
|
</li>
|
||||||
|
<li>编译 (Ctrl + T) - 尝试编译你选择的所有可编辑面板,如果是Java,它将用
|
||||||
|
拉尼诺。Krakatau和*Smali使用他们自己的汇编程序。
|
||||||
|
</li>
|
||||||
|
<li>Save As Jar - 将类文件和加载的资源导出为一个可运行的 Jar 文件。
|
||||||
|
<li>Save As DEX - 运行 jar2dex 并将类文件导出为 DEX。
|
||||||
|
<li>Save Files As - 将所有的 Classfiles 和资源保存为一个 zip 文件。
|
||||||
|
<li>Save Java File As - 保存当前打开的反编译Classfile。
|
||||||
|
<li>Save Java Files As - 将所有反编译的Classsfiles保存为一个zip文件。
|
||||||
|
<li>最近的文件 - 你用BCV打开的最后25个文件/目录。
|
||||||
|
<li>About - 关于BCV的一个小信息窗口。
|
||||||
|
<li>退出 - 关闭BCV.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>查看面板</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Editable - 定义该观察窗格是否可编辑。</li>
|
||||||
|
<li>None - 将不显示任何东西。</li>
|
||||||
|
<li>Procyon - 使用Procyon反编译器进行反编译。</li>
|
||||||
|
<li>CFR - 用CFR反编译器反编译。</li>
|
||||||
|
<li>FernFlower - 使用FernFlower反编译器进行反编译。</li>
|
||||||
|
<li>JD-GUI - 使用JD-GUI反编译器进行反编译.</li>
|
||||||
|
<li>Krakatau Java - 使用Krakatau反编译器进行反编译。</li>
|
||||||
|
<li>Krakatau Bytecode - 用Krakatau反汇编器进行反汇编。</li>
|
||||||
|
<li>Smali - 使用Smali进行反汇编。</li>
|
||||||
|
<li>Bytecode - 通过CFIDE对字节码进行反编译。不可编辑。</li>
|
||||||
|
<li>Hexcode - 在一个十六进制浏览器中显示类文件。不可编辑。</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>设置</h2>
|
||||||
|
<ul>
|
||||||
|
<li>保存时编译 - 如果选择了这个选项,每当你执行文件>保存*功能时,它将在保存前尝试编译。
|
||||||
|
保存。
|
||||||
|
</li>
|
||||||
|
<li>刷新时编译 - 如果选择了这个选项,每当你按下刷新键,它将在重新加载资源/类之前进行编译。</li>
|
||||||
|
<li>更新检查 - 如果选择了这个选项,它会查询 https://github.com/Konloch/bytecode-viewer 以确保你得到最新的
|
||||||
|
版本。
|
||||||
|
</li>
|
||||||
|
<li>在视图改变时刷新 - 如果选择了这个选项,每当你在视图面板中改变一个选项时,它将刷新当前打开的资源/类。
|
||||||
|
当前打开的资源/类。
|
||||||
|
</li>
|
||||||
|
<li>解码APK资源 - 如果选择了这个选项,当你添加一个APK时,它将首先运行APKTool.jar来解码资源。
|
||||||
|
资源。
|
||||||
|
</li>
|
||||||
|
<li>设置Python 2.7可执行文件 - 如果你希望Krakatau反编译器/反汇编器/反汇编器工作,请设置Python 2.7可执行文件。
|
||||||
|
工作。
|
||||||
|
</li>
|
||||||
|
<li>Set JRE RT Library - 为Krakatau反编译器设置JRE RT库。
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>插件</h2>
|
||||||
|
<ul>
|
||||||
|
<li>打开插件 - 打开一个为BCV创建的.java插件。</li>
|
||||||
|
<li>最近的插件 - 你用BCV打开的最后25个插件。</li>
|
||||||
|
<li>代码序列图 - 为当前打开的类文件建立一个粗糙的代码序列图。</li>
|
||||||
|
<li>恶意代码扫描器 - 允许你定义要搜索的内容,并输出它所发现的内容。</li>
|
||||||
|
<li>显示主要方法 - 检测并输出所有的公共静态void main(String[])函数。</li>
|
||||||
|
<li>显示所有字符串 - 抓取并输出每个类文件中的所有字符串。</li>
|
||||||
|
<li>替换字符串 - 允许你对classfile中的字符串做一个简单的永久.替换,对于URL交换非常有用。</li>
|
||||||
|
<li>Allatori字符串解密器 - 解密Allatori混淆/加密的字符串。</li>
|
||||||
|
<li>ZKM字符串解密器 - 解密ZKM混淆/加密的字符串。</li>
|
||||||
|
<li>ZStringArray字符串解密器--解密被混淆/加密的ZStringArray字符串。</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>使用了不同项目的代码,包括但不限于</h2>
|
||||||
|
<ul>
|
||||||
|
<li>WaterWolf的J-RET</li>
|
||||||
|
<li>Sam Koivu的JHexPane</li>
|
||||||
|
<li>Robert Futrell的RSynaxPane</li>
|
||||||
|
<li>Commons IO by Apache</li>
|
||||||
|
<li>ASM by OW2</li>
|
||||||
|
<li>FernFlower by Stiver</li>
|
||||||
|
<li>Procyon,作者:Mstrobel</li>
|
||||||
|
<li>CFR by Lee Benfield</li>
|
||||||
|
<li>CFIDE by Bibl</li>
|
||||||
|
<li>Smali by JesusFreke</li>
|
||||||
|
<li>Dex2Jar by pxb1988</li>
|
||||||
|
<li>Krakatau by Storyyeller</li>
|
||||||
|
<li>JD-GUI + JD-Core by The Java-Decompiler Team</li>
|
||||||
|
<li>Enjarify by Storyyeller</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>注意事项</h2>
|
||||||
|
<ul>
|
||||||
|
<li>如果 BCV 无法启动,只需添加 -clean 作为参数来清理 lib 目录。
|
||||||
|
<li>在我吸食大麻烟的时候,请放松并做笔记。
|
||||||
|
<li>BCV 是出于对 Java 反向工程的热爱而创建的。
|
||||||
|
<li>Bytecode Viewer的主页是<a href="https://bytecodeviewer.com">https://bytecodeviewer.com</a> </li>
|
||||||
|
</ul>
|
||||||
|
</html>
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "Javac実行可能ファイルを設定する",
|
"SET_JAVAC_EXECUTABLE": "Javac実行可能ファイルを設定する",
|
||||||
"JAVA": "Java",
|
"JAVA": "Java",
|
||||||
"PROCYON": "プロキオン",
|
"PROCYON": "プロキオン",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "FernFlower",
|
"FERNFLOWER": "FernFlower",
|
||||||
"KRAKATAU": "クラカタウ",
|
"KRAKATAU": "クラカタウ",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Allatori String Decrypter",
|
"ALLATORI_STRING_DECRYPTER": "Allatori String Decrypter",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "ZStringArray Decrypter",
|
"ZSTRINGARRAY_DECRYPTER": "ZStringArray Decrypter",
|
||||||
"PROCYON_DECOMPILER": "プロキオン逆コンパイラ",
|
"PROCYON_DECOMPILER": "プロキオン逆コンパイラ",
|
||||||
"CRF_DECOMPILER": "CFRデコンパイラー",
|
"CFR_DECOMPILER": "CFRデコンパイラー",
|
||||||
"FERNFLOWER_DECOMPILER": "FernFlowerデコンパイラー",
|
"FERNFLOWER_DECOMPILER": "FernFlowerデコンパイラー",
|
||||||
"JADX_DECOMPILER": "JADXデコンパイラー",
|
"JADX_DECOMPILER": "JADXデコンパイラー",
|
||||||
"JD_DECOMPILER": "JD-GUIデコンパイラ",
|
"JD_DECOMPILER": "JD-GUIデコンパイラ",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "Tetapkan Javac Boleh Dilaksanakan",
|
"SET_JAVAC_EXECUTABLE": "Tetapkan Javac Boleh Dilaksanakan",
|
||||||
"JAVA": "Jawa",
|
"JAVA": "Jawa",
|
||||||
"PROCYON": "Procyon",
|
"PROCYON": "Procyon",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "FernFlower",
|
"FERNFLOWER": "FernFlower",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Allatori String Decrypter",
|
"ALLATORI_STRING_DECRYPTER": "Allatori String Decrypter",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "ZStringArray Decrypter",
|
"ZSTRINGARRAY_DECRYPTER": "ZStringArray Decrypter",
|
||||||
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
||||||
"CRF_DECOMPILER": "Pengurai CFR",
|
"CFR_DECOMPILER": "Pengurai CFR",
|
||||||
"FERNFLOWER_DECOMPILER": "Pengurai FernFlower",
|
"FERNFLOWER_DECOMPILER": "Pengurai FernFlower",
|
||||||
"JADX_DECOMPILER": "Pengurai JADX",
|
"JADX_DECOMPILER": "Pengurai JADX",
|
||||||
"JD_DECOMPILER": "Pengurai JD-GUI",
|
"JD_DECOMPILER": "Pengurai JD-GUI",
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
"TODO3": "These only exist as key/value map pairs",
|
"TODO3": "These only exist as key/value map pairs",
|
||||||
"JAVA": "Java",
|
"JAVA": "Java",
|
||||||
"PROCYON": "Procyon",
|
"PROCYON": "Procyon",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "FernFlower",
|
"FERNFLOWER": "FernFlower",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
|
|
||||||
"TODO5": "These only exist as key/value map pairs",
|
"TODO5": "These only exist as key/value map pairs",
|
||||||
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
||||||
"CRF_DECOMPILER": "CFR Decompiler",
|
"CFR_DECOMPILER": "CFR Decompiler",
|
||||||
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
||||||
"JADX_DECOMPILER": "JADX Decompiler",
|
"JADX_DECOMPILER": "JADX Decompiler",
|
||||||
"JD_DECOMPILER": "JD-GUI Decompiler",
|
"JD_DECOMPILER": "JD-GUI Decompiler",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "Definir executável Javac",
|
"SET_JAVAC_EXECUTABLE": "Definir executável Javac",
|
||||||
"JAVA": "Java",
|
"JAVA": "Java",
|
||||||
"PROCYON": "Procyon",
|
"PROCYON": "Procyon",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "FernFlower",
|
"FERNFLOWER": "FernFlower",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Allatori String Decrypter",
|
"ALLATORI_STRING_DECRYPTER": "Allatori String Decrypter",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "ZStringArray Decrypter",
|
"ZSTRINGARRAY_DECRYPTER": "ZStringArray Decrypter",
|
||||||
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
"PROCYON_DECOMPILER": "Procyon Decompiler",
|
||||||
"CRF_DECOMPILER": "CFR Decompiler",
|
"CFR_DECOMPILER": "CFR Decompiler",
|
||||||
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
"FERNFLOWER_DECOMPILER": "FernFlower Decompiler",
|
||||||
"JADX_DECOMPILER": "JADX Decompiler",
|
"JADX_DECOMPILER": "JADX Decompiler",
|
||||||
"JD_DECOMPILER": "JD-GUI Decompiler",
|
"JD_DECOMPILER": "JD-GUI Decompiler",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "Установить исполняемый файл Javac",
|
"SET_JAVAC_EXECUTABLE": "Установить исполняемый файл Javac",
|
||||||
"JAVA": "Ява",
|
"JAVA": "Ява",
|
||||||
"PROCYON": "Процион",
|
"PROCYON": "Процион",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "ПапоротникЦветок",
|
"FERNFLOWER": "ПапоротникЦветок",
|
||||||
"KRAKATAU": "Кракатау",
|
"KRAKATAU": "Кракатау",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Расшифровщик строк Аллатори",
|
"ALLATORI_STRING_DECRYPTER": "Расшифровщик строк Аллатори",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "Расшифровщик ZStringArray",
|
"ZSTRINGARRAY_DECRYPTER": "Расшифровщик ZStringArray",
|
||||||
"PROCYON_DECOMPILER": "Декомпилятор Procyon",
|
"PROCYON_DECOMPILER": "Декомпилятор Procyon",
|
||||||
"CRF_DECOMPILER": "CFR Декомпилятор",
|
"CFR_DECOMPILER": "CFR Декомпилятор",
|
||||||
"FERNFLOWER_DECOMPILER": "Декомпилятор FernFlower",
|
"FERNFLOWER_DECOMPILER": "Декомпилятор FernFlower",
|
||||||
"JADX_DECOMPILER": "Декомпилятор JADX",
|
"JADX_DECOMPILER": "Декомпилятор JADX",
|
||||||
"JD_DECOMPILER": "Декомпилятор JD-GUI",
|
"JD_DECOMPILER": "Декомпилятор JD-GUI",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"SET_JAVAC_EXECUTABLE": "Establecer ejecutable de Javac",
|
"SET_JAVAC_EXECUTABLE": "Establecer ejecutable de Javac",
|
||||||
"JAVA": "Java",
|
"JAVA": "Java",
|
||||||
"PROCYON": "Procyon",
|
"PROCYON": "Procyon",
|
||||||
"CRF": "CFR",
|
"CFR": "CFR",
|
||||||
"FERNFLOWER": "HelechoFlor",
|
"FERNFLOWER": "HelechoFlor",
|
||||||
"KRAKATAU": "Krakatau",
|
"KRAKATAU": "Krakatau",
|
||||||
"JDGUI": "JD-GUI",
|
"JDGUI": "JD-GUI",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"ALLATORI_STRING_DECRYPTER": "Descifrador de cadenas Allatori",
|
"ALLATORI_STRING_DECRYPTER": "Descifrador de cadenas Allatori",
|
||||||
"ZSTRINGARRAY_DECRYPTER": "Descifrador ZStringArray",
|
"ZSTRINGARRAY_DECRYPTER": "Descifrador ZStringArray",
|
||||||
"PROCYON_DECOMPILER": "Descompilador Procyon",
|
"PROCYON_DECOMPILER": "Descompilador Procyon",
|
||||||
"CRF_DECOMPILER": "Descompilador CFR",
|
"CFR_DECOMPILER": "Descompilador CFR",
|
||||||
"FERNFLOWER_DECOMPILER": "Descompilador FernFlower",
|
"FERNFLOWER_DECOMPILER": "Descompilador FernFlower",
|
||||||
"JADX_DECOMPILER": "Descompilador JADX",
|
"JADX_DECOMPILER": "Descompilador JADX",
|
||||||
"JD_DECOMPILER": "Descompilador JD-GUI",
|
"JD_DECOMPILER": "Descompilador JD-GUI",
|
||||||
|
|
Loading…
Reference in a new issue