|
2 | 2 |
|
3 | 3 | import java.io.File; |
4 | 4 | import java.io.IOException; |
| 5 | +import java.io.OutputStream; |
| 6 | +import java.io.PrintStream; |
| 7 | +import java.io.PrintWriter; |
| 8 | +import java.io.StringWriter; |
| 9 | +import java.lang.reflect.InvocationTargetException; |
5 | 10 | import java.util.ArrayList; |
6 | 11 | import java.util.Arrays; |
7 | 12 | import java.util.HashMap; |
|
23 | 28 | import com.javadeobfuscator.deobfuscator.ui.wrap.Deobfuscator; |
24 | 29 | import com.javadeobfuscator.deobfuscator.ui.wrap.Transformers; |
25 | 30 | import com.javadeobfuscator.deobfuscator.ui.wrap.WrapperFactory; |
| 31 | + |
26 | 32 | import java.awt.GridBagLayout; |
27 | 33 | import java.awt.GridBagConstraints; |
28 | 34 | import java.awt.Insets; |
29 | 35 | import java.awt.Toolkit; |
30 | 36 | import java.awt.datatransfer.StringSelection; |
31 | | -import java.awt.event.ActionEvent; |
32 | | -import java.awt.event.ActionListener; |
33 | | -import java.awt.event.KeyEvent; |
34 | | -import java.awt.event.KeyListener; |
35 | | -import java.awt.event.MouseAdapter; |
36 | | -import java.awt.event.MouseEvent; |
| 37 | +import java.awt.event.*; |
37 | 38 |
|
38 | 39 | public class SwingWindow |
39 | 40 | { |
@@ -755,8 +756,132 @@ public void actionPerformed(ActionEvent e) |
755 | 756 | gbl_run.ipadx = 15; |
756 | 757 | gbl_run.insets = new Insets(0, 10, 20, 20); |
757 | 758 | JButton run = new JButton("Run"); |
758 | | - frame.getContentPane().add(run, gbl_run); |
759 | 759 |
|
| 760 | + JTextArea area = new JTextArea(); |
| 761 | + PrintStream print = new PrintStream(new DeobfuscatorOutputStream(area)); |
| 762 | + System.setErr(print); |
| 763 | + System.setOut(print); |
| 764 | + deob.hookLogging(print); |
| 765 | + |
| 766 | + run.addActionListener(new ActionListener() |
| 767 | + { |
| 768 | + @Override |
| 769 | + public void actionPerformed(ActionEvent e) |
| 770 | + { |
| 771 | + run.setEnabled(false); |
| 772 | + // Start |
| 773 | + area.setText(null); |
| 774 | + JFrame newFrame = new JFrame(); |
| 775 | + newFrame.setTitle("Console"); |
| 776 | + area.setEditable(false); |
| 777 | + newFrame.getContentPane().add(new JScrollPane(area)); |
| 778 | + newFrame.pack(); |
| 779 | + newFrame.setSize(800, 600); |
| 780 | + newFrame.setVisible(true); |
| 781 | + Thread thread = new Thread(new Runnable() |
| 782 | + { |
| 783 | + @Override |
| 784 | + public void run() |
| 785 | + { |
| 786 | + try |
| 787 | + { |
| 788 | + if(true)throw new RuntimeException("TESTING"); |
| 789 | + //Set fields |
| 790 | + for(ConfigItem item : fields) |
| 791 | + { |
| 792 | + item.clearFieldValue(); |
| 793 | + item.setFieldValue(); |
| 794 | + } |
| 795 | + List<Class<?>> transformerClasses = new ArrayList<>(); |
| 796 | + for(Object o : transformerSelected.toArray()) |
| 797 | + { |
| 798 | + String str = (String)o; |
| 799 | + transformerClasses.add(NAME_TO_TRANSFORMER.get(str)); |
| 800 | + } |
| 801 | + deob.getConfig().setTransformers(trans, transformerClasses); |
| 802 | + try |
| 803 | + { |
| 804 | + deob.run(); |
| 805 | + }catch(InvocationTargetException e) |
| 806 | + { |
| 807 | + if(e.getTargetException().getClass().getName(). |
| 808 | + equals("com.javadeobfuscator.deobfuscator.exceptions.NoClassInPathException")) |
| 809 | + { |
| 810 | + for(int i = 0; i < 5; i++) |
| 811 | + System.out.println(); |
| 812 | + System.out.println("** DO NOT OPEN AN ISSUE ON GITHUB **"); |
| 813 | + System.out.println("Could not locate a class file."); |
| 814 | + System.out.println("Have you added the necessary files to the -libraries argument?"); |
| 815 | + System.out.println("The error was:"); |
| 816 | + }else if(e.getTargetException().getClass().getName(). |
| 817 | + equals("com.javadeobfuscator.deobfuscator.exceptions.PreventableStackOverflowError")) |
| 818 | + { |
| 819 | + for(int i = 0; i < 5; i++) |
| 820 | + System.out.println(); |
| 821 | + System.out.println("** DO NOT OPEN AN ISSUE ON GITHUB **"); |
| 822 | + System.out.println("A StackOverflowError occurred during deobfuscation, but it is preventable"); |
| 823 | + System.out.println("Try increasing your stack size using the -Xss flag"); |
| 824 | + System.out.println("The error was:"); |
| 825 | + }else |
| 826 | + { |
| 827 | + for(int i = 0; i < 5; i++) |
| 828 | + System.out.println(); |
| 829 | + System.out.println("Deobfuscation failed. Please open a ticket on GitHub and provide the following error:"); |
| 830 | + } |
| 831 | + e.getTargetException().printStackTrace(); |
| 832 | + } |
| 833 | + }catch(Throwable e) |
| 834 | + { |
| 835 | + JFrame newFrame = new JFrame(); |
| 836 | + newFrame.setTitle("Error"); |
| 837 | + newFrame.setBounds(100, 100, 500, 400); |
| 838 | + newFrame.setResizable(true); |
| 839 | + newFrame.getContentPane().setLayout(new GridBagLayout()); |
| 840 | + |
| 841 | + JLabel yourConfiguration = new JLabel("An error occured while running deobfuscator."); |
| 842 | + GridBagConstraints gbc_yourConfiguration = new GridBagConstraints(); |
| 843 | + gbc_yourConfiguration.anchor = GridBagConstraints.PAGE_START; |
| 844 | + gbc_yourConfiguration.insets = new Insets(15, 5, 5, 5); |
| 845 | + gbc_yourConfiguration.gridx = 0; |
| 846 | + gbc_yourConfiguration.gridy = 0; |
| 847 | + newFrame.getContentPane().add(yourConfiguration, gbc_yourConfiguration); |
| 848 | + |
| 849 | + JScrollPane scrollPane = new JScrollPane(); |
| 850 | + JTextPane textPane = new JTextPane(); |
| 851 | + textPane.setEditable(false); |
| 852 | + scrollPane.setViewportView(textPane); |
| 853 | + GridBagConstraints gbc_scrollPane = new GridBagConstraints(); |
| 854 | + gbc_scrollPane.insets = new Insets(2, 10, 5, 10); |
| 855 | + gbc_scrollPane.gridx = 0; |
| 856 | + gbc_scrollPane.gridy = 1; |
| 857 | + gbc_scrollPane.weightx = 1; |
| 858 | + gbc_scrollPane.weighty = 1; |
| 859 | + gbc_scrollPane.fill = GridBagConstraints.BOTH; |
| 860 | + newFrame.getContentPane().add(scrollPane, gbc_scrollPane); |
| 861 | + StringWriter stringWriter = new StringWriter(); |
| 862 | + PrintWriter writer = new PrintWriter(stringWriter); |
| 863 | + e.printStackTrace(writer); |
| 864 | + textPane.setText(stringWriter.toString()); |
| 865 | + newFrame.setVisible(true); |
| 866 | + } |
| 867 | + } |
| 868 | + }); |
| 869 | + thread.start(); |
| 870 | + newFrame.addWindowListener(new WindowAdapter() |
| 871 | + { |
| 872 | + @Override |
| 873 | + public void windowClosing(WindowEvent e) |
| 874 | + { |
| 875 | + run.setEnabled(true); |
| 876 | + if(thread.isAlive()) |
| 877 | + thread.stop(); |
| 878 | + e.getWindow().dispose(); |
| 879 | + } |
| 880 | + }); |
| 881 | + } |
| 882 | + }); |
| 883 | + |
| 884 | + frame.getContentPane().add(run, gbl_run); |
760 | 885 | frame.setVisible(true); |
761 | 886 | } |
762 | 887 |
|
@@ -815,4 +940,20 @@ private static void fallbackLoad(String path) |
815 | 940 | fallbackLoad(e.path); |
816 | 941 | } |
817 | 942 | } |
| 943 | + |
| 944 | + private static class DeobfuscatorOutputStream extends OutputStream |
| 945 | + { |
| 946 | + private JTextArea console; |
| 947 | + |
| 948 | + public DeobfuscatorOutputStream(JTextArea console) |
| 949 | + { |
| 950 | + this.console = console; |
| 951 | + } |
| 952 | + |
| 953 | + @Override |
| 954 | + public void write(int b) throws IOException |
| 955 | + { |
| 956 | + console.append(String.valueOf((char)b)); |
| 957 | + } |
| 958 | + } |
818 | 959 | } |
0 commit comments