package injected; import com.sun.tools.attach.*; import java.awt.*; import javax.swing.*; import java.util.*; import java.net.*; import java.lang.reflect.*; import java.io.*; public class MainInjected { public static void main(final String[] args) throws Exception { final File file1 = new File(MainInjected.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); System.out.println("Starting Fitchi..."); try { Class.forName("com.sun.tools.attach.VirtualMachine"); } catch (ClassNotFoundException var10) { System.out.println("ERROR: Couldn't load VirtualMachine class, is tools.jar present?"); return; } System.out.println("Loading attach library..."); extractLibrary(file1); try { System.loadLibrary("attach"); } catch (Exception var11) { System.out.println("ERROR: Couldn't load attach libary!"); return; } System.out.println("Attach library loaded."); System.out.println("Searching for Minecraft JVM..."); for (final VirtualMachineDescriptor virtualmachinedescriptor : VirtualMachine.list()) { if (virtualmachinedescriptor.displayName().startsWith("net.minecraft.launchwrapper.Launch")) { System.out.println("Minecraft found, attaching..."); final VirtualMachine virtualmachine = VirtualMachine.attach(virtualmachinedescriptor); final String s = virtualmachine.getSystemProperties().getProperty("java.version"); final String s2 = System.getProperty("java.version"); if (!s.equals(s2)) { System.out.println("WARN: fitchi and Minecraft Java version do not match, agent might fail!"); } System.out.println("Loading agent..."); try { virtualmachine.loadAgent(file1.getAbsolutePath()); } catch (Exception exception) { System.out.println("ERROR: Agent failed to load (" + exception.getMessage() + ")!"); return; } System.out.println("Agent successfully loaded, detaching..."); virtualmachine.detach(); System.out.println("fitchi started successfully."); System.exit(0); return; } } System.out.println("Minecraft not found, exiting."); JOptionPane.showMessageDialog(null, "No Minecraft JVM found.", "fitchi", 0); } private static void extractLibrary(final File jarFile) throws IOException { final String s = System.getProperty("os.name").toLowerCase(); final boolean flag = System.getProperty("os.arch").equals("amd64") || System.getProperty("os.arch").equals("x86_64"); MainInjected.OperatingSystem maininjected$operatingsystem; if (s.indexOf("win") >= 0) { maininjected$operatingsystem = MainInjected.OperatingSystem.WINDOWS; } else if (s.indexOf("nix") < 0 && s.indexOf("nux") < 0 && s.indexOf("aix") <= 0) { if (s.indexOf("mac") < 0) { JOptionPane.showMessageDialog(null, "Unsupported operating system '" + s + "'.", "SpookyNan", 0); return; } maininjected$operatingsystem = MainInjected.OperatingSystem.OSX; } else { maininjected$operatingsystem = MainInjected.OperatingSystem.LINUX; } System.out.println(maininjected$operatingsystem.name() + " detected, using " + maininjected$operatingsystem.getVmClass() + "."); try { Class.forName(maininjected$operatingsystem.getVmClass()); } catch (ClassNotFoundException var12) { System.out.println("ERROR: Couldn't load " + maininjected$operatingsystem.getVmClass() + " class, are you using the right tools.jar file for your operating system?"); return; } final String s2 = maininjected$operatingsystem.getLibraryPath(flag); final URL url = ClassLoader.getSystemResource(s2); final File file1 = new File(jarFile.getParentFile(), s2.substring(s2.lastIndexOf("/"), s2.length())); if (!file1.exists()) { file1.deleteOnExit(); final InputStream inputstream = url.openStream(); final OutputStream outputstream = new BufferedOutputStream(new FileOutputStream(file1)); final byte[] abyte = new byte[8192]; int i; while ((i = inputstream.read(abyte)) > -1) { outputstream.write(abyte, 0, i); } outputstream.close(); inputstream.close(); } if (System.getProperty("java.library.path") != null) { System.setProperty("java.library.path", s2 + System.getProperty("path.separator") + System.getProperty("java.library.path")); } else { System.setProperty("java.library.path", s2); } try { final Field field = ClassLoader.class.getDeclaredField("sys_paths"); field.setAccessible(true); field.set(null, null); } catch (SecurityException | IllegalArgumentException | IllegalAccessException | NoSuchFieldException ex2) { final Exception ex; final Exception var11 = ex; final Exception exception = null; exception.printStackTrace(); } } }