protected static void testBuilder(final BuilderTestRunner runner, String name, String testArgs) throws Exception { String realName = name; if (runner.getName().indexOf('_') != -1 && !runner.getName().startsWith("CVE_")) { realName = runner.getName().substring(0, runner.getName().indexOf('_') + 1) + name; if (name.equals("BindMultiTCP") || name.startsWith("Integrated$") || name.startsWith("Spawn_")) return; } if (runner.getName().indexOf("Embedded") == -1 && runner.getName().indexOf("Injector") == -1 && name.indexOf("Integrated$") != -1) return; final String[] args = StageMenu.splitArgs(realName + " " + testArgs + " -- TestStub Fast"); final StagerHandler.Loader loader = (runner.getName().indexOf("Injector") != -1) ? null : new StagerHandler.Loader(args); if (runner.getName().indexOf("[kill]") != -1) { if (name.startsWith("Spawn")) return; ((TestStub) loader.stageHandler).sendExit = true; } if (loader != null) loader.handleBefore(System.err, null); runner.runBuilder(loader == null ? args : loader.getArgs()); final Throwable[] tt = new Throwable[1]; Thread t = new Thread( new Runnable() { public void run() { try { runner.runResult(loader == null ? args : loader.getArgs()); } catch (Throwable t) { tt[0] = t; } }; }); t.start(); runner.waitReady(); if (loader != null) loader.handleAfter(System.err, null); t.join(); if (tt[0] != null) { /* #JDK1.4 */ try { throw new Exception("Builder result died", tt[0]); } catch (NoSuchMethodError ex2) /**/ { throw new Exception("Builder result died: " + tt[0].toString()); } } }
public JarCrypterTestRunner( BuilderTestRunner runner, String jarName, JarLayout jarLayout, String[] layoutArgs) { this.runner = runner; this.jarName = jarName; this.jarLayout = jarLayout; this.layoutArgs = layoutArgs; try { Field f = runner.getClass().getField("loaderName"); if (layoutArgs.length > 0) f.set(runner, layoutArgs[layoutArgs.length - 1]); } catch (Exception ex) { } }
public void runBuilder(String[] args) throws Exception { runner.runBuilder(args); String jarName = this.jarName; if (jarName.indexOf('*') != -1) jarName = Module.replaceString(jarName, "*", args[0]); new File(jarName).renameTo(new File("uncrypted.jar")); String[] crypterArgs = new String[] { "uncrypted.jar", jarName, "RnR", "HashNames", jarLayout.getName(), }; if (layoutArgs.length > 0) { String[] tmp = crypterArgs; crypterArgs = new String[tmp.length + layoutArgs.length]; System.arraycopy(tmp, 0, crypterArgs, 0, tmp.length); System.arraycopy(layoutArgs, 0, crypterArgs, tmp.length, layoutArgs.length); } new CryptedJarBuilder().build(crypterArgs); if (!new File("uncrypted.jar").delete()) throw new IOException("Unable to delete file"); }
public static void main(String[] args) throws Exception { System.out.println("Testing builders..."); String[] stagers = StagerTest.getStagers(); BuilderTestRunner[] runners = new BuilderTestRunner[] { new ClassBuilderTestRunner(), new EmbeddedClassBuilderTestRunner(), new JarBuilderTestRunner(), new StripJarBuilderTestRunner(), new JarCrypterTestRunner( new StripJarBuilderTestRunner(), "stripped.jar", new MainClass(), new String[] {"StaLo"}), new EmbeddedJarBuilderTestRunner(), new StripEmbeddedJarBuilderTestRunner(), new LocalStageJarBuilderTestRunner(), new JarCrypterTestRunner( new LocalStageJarBuilderTestRunner(), "LocalStage.jar", new MainClass(), new String[] {"StaLo"}), /* #JDK1.5 */ new BuilderTest15.AgentJarBuilderTestRunner(), /**/ /* #JDK1.5 */ new JarCrypterTestRunner( new BuilderTest15.AgentJarBuilderTestRunner(), "Agent_*.jar", new javapayload.crypter.Agent(), new String[0]), /**/ new AppletJarBuilderTestRunner(), new NewNameAppletJarBuilderTestRunner(), new EmbeddedAppletJarBuilderTestRunner(), new JarCrypterTestRunner( new EmbeddedAppletJarBuilderTestRunner(), "EmbeddedAppletJar.jar", new SignedApplet(), new String[] {"javapayload.loader.AppletLoader", "AppLo"}), new EmbeddedNewNameAppletJarBuilderTestRunner(), // /* #JDK1.4 */new BuilderTest14.CVE_2008_5353TestRunner(), /**/ // /* #JDK1.4 */new JarCrypterTestRunner(new BuilderTest14.CVE_2008_5353TestRunner(), // "cve.jar", new javapayload.crypter.SignedApplet(), new String[] // {"javapayload.exploit.CVE_2008_5353", "Expy"}), /**/ // /* #JDK1.4 */new BuilderTest14.EmbeddedCVE_2008_5353TestRunner(), /**/ // /* #JDK1.5 */new BuilderTest15.CVE_2010_0094TestRunner(), /**/ // /* #JDK1.5 */new BuilderTest15.CVE_2010_4465TestRunner(), /**/ // new CVE_2010_0840TestRunner(), /* #JDK1.6 */ new BuilderTest16.AttachInjectorTestRunner(), /**/ /* #JDK1.3 */ new BuilderTest13.JDWPInjectorTestRunner(), /**/ new RMIInjectorTestRunner(), // new JarCrypterTestRunner(new RMIInjectorTestRunner(), "rmitest.jar", new // javapayload.crypter.RMI(), new String[] {"javapayload.loader.rmi.LoaderImpl", // "RMILDR"}), }; for (int i = 0; i < runners.length; i++) { BuilderTestRunner runner = runners[i]; System.out.println("\t" + runner.getName()); for (int j = 0; j < stagers.length; j++) { String name = stagers[j]; System.out.println("\t\t" + name); String[] testArgs = StagerTest.getTestArgs(name); if (testArgs == null) continue; for (int k = 0; k < testArgs.length; k++) { System.out.println("\t\t\t" + testArgs[k]); testBuilder(runner, name, testArgs[k]); } } runner.cleanup(); } System.out.println("Builder tests finished."); new ThreadWatchdogThread(5000).start(); }
public void cleanup() throws Exception { runner.cleanup(); }
public void runResult(String[] args) throws Exception { runner.runResult(args); }
public void waitReady() throws InterruptedException { runner.waitReady(); }
public String getName() { return runner.getName() + " + JarCrypter"; }