diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..758370cb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,55 @@
+.idea/
+*.class
+*.log
+*.ctxt
+.mtj.tmp/
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+hs_err_pid*
+.DS_Store
+.AppleDouble
+.LSOverride
+Icon
+._*
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+*.stackdump
+[Dd]esktop.ini
+$RECYCLE.BIN/
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+*.lnk
+.gradle
+**/build/
+!src/**/build/
+gradle-app.setting
+!gradle-wrapper.jar
+.gradletasknamecache
+*~
+.fuse_hidden*
+.directory
+.Trash-*
+.nfs*
+release/
\ No newline at end of file
diff --git a/armitage/build.gradle b/armitage/build.gradle
new file mode 100644
index 00000000..43a5d088
--- /dev/null
+++ b/armitage/build.gradle
@@ -0,0 +1,45 @@
+plugins {
+ id 'java'
+}
+
+group 'armitage'
+version '1.0-SNAPSHOT'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+repositories {
+ mavenCentral()
+}
+
+jar {
+ manifest {
+ attributes 'Main-Class': 'armitage.ArmitageMain'
+ }
+ from {
+ configurations.compileClasspath.filter { it.exists() }.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+ archiveName 'armitage.jar'
+}
+
+dependencies {
+ implementation files('../lib/sleep.jar', '../lib/jgraphx.jar')
+
+ implementation group: 'org.javassist', name: 'javassist', version: '3.28.0-GA'
+ implementation group: 'org.postgresql', name: 'postgresql', version: '9.4.1212'
+ implementation group: 'org.msgpack', name: 'msgpack', version: '0.6.12'
+
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
+}
+
+test {
+ useJUnitPlatform()
+}
+
+task copyJar(type: Copy) {
+ from jar
+ into "../build"
+}
+
+assemble.finalizedBy(copyJar)
\ No newline at end of file
diff --git a/src/armitage/Activity.java b/armitage/src/main/java/armitage/Activity.java
similarity index 100%
rename from src/armitage/Activity.java
rename to armitage/src/main/java/armitage/Activity.java
diff --git a/src/armitage/ActivityConsole.java b/armitage/src/main/java/armitage/ActivityConsole.java
similarity index 100%
rename from src/armitage/ActivityConsole.java
rename to armitage/src/main/java/armitage/ActivityConsole.java
diff --git a/src/armitage/ArmitageApplication.java b/armitage/src/main/java/armitage/ArmitageApplication.java
similarity index 99%
rename from src/armitage/ArmitageApplication.java
rename to armitage/src/main/java/armitage/ArmitageApplication.java
index 16e47851..5fc9cd38 100644
--- a/src/armitage/ArmitageApplication.java
+++ b/armitage/src/main/java/armitage/ArmitageApplication.java
@@ -1,7 +1,6 @@
package armitage;
import javax.swing.*;
-import javax.swing.event.*;
import java.awt.image.*;
import java.awt.*;
diff --git a/src/armitage/ArmitageBuffer.java b/armitage/src/main/java/armitage/ArmitageBuffer.java
similarity index 100%
rename from src/armitage/ArmitageBuffer.java
rename to armitage/src/main/java/armitage/ArmitageBuffer.java
diff --git a/src/armitage/ArmitageMain.java b/armitage/src/main/java/armitage/ArmitageMain.java
similarity index 98%
rename from src/armitage/ArmitageMain.java
rename to armitage/src/main/java/armitage/ArmitageMain.java
index b2a0e956..03f4b8a9 100644
--- a/src/armitage/ArmitageMain.java
+++ b/armitage/src/main/java/armitage/ArmitageMain.java
@@ -1,8 +1,9 @@
package armitage;
+import cortana.core.EventManager;
+import cortana.core.FilterManager;
import sleep.runtime.*;
import sleep.interfaces.*;
-import sleep.console.*;
import sleep.bridges.*;
import sleep.error.*;
import sleep.engine.*;
@@ -11,7 +12,6 @@
import java.util.*;
import java.io.*;
-import cortana.core.*;
import ui.*;
/**
diff --git a/src/armitage/ArmitageThread.java b/armitage/src/main/java/armitage/ArmitageThread.java
similarity index 100%
rename from src/armitage/ArmitageThread.java
rename to armitage/src/main/java/armitage/ArmitageThread.java
diff --git a/src/armitage/ArmitageThreadClient.java b/armitage/src/main/java/armitage/ArmitageThreadClient.java
similarity index 100%
rename from src/armitage/ArmitageThreadClient.java
rename to armitage/src/main/java/armitage/ArmitageThreadClient.java
diff --git a/src/armitage/ArmitageTimer.java b/armitage/src/main/java/armitage/ArmitageTimer.java
similarity index 100%
rename from src/armitage/ArmitageTimer.java
rename to armitage/src/main/java/armitage/ArmitageTimer.java
diff --git a/src/armitage/ArmitageTimerClient.java b/armitage/src/main/java/armitage/ArmitageTimerClient.java
similarity index 100%
rename from src/armitage/ArmitageTimerClient.java
rename to armitage/src/main/java/armitage/ArmitageTimerClient.java
diff --git a/src/armitage/ConsoleCallback.java b/armitage/src/main/java/armitage/ConsoleCallback.java
similarity index 100%
rename from src/armitage/ConsoleCallback.java
rename to armitage/src/main/java/armitage/ConsoleCallback.java
diff --git a/src/armitage/ConsoleClient.java b/armitage/src/main/java/armitage/ConsoleClient.java
similarity index 100%
rename from src/armitage/ConsoleClient.java
rename to armitage/src/main/java/armitage/ConsoleClient.java
diff --git a/src/armitage/ConsoleQueue.java b/armitage/src/main/java/armitage/ConsoleQueue.java
similarity index 100%
rename from src/armitage/ConsoleQueue.java
rename to armitage/src/main/java/armitage/ConsoleQueue.java
diff --git a/src/armitage/DisconnectNotifier.java b/armitage/src/main/java/armitage/DisconnectNotifier.java
similarity index 100%
rename from src/armitage/DisconnectNotifier.java
rename to armitage/src/main/java/armitage/DisconnectNotifier.java
diff --git a/src/armitage/EventLogTabCompletion.java b/armitage/src/main/java/armitage/EventLogTabCompletion.java
similarity index 100%
rename from src/armitage/EventLogTabCompletion.java
rename to armitage/src/main/java/armitage/EventLogTabCompletion.java
diff --git a/src/armitage/GenericTabCompletion.java b/armitage/src/main/java/armitage/GenericTabCompletion.java
similarity index 100%
rename from src/armitage/GenericTabCompletion.java
rename to armitage/src/main/java/armitage/GenericTabCompletion.java
diff --git a/src/armitage/MeterpreterClient.java b/armitage/src/main/java/armitage/MeterpreterClient.java
similarity index 100%
rename from src/armitage/MeterpreterClient.java
rename to armitage/src/main/java/armitage/MeterpreterClient.java
diff --git a/src/armitage/QueueTabCompletion.java b/armitage/src/main/java/armitage/QueueTabCompletion.java
similarity index 100%
rename from src/armitage/QueueTabCompletion.java
rename to armitage/src/main/java/armitage/QueueTabCompletion.java
diff --git a/src/armitage/SimpleTimer.java b/armitage/src/main/java/armitage/SimpleTimer.java
similarity index 100%
rename from src/armitage/SimpleTimer.java
rename to armitage/src/main/java/armitage/SimpleTimer.java
diff --git a/src/armitage/TabCompletion.java b/armitage/src/main/java/armitage/TabCompletion.java
similarity index 100%
rename from src/armitage/TabCompletion.java
rename to armitage/src/main/java/armitage/TabCompletion.java
diff --git a/src/console/Colors.java b/armitage/src/main/java/console/Colors.java
similarity index 100%
rename from src/console/Colors.java
rename to armitage/src/main/java/console/Colors.java
diff --git a/src/console/Console.java b/armitage/src/main/java/console/Console.java
similarity index 100%
rename from src/console/Console.java
rename to armitage/src/main/java/console/Console.java
diff --git a/src/console/ConsolePopup.java b/armitage/src/main/java/console/ConsolePopup.java
similarity index 100%
rename from src/console/ConsolePopup.java
rename to armitage/src/main/java/console/ConsolePopup.java
diff --git a/src/console/Display.java b/armitage/src/main/java/console/Display.java
similarity index 100%
rename from src/console/Display.java
rename to armitage/src/main/java/console/Display.java
diff --git a/src/console/SearchPanel.java b/armitage/src/main/java/console/SearchPanel.java
similarity index 100%
rename from src/console/SearchPanel.java
rename to armitage/src/main/java/console/SearchPanel.java
diff --git a/src/cortana/Cortana.java b/armitage/src/main/java/cortana/Cortana.java
similarity index 100%
rename from src/cortana/Cortana.java
rename to armitage/src/main/java/cortana/Cortana.java
diff --git a/src/cortana/CortanaPipe.java b/armitage/src/main/java/cortana/CortanaPipe.java
similarity index 100%
rename from src/cortana/CortanaPipe.java
rename to armitage/src/main/java/cortana/CortanaPipe.java
diff --git a/src/cortana/CortanaTabCompletion.java b/armitage/src/main/java/cortana/CortanaTabCompletion.java
similarity index 89%
rename from src/cortana/CortanaTabCompletion.java
rename to armitage/src/main/java/cortana/CortanaTabCompletion.java
index 58d060d6..f7e9f878 100644
--- a/src/cortana/CortanaTabCompletion.java
+++ b/armitage/src/main/java/cortana/CortanaTabCompletion.java
@@ -2,11 +2,8 @@
import armitage.GenericTabCompletion;
import console.Console;
-import msf.*;
+
import java.util.*;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
/* A generic class to manage reading/writing to a console. Keeps the code simpler (although the Sleep code to do this is
simpler than this Java code. *sigh* */
diff --git a/src/cortana/Loader.java b/armitage/src/main/java/cortana/Loader.java
similarity index 100%
rename from src/cortana/Loader.java
rename to armitage/src/main/java/cortana/Loader.java
diff --git a/src/cortana/Main.java b/armitage/src/main/java/cortana/Main.java
similarity index 100%
rename from src/cortana/Main.java
rename to armitage/src/main/java/cortana/Main.java
diff --git a/src/cortana/Safety.java b/armitage/src/main/java/cortana/Safety.java
similarity index 100%
rename from src/cortana/Safety.java
rename to armitage/src/main/java/cortana/Safety.java
diff --git a/src/cortana/core/CommandManager.java b/armitage/src/main/java/cortana/core/CommandManager.java
similarity index 100%
rename from src/cortana/core/CommandManager.java
rename to armitage/src/main/java/cortana/core/CommandManager.java
diff --git a/src/cortana/core/Commands.java b/armitage/src/main/java/cortana/core/Commands.java
similarity index 100%
rename from src/cortana/core/Commands.java
rename to armitage/src/main/java/cortana/core/Commands.java
diff --git a/src/cortana/core/EventManager.java b/armitage/src/main/java/cortana/core/EventManager.java
similarity index 100%
rename from src/cortana/core/EventManager.java
rename to armitage/src/main/java/cortana/core/EventManager.java
diff --git a/src/cortana/core/EventQueue.java b/armitage/src/main/java/cortana/core/EventQueue.java
similarity index 100%
rename from src/cortana/core/EventQueue.java
rename to armitage/src/main/java/cortana/core/EventQueue.java
diff --git a/src/cortana/core/Events.java b/armitage/src/main/java/cortana/core/Events.java
similarity index 100%
rename from src/cortana/core/Events.java
rename to armitage/src/main/java/cortana/core/Events.java
diff --git a/src/cortana/core/FilterManager.java b/armitage/src/main/java/cortana/core/FilterManager.java
similarity index 100%
rename from src/cortana/core/FilterManager.java
rename to armitage/src/main/java/cortana/core/FilterManager.java
diff --git a/src/cortana/core/Filters.java b/armitage/src/main/java/cortana/core/Filters.java
similarity index 100%
rename from src/cortana/core/Filters.java
rename to armitage/src/main/java/cortana/core/Filters.java
diff --git a/src/cortana/data/CortanaTimer.java b/armitage/src/main/java/cortana/data/CortanaTimer.java
similarity index 100%
rename from src/cortana/data/CortanaTimer.java
rename to armitage/src/main/java/cortana/data/CortanaTimer.java
diff --git a/src/cortana/data/Credential.java b/armitage/src/main/java/cortana/data/Credential.java
similarity index 100%
rename from src/cortana/data/Credential.java
rename to armitage/src/main/java/cortana/data/Credential.java
diff --git a/src/cortana/data/Credentials.java b/armitage/src/main/java/cortana/data/Credentials.java
similarity index 91%
rename from src/cortana/data/Credentials.java
rename to armitage/src/main/java/cortana/data/Credentials.java
index 7ff1bf04..190c906d 100644
--- a/src/cortana/data/Credentials.java
+++ b/armitage/src/main/java/cortana/data/Credentials.java
@@ -2,20 +2,10 @@
import cortana.core.*;
-import armitage.ArmitageTimerClient;
-import armitage.ArmitageTimer;
-
-import graph.Route;
-
-import sleep.bridges.*;
-import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
import msf.*;
public class Credentials extends ManagedData {
diff --git a/src/cortana/data/DataManager.java b/armitage/src/main/java/cortana/data/DataManager.java
similarity index 99%
rename from src/cortana/data/DataManager.java
rename to armitage/src/main/java/cortana/data/DataManager.java
index 6a9319b7..39171cba 100644
--- a/src/cortana/data/DataManager.java
+++ b/armitage/src/main/java/cortana/data/DataManager.java
@@ -9,7 +9,6 @@
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
diff --git a/src/cortana/data/DataUtils.java b/armitage/src/main/java/cortana/data/DataUtils.java
similarity index 100%
rename from src/cortana/data/DataUtils.java
rename to armitage/src/main/java/cortana/data/DataUtils.java
diff --git a/src/cortana/data/Host.java b/armitage/src/main/java/cortana/data/Host.java
similarity index 100%
rename from src/cortana/data/Host.java
rename to armitage/src/main/java/cortana/data/Host.java
diff --git a/src/cortana/data/Hosts.java b/armitage/src/main/java/cortana/data/Hosts.java
similarity index 92%
rename from src/cortana/data/Hosts.java
rename to armitage/src/main/java/cortana/data/Hosts.java
index f971b1f3..f4d8ca47 100644
--- a/src/cortana/data/Hosts.java
+++ b/armitage/src/main/java/cortana/data/Hosts.java
@@ -2,20 +2,10 @@
import cortana.core.*;
-import armitage.ArmitageTimerClient;
-import armitage.ArmitageTimer;
-
-import graph.Route;
-
-import sleep.bridges.*;
-import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
import msf.*;
public class Hosts extends ManagedData {
diff --git a/src/cortana/data/Loots.java b/armitage/src/main/java/cortana/data/Loots.java
similarity index 91%
rename from src/cortana/data/Loots.java
rename to armitage/src/main/java/cortana/data/Loots.java
index fd8a9ab1..05ff14ad 100644
--- a/src/cortana/data/Loots.java
+++ b/armitage/src/main/java/cortana/data/Loots.java
@@ -2,20 +2,10 @@
import cortana.core.*;
-import armitage.ArmitageTimerClient;
-import armitage.ArmitageTimer;
-
-import graph.Route;
-
-import sleep.bridges.*;
-import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
import msf.*;
public class Loots extends ManagedData {
diff --git a/src/cortana/data/ManagedData.java b/armitage/src/main/java/cortana/data/ManagedData.java
similarity index 100%
rename from src/cortana/data/ManagedData.java
rename to armitage/src/main/java/cortana/data/ManagedData.java
diff --git a/src/cortana/data/Routes.java b/armitage/src/main/java/cortana/data/Routes.java
similarity index 92%
rename from src/cortana/data/Routes.java
rename to armitage/src/main/java/cortana/data/Routes.java
index b6f17319..19dee942 100644
--- a/src/cortana/data/Routes.java
+++ b/armitage/src/main/java/cortana/data/Routes.java
@@ -2,20 +2,12 @@
import cortana.core.*;
-import armitage.ArmitageTimerClient;
-import armitage.ArmitageTimer;
-
import graph.Route;
-import sleep.bridges.*;
-import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
import msf.*;
public class Routes extends ManagedData {
diff --git a/src/cortana/data/Service.java b/armitage/src/main/java/cortana/data/Service.java
similarity index 100%
rename from src/cortana/data/Service.java
rename to armitage/src/main/java/cortana/data/Service.java
diff --git a/src/cortana/data/Services.java b/armitage/src/main/java/cortana/data/Services.java
similarity index 92%
rename from src/cortana/data/Services.java
rename to armitage/src/main/java/cortana/data/Services.java
index 773eca64..67098e2e 100644
--- a/src/cortana/data/Services.java
+++ b/armitage/src/main/java/cortana/data/Services.java
@@ -2,20 +2,10 @@
import cortana.core.*;
-import armitage.ArmitageTimerClient;
-import armitage.ArmitageTimer;
-
-import graph.Route;
-
-import sleep.bridges.*;
-import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
import msf.*;
public class Services extends ManagedData {
diff --git a/src/cortana/data/Sessions.java b/armitage/src/main/java/cortana/data/Sessions.java
similarity index 95%
rename from src/cortana/data/Sessions.java
rename to armitage/src/main/java/cortana/data/Sessions.java
index b2cd6feb..e0063354 100644
--- a/src/cortana/data/Sessions.java
+++ b/armitage/src/main/java/cortana/data/Sessions.java
@@ -2,20 +2,10 @@
import cortana.core.*;
-import armitage.ArmitageTimerClient;
-import armitage.ArmitageTimer;
-
-import graph.Route;
-
-import sleep.bridges.*;
-import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
import msf.*;
public class Sessions extends ManagedData {
diff --git a/src/cortana/gui/CortanaTabCompletion.java b/armitage/src/main/java/cortana/gui/CortanaTabCompletion.java
similarity index 100%
rename from src/cortana/gui/CortanaTabCompletion.java
rename to armitage/src/main/java/cortana/gui/CortanaTabCompletion.java
diff --git a/src/cortana/gui/KeyBridge.java b/armitage/src/main/java/cortana/gui/KeyBridge.java
similarity index 100%
rename from src/cortana/gui/KeyBridge.java
rename to armitage/src/main/java/cortana/gui/KeyBridge.java
diff --git a/src/cortana/gui/MenuBridge.java b/armitage/src/main/java/cortana/gui/MenuBridge.java
similarity index 98%
rename from src/cortana/gui/MenuBridge.java
rename to armitage/src/main/java/cortana/gui/MenuBridge.java
index 5a078785..347e865b 100644
--- a/src/cortana/gui/MenuBridge.java
+++ b/armitage/src/main/java/cortana/gui/MenuBridge.java
@@ -1,7 +1,5 @@
package cortana.gui;
-import cortana.core.*;
-import msf.*;
import armitage.*;
import ui.*;
@@ -10,14 +8,11 @@
import sleep.runtime.*;
import sleep.engine.*;
-import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
-import java.io.IOException;
-
/* an API to bind new menus in Armitage */
public class MenuBridge implements Loadable, Function, Environment {
protected ArmitageApplication armitage;
diff --git a/src/cortana/gui/MenuBuilder.java b/armitage/src/main/java/cortana/gui/MenuBuilder.java
similarity index 89%
rename from src/cortana/gui/MenuBuilder.java
rename to armitage/src/main/java/cortana/gui/MenuBuilder.java
index 44cef4d4..3f18d329 100644
--- a/src/cortana/gui/MenuBuilder.java
+++ b/armitage/src/main/java/cortana/gui/MenuBuilder.java
@@ -1,23 +1,15 @@
package cortana.gui;
-import cortana.core.*;
-import msf.*;
import armitage.*;
-import ui.*;
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import javax.swing.event.*;
-
-import java.io.IOException;
/* an API to bind new menus in Armitage */
public class MenuBuilder {
diff --git a/src/cortana/gui/ScriptedMenu.java b/armitage/src/main/java/cortana/gui/ScriptedMenu.java
similarity index 94%
rename from src/cortana/gui/ScriptedMenu.java
rename to armitage/src/main/java/cortana/gui/ScriptedMenu.java
index ba8fa3e4..0665cb76 100644
--- a/src/cortana/gui/ScriptedMenu.java
+++ b/armitage/src/main/java/cortana/gui/ScriptedMenu.java
@@ -1,13 +1,9 @@
package cortana.gui;
-import java.awt.*;
-import java.awt.event.*;
-
import javax.swing.*;
import javax.swing.event.*;
import sleep.runtime.*;
-import sleep.engine.*;
import sleep.bridges.*;
import java.util.*;
diff --git a/src/cortana/gui/ScriptedMenuItem.java b/armitage/src/main/java/cortana/gui/ScriptedMenuItem.java
similarity index 98%
rename from src/cortana/gui/ScriptedMenuItem.java
rename to armitage/src/main/java/cortana/gui/ScriptedMenuItem.java
index a3f3121a..f72744fe 100644
--- a/src/cortana/gui/ScriptedMenuItem.java
+++ b/armitage/src/main/java/cortana/gui/ScriptedMenuItem.java
@@ -3,7 +3,6 @@
import sleep.runtime.*;
import sleep.bridges.*;
-import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
diff --git a/src/cortana/gui/UIBridge.java b/armitage/src/main/java/cortana/gui/UIBridge.java
similarity index 89%
rename from src/cortana/gui/UIBridge.java
rename to armitage/src/main/java/cortana/gui/UIBridge.java
index 42fe1176..97e00083 100644
--- a/src/cortana/gui/UIBridge.java
+++ b/armitage/src/main/java/cortana/gui/UIBridge.java
@@ -1,23 +1,16 @@
package cortana.gui;
import cortana.core.*;
-import msf.*;
import armitage.*;
-import ui.*;
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
-import java.awt.*;
-import java.awt.event.*;
import javax.swing.*;
import java.util.*;
-import java.io.IOException;
-
/* some methods to help out with user interface stuff */
public class UIBridge implements Loadable, Function {
protected ArmitageApplication armitage;
diff --git a/src/cortana/metasploit/ConsoleBridge.java b/armitage/src/main/java/cortana/metasploit/ConsoleBridge.java
similarity index 98%
rename from src/cortana/metasploit/ConsoleBridge.java
rename to armitage/src/main/java/cortana/metasploit/ConsoleBridge.java
index d153352d..4fa1b728 100644
--- a/src/cortana/metasploit/ConsoleBridge.java
+++ b/armitage/src/main/java/cortana/metasploit/ConsoleBridge.java
@@ -8,14 +8,9 @@
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
-import javax.swing.*;
-
public class ConsoleBridge implements Loadable, Function, ConsoleQueue.ConsoleCallback {
protected EventManager events;
protected FilterManager filters;
diff --git a/src/cortana/metasploit/EventLogBridge.java b/armitage/src/main/java/cortana/metasploit/EventLogBridge.java
similarity index 97%
rename from src/cortana/metasploit/EventLogBridge.java
rename to armitage/src/main/java/cortana/metasploit/EventLogBridge.java
index 43cd495f..e2e4e0d7 100644
--- a/src/cortana/metasploit/EventLogBridge.java
+++ b/armitage/src/main/java/cortana/metasploit/EventLogBridge.java
@@ -7,12 +7,9 @@
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
/* add an API for interfacing with the event log... */
public class EventLogBridge implements Loadable, Function, ConsoleCallback {
protected EventManager events;
diff --git a/src/cortana/metasploit/MetasploitBridge.java b/armitage/src/main/java/cortana/metasploit/MetasploitBridge.java
similarity index 100%
rename from src/cortana/metasploit/MetasploitBridge.java
rename to armitage/src/main/java/cortana/metasploit/MetasploitBridge.java
diff --git a/src/cortana/metasploit/MeterpreterBridge.java b/armitage/src/main/java/cortana/metasploit/MeterpreterBridge.java
similarity index 98%
rename from src/cortana/metasploit/MeterpreterBridge.java
rename to armitage/src/main/java/cortana/metasploit/MeterpreterBridge.java
index 897a522f..f430d323 100644
--- a/src/cortana/metasploit/MeterpreterBridge.java
+++ b/armitage/src/main/java/cortana/metasploit/MeterpreterBridge.java
@@ -7,12 +7,9 @@
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
public class MeterpreterBridge implements Loadable, Function, MeterpreterSession.MeterpreterCallback {
protected EventManager events;
protected FilterManager filters;
diff --git a/src/cortana/metasploit/ShellBridge.java b/armitage/src/main/java/cortana/metasploit/ShellBridge.java
similarity index 98%
rename from src/cortana/metasploit/ShellBridge.java
rename to armitage/src/main/java/cortana/metasploit/ShellBridge.java
index 85db4791..d2f4ef7d 100644
--- a/src/cortana/metasploit/ShellBridge.java
+++ b/armitage/src/main/java/cortana/metasploit/ShellBridge.java
@@ -7,14 +7,9 @@
import sleep.bridges.*;
import sleep.interfaces.*;
import sleep.runtime.*;
-import sleep.engine.*;
import java.util.*;
-import java.io.IOException;
-
-import javax.swing.*;
-
public class ShellBridge implements Loadable, Function, ShellSession.ShellCallback {
protected EventManager events;
protected FilterManager filters;
diff --git a/src/cortana/metasploit/ShellSession.java b/armitage/src/main/java/cortana/metasploit/ShellSession.java
similarity index 100%
rename from src/cortana/metasploit/ShellSession.java
rename to armitage/src/main/java/cortana/metasploit/ShellSession.java
diff --git a/src/cortana/support/CortanaUtilities.java b/armitage/src/main/java/cortana/support/CortanaUtilities.java
similarity index 100%
rename from src/cortana/support/CortanaUtilities.java
rename to armitage/src/main/java/cortana/support/CortanaUtilities.java
diff --git a/src/cortana/support/Heartbeat.java b/armitage/src/main/java/cortana/support/Heartbeat.java
similarity index 98%
rename from src/cortana/support/Heartbeat.java
rename to armitage/src/main/java/cortana/support/Heartbeat.java
index 27aff643..3ecd689b 100644
--- a/src/cortana/support/Heartbeat.java
+++ b/armitage/src/main/java/cortana/support/Heartbeat.java
@@ -1,7 +1,6 @@
package cortana.support;
import cortana.core.*;
-import cortana.*;
import java.util.*;
diff --git a/src/cortana/support/LockBridge.java b/armitage/src/main/java/cortana/support/LockBridge.java
similarity index 99%
rename from src/cortana/support/LockBridge.java
rename to armitage/src/main/java/cortana/support/LockBridge.java
index 0d4d6d34..0a92007e 100644
--- a/src/cortana/support/LockBridge.java
+++ b/armitage/src/main/java/cortana/support/LockBridge.java
@@ -1,7 +1,6 @@
package cortana.support;
import cortana.core.*;
-import cortana.*;
import java.util.*;
diff --git a/src/cortana/support/Shared.java b/armitage/src/main/java/cortana/support/Shared.java
similarity index 100%
rename from src/cortana/support/Shared.java
rename to armitage/src/main/java/cortana/support/Shared.java
diff --git a/src/graph/CircleLayout.java b/armitage/src/main/java/graph/CircleLayout.java
similarity index 100%
rename from src/graph/CircleLayout.java
rename to armitage/src/main/java/graph/CircleLayout.java
diff --git a/src/graph/GraphPopup.java b/armitage/src/main/java/graph/GraphPopup.java
similarity index 100%
rename from src/graph/GraphPopup.java
rename to armitage/src/main/java/graph/GraphPopup.java
diff --git a/src/graph/NetworkGraph.java b/armitage/src/main/java/graph/NetworkGraph.java
similarity index 100%
rename from src/graph/NetworkGraph.java
rename to armitage/src/main/java/graph/NetworkGraph.java
diff --git a/src/graph/RefreshGraph.java b/armitage/src/main/java/graph/RefreshGraph.java
similarity index 100%
rename from src/graph/RefreshGraph.java
rename to armitage/src/main/java/graph/RefreshGraph.java
diff --git a/src/graph/Refreshable.java b/armitage/src/main/java/graph/Refreshable.java
similarity index 100%
rename from src/graph/Refreshable.java
rename to armitage/src/main/java/graph/Refreshable.java
diff --git a/src/graph/Route.java b/armitage/src/main/java/graph/Route.java
similarity index 100%
rename from src/graph/Route.java
rename to armitage/src/main/java/graph/Route.java
diff --git a/src/graph/TouchList.java b/armitage/src/main/java/graph/TouchList.java
similarity index 100%
rename from src/graph/TouchList.java
rename to armitage/src/main/java/graph/TouchList.java
diff --git a/src/graph/TouchMap.java b/armitage/src/main/java/graph/TouchMap.java
similarity index 100%
rename from src/graph/TouchMap.java
rename to armitage/src/main/java/graph/TouchMap.java
diff --git a/src/msf/Async.java b/armitage/src/main/java/msf/Async.java
similarity index 100%
rename from src/msf/Async.java
rename to armitage/src/main/java/msf/Async.java
diff --git a/src/msf/Base64.java b/armitage/src/main/java/msf/Base64.java
similarity index 100%
rename from src/msf/Base64.java
rename to armitage/src/main/java/msf/Base64.java
diff --git a/src/msf/ConsolePool.java b/armitage/src/main/java/msf/ConsolePool.java
similarity index 100%
rename from src/msf/ConsolePool.java
rename to armitage/src/main/java/msf/ConsolePool.java
diff --git a/src/msf/DatabaseImpl.java b/armitage/src/main/java/msf/DatabaseImpl.java
similarity index 100%
rename from src/msf/DatabaseImpl.java
rename to armitage/src/main/java/msf/DatabaseImpl.java
diff --git a/src/msf/MeterpreterSession.java b/armitage/src/main/java/msf/MeterpreterSession.java
similarity index 100%
rename from src/msf/MeterpreterSession.java
rename to armitage/src/main/java/msf/MeterpreterSession.java
diff --git a/src/msf/MsgRpcImpl.java b/armitage/src/main/java/msf/MsgRpcImpl.java
similarity index 100%
rename from src/msf/MsgRpcImpl.java
rename to armitage/src/main/java/msf/MsgRpcImpl.java
diff --git a/src/msf/RpcAsync.java b/armitage/src/main/java/msf/RpcAsync.java
similarity index 100%
rename from src/msf/RpcAsync.java
rename to armitage/src/main/java/msf/RpcAsync.java
diff --git a/src/msf/RpcCacheImpl.java b/armitage/src/main/java/msf/RpcCacheImpl.java
similarity index 100%
rename from src/msf/RpcCacheImpl.java
rename to armitage/src/main/java/msf/RpcCacheImpl.java
diff --git a/src/msf/RpcCallback.java b/armitage/src/main/java/msf/RpcCallback.java
similarity index 100%
rename from src/msf/RpcCallback.java
rename to armitage/src/main/java/msf/RpcCallback.java
diff --git a/src/msf/RpcConnection.java b/armitage/src/main/java/msf/RpcConnection.java
similarity index 100%
rename from src/msf/RpcConnection.java
rename to armitage/src/main/java/msf/RpcConnection.java
diff --git a/src/msf/RpcConnectionImpl.java b/armitage/src/main/java/msf/RpcConnectionImpl.java
similarity index 100%
rename from src/msf/RpcConnectionImpl.java
rename to armitage/src/main/java/msf/RpcConnectionImpl.java
diff --git a/src/msf/RpcQueue.java b/armitage/src/main/java/msf/RpcQueue.java
similarity index 100%
rename from src/msf/RpcQueue.java
rename to armitage/src/main/java/msf/RpcQueue.java
diff --git a/src/ssl/ArmitageTrustListener.java b/armitage/src/main/java/ssl/ArmitageTrustListener.java
similarity index 100%
rename from src/ssl/ArmitageTrustListener.java
rename to armitage/src/main/java/ssl/ArmitageTrustListener.java
diff --git a/src/ssl/ArmitageTrustManager.java b/armitage/src/main/java/ssl/ArmitageTrustManager.java
similarity index 100%
rename from src/ssl/ArmitageTrustManager.java
rename to armitage/src/main/java/ssl/ArmitageTrustManager.java
diff --git a/src/ssl/SecureServerSocket.java b/armitage/src/main/java/ssl/SecureServerSocket.java
similarity index 100%
rename from src/ssl/SecureServerSocket.java
rename to armitage/src/main/java/ssl/SecureServerSocket.java
diff --git a/src/ssl/SecureSocket.java b/armitage/src/main/java/ssl/SecureSocket.java
similarity index 100%
rename from src/ssl/SecureSocket.java
rename to armitage/src/main/java/ssl/SecureSocket.java
diff --git a/src/table/GenericTableModel.java b/armitage/src/main/java/table/GenericTableModel.java
similarity index 100%
rename from src/table/GenericTableModel.java
rename to armitage/src/main/java/table/GenericTableModel.java
diff --git a/src/table/NetworkTable.java b/armitage/src/main/java/table/NetworkTable.java
similarity index 100%
rename from src/table/NetworkTable.java
rename to armitage/src/main/java/table/NetworkTable.java
diff --git a/src/tree/SimpleTreeNode.java b/armitage/src/main/java/tree/SimpleTreeNode.java
similarity index 100%
rename from src/tree/SimpleTreeNode.java
rename to armitage/src/main/java/tree/SimpleTreeNode.java
diff --git a/src/ui/APasswordField.java b/armitage/src/main/java/ui/APasswordField.java
similarity index 100%
rename from src/ui/APasswordField.java
rename to armitage/src/main/java/ui/APasswordField.java
diff --git a/src/ui/ATable.java b/armitage/src/main/java/ui/ATable.java
similarity index 100%
rename from src/ui/ATable.java
rename to armitage/src/main/java/ui/ATable.java
diff --git a/src/ui/ATextField.java b/armitage/src/main/java/ui/ATextField.java
similarity index 100%
rename from src/ui/ATextField.java
rename to armitage/src/main/java/ui/ATextField.java
diff --git a/src/ui/ATree.java b/armitage/src/main/java/ui/ATree.java
similarity index 100%
rename from src/ui/ATree.java
rename to armitage/src/main/java/ui/ATree.java
diff --git a/src/ui/CopyPopup.java b/armitage/src/main/java/ui/CopyPopup.java
similarity index 100%
rename from src/ui/CopyPopup.java
rename to armitage/src/main/java/ui/CopyPopup.java
diff --git a/src/ui/CutCopyPastePopup.java b/armitage/src/main/java/ui/CutCopyPastePopup.java
similarity index 100%
rename from src/ui/CutCopyPastePopup.java
rename to armitage/src/main/java/ui/CutCopyPastePopup.java
diff --git a/src/ui/DraggableTabbedPane.java b/armitage/src/main/java/ui/DraggableTabbedPane.java
similarity index 100%
rename from src/ui/DraggableTabbedPane.java
rename to armitage/src/main/java/ui/DraggableTabbedPane.java
diff --git a/src/ui/DynamicMenu.java b/armitage/src/main/java/ui/DynamicMenu.java
similarity index 100%
rename from src/ui/DynamicMenu.java
rename to armitage/src/main/java/ui/DynamicMenu.java
diff --git a/src/ui/KeyBindings.java b/armitage/src/main/java/ui/KeyBindings.java
similarity index 100%
rename from src/ui/KeyBindings.java
rename to armitage/src/main/java/ui/KeyBindings.java
diff --git a/src/ui/KeyHandler.java b/armitage/src/main/java/ui/KeyHandler.java
similarity index 100%
rename from src/ui/KeyHandler.java
rename to armitage/src/main/java/ui/KeyHandler.java
diff --git a/src/ui/ModuleTransferHandler.java b/armitage/src/main/java/ui/ModuleTransferHandler.java
similarity index 100%
rename from src/ui/ModuleTransferHandler.java
rename to armitage/src/main/java/ui/ModuleTransferHandler.java
diff --git a/src/ui/MultiFrame.java b/armitage/src/main/java/ui/MultiFrame.java
similarity index 100%
rename from src/ui/MultiFrame.java
rename to armitage/src/main/java/ui/MultiFrame.java
diff --git a/src/ui/SafeDialogs.java b/armitage/src/main/java/ui/SafeDialogs.java
similarity index 100%
rename from src/ui/SafeDialogs.java
rename to armitage/src/main/java/ui/SafeDialogs.java
diff --git a/src/ui/SafeMouseListener.java b/armitage/src/main/java/ui/SafeMouseListener.java
similarity index 100%
rename from src/ui/SafeMouseListener.java
rename to armitage/src/main/java/ui/SafeMouseListener.java
diff --git a/src/ui/ScreenshotManager.java b/armitage/src/main/java/ui/ScreenshotManager.java
similarity index 100%
rename from src/ui/ScreenshotManager.java
rename to armitage/src/main/java/ui/ScreenshotManager.java
diff --git a/src/ui/UploadFile.java b/armitage/src/main/java/ui/UploadFile.java
similarity index 100%
rename from src/ui/UploadFile.java
rename to armitage/src/main/java/ui/UploadFile.java
diff --git a/src/ui/ZoomableImage.java b/armitage/src/main/java/ui/ZoomableImage.java
similarity index 100%
rename from src/ui/ZoomableImage.java
rename to armitage/src/main/java/ui/ZoomableImage.java
diff --git a/resources/about.html b/armitage/src/main/resources/resources/about.html
similarity index 100%
rename from resources/about.html
rename to armitage/src/main/resources/resources/about.html
diff --git a/resources/android.png b/armitage/src/main/resources/resources/android.png
similarity index 100%
rename from resources/android.png
rename to armitage/src/main/resources/resources/android.png
diff --git a/resources/armitage-icon.gif b/armitage/src/main/resources/resources/armitage-icon.gif
similarity index 100%
rename from resources/armitage-icon.gif
rename to armitage/src/main/resources/resources/armitage-icon.gif
diff --git a/resources/armitage-logo.gif b/armitage/src/main/resources/resources/armitage-logo.gif
similarity index 100%
rename from resources/armitage-logo.gif
rename to armitage/src/main/resources/resources/armitage-logo.gif
diff --git a/resources/armitage.prop b/armitage/src/main/resources/resources/armitage.prop
similarity index 100%
rename from resources/armitage.prop
rename to armitage/src/main/resources/resources/armitage.prop
diff --git a/resources/bsd.png b/armitage/src/main/resources/resources/bsd.png
similarity index 100%
rename from resources/bsd.png
rename to armitage/src/main/resources/resources/bsd.png
diff --git a/resources/cisco.png b/armitage/src/main/resources/resources/cisco.png
similarity index 100%
rename from resources/cisco.png
rename to armitage/src/main/resources/resources/cisco.png
diff --git a/resources/computer.png b/armitage/src/main/resources/resources/computer.png
similarity index 100%
rename from resources/computer.png
rename to armitage/src/main/resources/resources/computer.png
diff --git a/resources/error.txt b/armitage/src/main/resources/resources/error.txt
similarity index 100%
rename from resources/error.txt
rename to armitage/src/main/resources/resources/error.txt
diff --git a/resources/eventlog.style b/armitage/src/main/resources/resources/eventlog.style
similarity index 100%
rename from resources/eventlog.style
rename to armitage/src/main/resources/resources/eventlog.style
diff --git a/resources/firewall.png b/armitage/src/main/resources/resources/firewall.png
similarity index 100%
rename from resources/firewall.png
rename to armitage/src/main/resources/resources/firewall.png
diff --git a/resources/hacked.png b/armitage/src/main/resources/resources/hacked.png
similarity index 100%
rename from resources/hacked.png
rename to armitage/src/main/resources/resources/hacked.png
diff --git a/resources/ios.png b/armitage/src/main/resources/resources/ios.png
similarity index 100%
rename from resources/ios.png
rename to armitage/src/main/resources/resources/ios.png
diff --git a/resources/linux.png b/armitage/src/main/resources/resources/linux.png
similarity index 100%
rename from resources/linux.png
rename to armitage/src/main/resources/resources/linux.png
diff --git a/resources/macosx.png b/armitage/src/main/resources/resources/macosx.png
similarity index 100%
rename from resources/macosx.png
rename to armitage/src/main/resources/resources/macosx.png
diff --git a/resources/msfconsole.style b/armitage/src/main/resources/resources/msfconsole.style
similarity index 100%
rename from resources/msfconsole.style
rename to armitage/src/main/resources/resources/msfconsole.style
diff --git a/resources/msfrpcd.bat b/armitage/src/main/resources/resources/msfrpcd.bat
similarity index 100%
rename from resources/msfrpcd.bat
rename to armitage/src/main/resources/resources/msfrpcd.bat
diff --git a/resources/msfrpcd_new.bat b/armitage/src/main/resources/resources/msfrpcd_new.bat
similarity index 100%
rename from resources/msfrpcd_new.bat
rename to armitage/src/main/resources/resources/msfrpcd_new.bat
diff --git a/resources/printer.png b/armitage/src/main/resources/resources/printer.png
similarity index 100%
rename from resources/printer.png
rename to armitage/src/main/resources/resources/printer.png
diff --git a/resources/solaris.png b/armitage/src/main/resources/resources/solaris.png
similarity index 100%
rename from resources/solaris.png
rename to armitage/src/main/resources/resources/solaris.png
diff --git a/resources/unknown.png b/armitage/src/main/resources/resources/unknown.png
similarity index 100%
rename from resources/unknown.png
rename to armitage/src/main/resources/resources/unknown.png
diff --git a/resources/vmware.png b/armitage/src/main/resources/resources/vmware.png
similarity index 100%
rename from resources/vmware.png
rename to armitage/src/main/resources/resources/vmware.png
diff --git a/resources/windows2000.png b/armitage/src/main/resources/resources/windows2000.png
similarity index 100%
rename from resources/windows2000.png
rename to armitage/src/main/resources/resources/windows2000.png
diff --git a/resources/windows7.png b/armitage/src/main/resources/resources/windows7.png
similarity index 100%
rename from resources/windows7.png
rename to armitage/src/main/resources/resources/windows7.png
diff --git a/resources/windows8.png b/armitage/src/main/resources/resources/windows8.png
similarity index 100%
rename from resources/windows8.png
rename to armitage/src/main/resources/resources/windows8.png
diff --git a/resources/windowsxp.png b/armitage/src/main/resources/resources/windowsxp.png
similarity index 100%
rename from resources/windowsxp.png
rename to armitage/src/main/resources/resources/windowsxp.png
diff --git a/scripts-cortana/cortanadb.sl b/armitage/src/main/resources/scripts-cortana/cortanadb.sl
similarity index 100%
rename from scripts-cortana/cortanadb.sl
rename to armitage/src/main/resources/scripts-cortana/cortanadb.sl
diff --git a/scripts-cortana/internal-ui-support.sl b/armitage/src/main/resources/scripts-cortana/internal-ui-support.sl
similarity index 100%
rename from scripts-cortana/internal-ui-support.sl
rename to armitage/src/main/resources/scripts-cortana/internal-ui-support.sl
diff --git a/scripts-cortana/internal-ui.sl b/armitage/src/main/resources/scripts-cortana/internal-ui.sl
similarity index 100%
rename from scripts-cortana/internal-ui.sl
rename to armitage/src/main/resources/scripts-cortana/internal-ui.sl
diff --git a/scripts-cortana/internal.sl b/armitage/src/main/resources/scripts-cortana/internal.sl
similarity index 100%
rename from scripts-cortana/internal.sl
rename to armitage/src/main/resources/scripts-cortana/internal.sl
diff --git a/scripts/armitage.sl b/armitage/src/main/resources/scripts/armitage.sl
similarity index 100%
rename from scripts/armitage.sl
rename to armitage/src/main/resources/scripts/armitage.sl
diff --git a/scripts/attacks.sl b/armitage/src/main/resources/scripts/attacks.sl
similarity index 100%
rename from scripts/attacks.sl
rename to armitage/src/main/resources/scripts/attacks.sl
diff --git a/scripts/browser.sl b/armitage/src/main/resources/scripts/browser.sl
similarity index 100%
rename from scripts/browser.sl
rename to armitage/src/main/resources/scripts/browser.sl
diff --git a/scripts/collaborate.sl b/armitage/src/main/resources/scripts/collaborate.sl
similarity index 100%
rename from scripts/collaborate.sl
rename to armitage/src/main/resources/scripts/collaborate.sl
diff --git a/scripts/downloads.sl b/armitage/src/main/resources/scripts/downloads.sl
similarity index 100%
rename from scripts/downloads.sl
rename to armitage/src/main/resources/scripts/downloads.sl
diff --git a/scripts/gui.sl b/armitage/src/main/resources/scripts/gui.sl
similarity index 95%
rename from scripts/gui.sl
rename to armitage/src/main/resources/scripts/gui.sl
index b6d5b299..7a055e98 100644
--- a/scripts/gui.sl
+++ b/armitage/src/main/resources/scripts/gui.sl
@@ -1,483 +1,483 @@
-#
-# This file defines the main GUI and loads additional modules
-#
-
-debug(7 | 34);
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.border.*;
-import javax.swing.table.*;
-import javax.swing.tree.*;
-import javax.imageio.*;
-
-import java.awt.*;
-import java.awt.image.*;
-import java.awt.event.*;
-import java.awt.datatransfer.*;
-
-import graph.*;
-import armitage.*;
-import table.*;
-import ui.*;
-
-# Create a new menu, returns the menu, you have to attach it to something
-# menu([$parent], "Name", 'Accelerator')
-sub menu {
- return invoke(&_menu, filter_data_array("menu_parent", @_));
-}
-
-sub _menu {
- local('$menu');
- if (size(@_) == 2) {
- $menu = [new JMenu: $1];
-
- if ($2 !is $null) {
- [$menu setMnemonic: casti(charAt($2, 0), 'c')];
- }
- }
- else {
- $menu = invoke(&menu, sublist(@_, 1));
- [$1 add: $menu];
- }
- return $menu;
-}
-
-sub dynmenu {
- local('$menu');
- $menu = [new DynamicMenu: $2];
- [$menu setMnemonic: casti(charAt($3, 0), 'c')];
- [$menu setHandler: $4];
- [$1 add: $menu];
- return $menu;
-}
-
-# create a separator in the parent menu
-sub separator {
- [$1 addSeparator];
-}
-
-# create a menu item, attaches it to the specified parent (based on the Name)
-# item($parent, "Name", 'accelerator', &listener)
-sub item {
- return invoke(&_item, filter_data_array("menu_item", @_));
-}
-
-sub _item {
- local('$item');
- if ($1 is $null || $2 is $null) {
- return;
- }
-
- $item = [new JMenuItem: $2];
- if ($3 !is $null) {
- [$item setMnemonic: casti(charAt($3, 0), 'c')];
- }
-
- if ($4 is $null) { warn("Incomplete: " . @_); }
-
- [$item addActionListener: lambda({
- invoke($function);
- }, $function => $4)];
-
- [$1 add: $item];
- return $item;
-}
-
-sub dispatchEvent {
- if ([SwingUtilities isEventDispatchThread]) {
- [$1];
- }
- else {
- [SwingUtilities invokeLater: $1];
- }
-}
-
-sub showError {
- fork({
- dispatchEvent(lambda({
- [JOptionPane showMessageDialog: $null, $message];
- }, \$message));
- }, $message => $1, \$__frame__);
-}
-
-sub showErrorAndQuit {
- [JOptionPane showMessageDialog: $__frame__, $1];
- [$__frame__ closeConnect];
-}
-
-sub ask {
- local('$2');
- return [JOptionPane showInputDialog: "$1", "$2"];
-}
-
-# safe version of ask...
-sub ask_async {
- [ui.SafeDialogs ask: "$1", "$2", $3];
-}
-
-# askYesNo("title", "text", &callback)
-sub askYesNo {
- [ui.SafeDialogs askYesNo: $1, $2, $3];
-}
-
-# openFile(&callback, $title => "foo");
-sub openFile {
- local('$title $sel $dir $multi $dirsonly');
- [ui.SafeDialogs openFile: $title, $sel, $dir, $multi, $dirsonly, $1];
-}
-
-# the newer... async version of saveFile2
-sub saveFile2 {
- local('$sel');
- [ui.SafeDialogs saveFile: $__frame__, $sel, $1];
-}
-
-# label_for("text", width, component)
-sub label_for {
- local('$panel $label $size');
- $panel = [new JPanel];
- [$panel setLayout: [new FlowLayout: [FlowLayout LEFT]]];
-
- $label = [new JLabel: $1];
-
- $size = [$label getPreferredSize];
- [$label setPreferredSize: [new Dimension: $2, [$size getHeight]]];
-
- [$panel add: $label];
- [$panel add: $3];
-
- if (size(@_) >= 4) {
- [$panel add: $4];
- }
-
- return $panel;
-}
-
-sub center {
- local('$panel $c');
- $panel = [new JPanel];
- [$panel setLayout: [new FlowLayout: [FlowLayout CENTER]]];
-
- foreach $c (@_) {
- [$panel add: $c];
- }
-
- return $panel;
-}
-
-sub left {
- local('$panel $c');
- $panel = [new JPanel];
- [$panel setLayout: [new FlowLayout: [FlowLayout LEFT]]];
-
- foreach $c (@_) {
- [$panel add: $c];
- }
-
- return $panel;
-}
-
-sub dialog {
- local('$dialog $4');
- $dialog = [new JFrame: $1];
- [$dialog setIconImage: [ImageIO read: resource("resources/armitage-icon.gif")]];
- [$dialog setSize: $2, $3];
- [$dialog setLayout: [new BorderLayout]];
- [$dialog setLocationRelativeTo: $__frame__];
- return $dialog;
-}
-
-sub window {
- local('$dialog $4');
- $dialog = [new JFrame: $1];
- [$dialog setIconImage: [ImageIO read: resource("resources/armitage-icon.gif")]];
-
- fork({
- [$dialog addWindowListener: {
- if ($0 eq "windowClosing") {
- [$__frame__ closeConnect];
- }
- }];
- }, \$__frame__, \$dialog);
-
- [$dialog setSize: $2, $3];
- [$dialog setLayout: [new BorderLayout]];
- return $dialog;
-}
-
-# overlay_images(@("image.png", "image2.png", "..."))
-# constructs an image by overlaying all the specified images over eachother.
-# this function caches the result so each combination is only created once.
-sub overlay_images {
- this('%cache');
-
- if (join(';', $1) in %cache) {
- return %cache[join(';', $1)];
- }
-
- local('$file $image $buffered $graphics $resource');
-
- $buffered = [new BufferedImage: 1000, 776, [BufferedImage TYPE_INT_ARGB]];
- $graphics = [$buffered createGraphics];
- foreach $file ($1) {
- $resource = resource($file);
- $image = [ImageIO read: $resource];
- closef($resource);
- [$graphics drawImage: $image, 0, 0, 1000, 776, $null];
- }
- [$graphics dispose];
-
- $buffered = [$buffered getScaledInstance: 250 / $scale, 194 / $scale, [Image SCALE_SMOOTH]];
-
- %cache[join(';', $1)] = $buffered;
- return $buffered;
-}
-
-sub iconToImage {
- if ($1 isa ^ImageIcon) {
- return [$1 getImage];
- }
- else {
- local('$buffered $g');
- $buffered = [new BufferedImage: [$1 getIconWidth], [$1 getIconHeight], [BufferedImage TYPE_INT_ARGB]];
- $g = [$buffered createGraphics];
- [$1 paintIcon: $null, $g, $2, $3];
- [$g dispose];
- return $buffered;
- }
-}
-
-sub imageToImage {
- local('$buffered $g');
- $buffered = [new BufferedImage: [$1 getWidth: $null], [$1 getHeight: $null], [BufferedImage TYPE_INT_ARGB]];
- $g = [$buffered createGraphics];
- [$g drawImage: $1, 0, 0, [$1 getWidth: $null], [$1 getHeight: $null], $null];
- [$g dispose];
- return $buffered;
-}
-
-sub select {
- local('$combo');
- $combo = [new JComboBox: cast($1, ^String)];
- [$combo setSelectedItem: $2];
- return $combo;
-}
-
-# buildTreeNodes(@)
-sub buildTree {
- local('%nodes $entry $parent $path');
-
- foreach $entry ($1) {
- $parent = %nodes;
- foreach $path (split('\\/', $entry)) {
- if ($path !in $parent) {
- $parent[$path] = %();
- }
- $parent = $parent[$path];
- }
- }
- return %nodes;
-}
-
-# treeNodes($1, buildTree(@(...)))
-sub treeNodes {
- local('$temp $p');
-
- if ($1 is $null) {
- $1 = [new DefaultMutableTreeNode: "modules"];
- [$1 setAllowsChildren: 1];
- }
-
-
- foreach $temp (sorta(keys($2))) {
- $p = [new DefaultMutableTreeNode: $temp];
- [$p setAllowsChildren: 1];
-
- if (size($2[$temp]) > 0) {
- treeNodes($p, $2[$temp]);
- }
-
- [$1 add: $p];
- }
-
- return $1;
-}
-
-sub wrapComponent {
- local('$panel');
- $panel = [new JPanel];
- [$panel setLayout: [new BorderLayout]];
- [$panel add: $1, [BorderLayout CENTER]];
- [$panel setBorder: [BorderFactory createEmptyBorder: $2, $2, $2, $2]];
- return $panel;
-}
-
-sub thread {
- local('$thread');
- $thread = [new ArmitageThread: $1];
- [$thread start];
-}
-
-sub compareHosts {
- if ($1 eq "unknown") {
- return compareHosts("0.0.0.0", $2);
- }
- else if ($2 eq "unknown") {
- return compareHosts($1, "0.0.0.0");
- }
- else {
- return [Route ipToLong: $1] <=> [Route ipToLong: $2];
- }
-}
-
-# tells table to save any edited cells before going forward...
-sub syncTable {
- if ([$1 isEditing]) {
- [[$1 getCellEditor] stopCellEditing];
- }
-}
-
-sub isWindows {
- return iff("*Windows*" iswm systemProperties()["os.name"], 1);
-}
-
-sub selected {
- return [$2 getSelectedValueFromColumn: $1, $3];
-}
-
-# ($table, $model) = setupTable("lead", @rows)
-sub setupTable {
- local('$table $model $sorter $row $index $col');
- $model = [new GenericTableModel: $2, $1, 8];
- foreach $row ($3) {
- [$model _addEntry: $row];
- }
-
- $table = [new ATable: $model];
- [[$table getSelectionModel] setSelectionMode: [ListSelectionModel SINGLE_SELECTION]];
- $sorter = [new TableRowSorter: $model];
- [$table setRowSorter: $sorter];
-
- # make sure our columns have sorters that make sense
- foreach $index => $col ($2) {
- if ($col eq "session_host" || $col eq "host" || $col eq "Host") {
- [$sorter setComparator: $index, &compareHosts];
- }
- else if ($col eq "port" || $col eq "sid" || $col eq "Port") {
- [$sorter setComparator: $index, { return $1 <=> $2; }];
- }
- }
-
- return @($table, $model);
-}
-
-# creates a list dialog,
-# $1 = title, $2 = button text, $3 = columns, $4 = rows, $5 = callback
-sub quickListDialog {
- local('$dialog $panel $table $row $model $button $sorter $after $a $tablef');
- $dialog = dialog($1, $width, $height);
- $panel = [new JPanel];
- [$panel setLayout: [new BorderLayout]];
-
- ($table, $model) = setupTable($3[0], sublist($3, 1), $4);
- [$panel add: [new JScrollPane: $table], [BorderLayout CENTER]];
-
- if ($tablef !is $null) {
- [$tablef: $table, $model];
- }
-
- $button = [new JButton: $2];
- [$button addActionListener: lambda({
- [$callback : [$model getSelectedValueFromColumn: $table, $lead], $table, $model];
- [$dialog setVisible: 0];
- }, \$dialog, $callback => $5, \$model, \$table, $lead => $3[0])];
-
- local('$south');
- $south = [new JPanel];
- [$south setLayout: [new BoxLayout: $south, [BoxLayout Y_AXIS]]];
-
- if ($after !is $null) {
- foreach $a ($after) {
- [$south add: $a];
- }
- }
- [$south add: center($button)];
-
- [$panel add: $south, [BorderLayout SOUTH]];
- [$dialog add: $panel, [BorderLayout CENTER]];
- [$dialog show];
- [$dialog setVisible: 1];
-}
-
-sub setTableColumnWidths {
- local('$col $width $temp');
- foreach $col => $width ($2) {
- [[$1 getColumn: $col] setPreferredWidth: $width];
- }
-}
-
-sub tableRenderer {
- return [ATable getDefaultTableRenderer: $1, $2];
-}
-
-sub gotoFile {
- return lambda({
- local('$exception $ex');
- try {
- if ([Desktop isDesktopSupported]) {
- try {
- [[Desktop getDesktop] open: $f];
- }
- catch $ex {
- ask_async("Browse to this file:", $f, {});
- }
- }
- else {
- ask_async("Browse to this file:", $f, {});
- }
- }
- catch $exception {
- showError("Could not open $f $+ \n $+ $exception");
- }
- }, $f => $1);
-}
-
-sub isShift {
- return iff(([$1 getModifiers] & [ActionEvent SHIFT_MASK]) == [ActionEvent SHIFT_MASK], 1);
-}
-
-sub addMouseListener {
- [$1 addMouseListener: [new SafeMouseListener: $2]];
-}
-
-sub pad {
- local('$panel');
- $panel = [new JPanel];
- [$panel setLayout: [new BorderLayout]];
- [$panel add: $1, [BorderLayout CENTER]];
- [$panel setBorder: [BorderFactory createEmptyBorder: $2, $3, $4, $5]];
- return $panel;
-}
-
-sub setClipboard {
- local('$sel $cb');
- $sel = [new StringSelection: $1];
- $cb = [[Toolkit getDefaultToolkit] getSystemSelection];
- if ($cb !is $null) {
- [$cb setContents: $sel, $null];
- }
-
- $cb = [[Toolkit getDefaultToolkit] getSystemClipboard];
- if ($cb !is $null) {
- [$cb setContents: $sel, $null];
- }
-}
-
-sub setupMenu {
- [$frame setupMenu: $1, $2, _args($3)];
-}
-
-sub installMenu {
- [$frame installMenu: $1, $2, _args($3)];
-}
+#
+# This file defines the main GUI and loads additional modules
+#
+
+debug(7 | 34);
+
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.border.*;
+import javax.swing.table.*;
+import javax.swing.tree.*;
+import javax.imageio.*;
+
+import java.awt.*;
+import java.awt.image.*;
+import java.awt.event.*;
+import java.awt.datatransfer.*;
+
+import graph.*;
+import armitage.*;
+import table.*;
+import ui.*;
+
+# Create a new menu, returns the menu, you have to attach it to something
+# menu([$parent], "Name", 'Accelerator')
+sub menu {
+ return invoke(&_menu, filter_data_array("menu_parent", @_));
+}
+
+sub _menu {
+ local('$menu');
+ if (size(@_) == 2) {
+ $menu = [new JMenu: $1];
+
+ if ($2 !is $null) {
+ [$menu setMnemonic: casti(charAt($2, 0), 'c')];
+ }
+ }
+ else {
+ $menu = invoke(&menu, sublist(@_, 1));
+ [$1 add: $menu];
+ }
+ return $menu;
+}
+
+sub dynmenu {
+ local('$menu');
+ $menu = [new DynamicMenu: $2];
+ [$menu setMnemonic: casti(charAt($3, 0), 'c')];
+ [$menu setHandler: $4];
+ [$1 add: $menu];
+ return $menu;
+}
+
+# create a separator in the parent menu
+sub separator {
+ [$1 addSeparator];
+}
+
+# create a menu item, attaches it to the specified parent (based on the Name)
+# item($parent, "Name", 'accelerator', &listener)
+sub item {
+ return invoke(&_item, filter_data_array("menu_item", @_));
+}
+
+sub _item {
+ local('$item');
+ if ($1 is $null || $2 is $null) {
+ return;
+ }
+
+ $item = [new JMenuItem: $2];
+ if ($3 !is $null) {
+ [$item setMnemonic: casti(charAt($3, 0), 'c')];
+ }
+
+ if ($4 is $null) { warn("Incomplete: " . @_); }
+
+ [$item addActionListener: lambda({
+ invoke($function);
+ }, $function => $4)];
+
+ [$1 add: $item];
+ return $item;
+}
+
+sub dispatchEvent {
+ if ([SwingUtilities isEventDispatchThread]) {
+ [$1];
+ }
+ else {
+ [SwingUtilities invokeLater: $1];
+ }
+}
+
+sub showError {
+ fork({
+ dispatchEvent(lambda({
+ [JOptionPane showMessageDialog: $null, $message];
+ }, \$message));
+ }, $message => $1, \$__frame__);
+}
+
+sub showErrorAndQuit {
+ [JOptionPane showMessageDialog: $__frame__, $1];
+ [$__frame__ closeConnect];
+}
+
+sub ask {
+ local('$2');
+ return [JOptionPane showInputDialog: "$1", "$2"];
+}
+
+# safe version of ask...
+sub ask_async {
+ [ui.SafeDialogs ask: "$1", "$2", $3];
+}
+
+# askYesNo("title", "text", &callback)
+sub askYesNo {
+ [ui.SafeDialogs askYesNo: $1, $2, $3];
+}
+
+# openFile(&callback, $title => "foo");
+sub openFile {
+ local('$title $sel $dir $multi $dirsonly');
+ [ui.SafeDialogs openFile: $title, $sel, $dir, $multi, $dirsonly, $1];
+}
+
+# the newer... async version of saveFile2
+sub saveFile2 {
+ local('$sel');
+ [ui.SafeDialogs saveFile: $__frame__, $sel, $1];
+}
+
+# label_for("text", width, component)
+sub label_for {
+ local('$panel $label $size');
+ $panel = [new JPanel];
+ [$panel setLayout: [new FlowLayout: [FlowLayout LEFT]]];
+
+ $label = [new JLabel: $1];
+
+ $size = [$label getPreferredSize];
+ [$label setPreferredSize: [new Dimension: $2, [$size getHeight]]];
+
+ [$panel add: $label];
+ [$panel add: $3];
+
+ if (size(@_) >= 4) {
+ [$panel add: $4];
+ }
+
+ return $panel;
+}
+
+sub center {
+ local('$panel $c');
+ $panel = [new JPanel];
+ [$panel setLayout: [new FlowLayout: [FlowLayout CENTER]]];
+
+ foreach $c (@_) {
+ [$panel add: $c];
+ }
+
+ return $panel;
+}
+
+sub left {
+ local('$panel $c');
+ $panel = [new JPanel];
+ [$panel setLayout: [new FlowLayout: [FlowLayout LEFT]]];
+
+ foreach $c (@_) {
+ [$panel add: $c];
+ }
+
+ return $panel;
+}
+
+sub dialog {
+ local('$dialog $4');
+ $dialog = [new JFrame: $1];
+ [$dialog setIconImage: [ImageIO read: resource("resources/armitage-icon.gif")]];
+ [$dialog setSize: $2, $3];
+ [$dialog setLayout: [new BorderLayout]];
+ [$dialog setLocationRelativeTo: $__frame__];
+ return $dialog;
+}
+
+sub window {
+ local('$dialog $4');
+ $dialog = [new JFrame: $1];
+ [$dialog setIconImage: [ImageIO read: resource("resources/armitage-icon.gif")]];
+
+ fork({
+ [$dialog addWindowListener: {
+ if ($0 eq "windowClosing") {
+ [$__frame__ closeConnect];
+ }
+ }];
+ }, \$__frame__, \$dialog);
+
+ [$dialog setSize: $2, $3];
+ [$dialog setLayout: [new BorderLayout]];
+ return $dialog;
+}
+
+# overlay_images(@("image.png", "image2.png", "..."))
+# constructs an image by overlaying all the specified images over eachother.
+# this function caches the result so each combination is only created once.
+sub overlay_images {
+ this('%cache');
+
+ if (join(';', $1) in %cache) {
+ return %cache[join(';', $1)];
+ }
+
+ local('$file $image $buffered $graphics $resource');
+
+ $buffered = [new BufferedImage: 1000, 776, [BufferedImage TYPE_INT_ARGB]];
+ $graphics = [$buffered createGraphics];
+ foreach $file ($1) {
+ $resource = resource($file);
+ $image = [ImageIO read: $resource];
+ closef($resource);
+ [$graphics drawImage: $image, 0, 0, 1000, 776, $null];
+ }
+ [$graphics dispose];
+
+ $buffered = [$buffered getScaledInstance: 250 / $scale, 194 / $scale, [Image SCALE_SMOOTH]];
+
+ %cache[join(';', $1)] = $buffered;
+ return $buffered;
+}
+
+sub iconToImage {
+ if ($1 isa ^ImageIcon) {
+ return [$1 getImage];
+ }
+ else {
+ local('$buffered $g');
+ $buffered = [new BufferedImage: [$1 getIconWidth], [$1 getIconHeight], [BufferedImage TYPE_INT_ARGB]];
+ $g = [$buffered createGraphics];
+ [$1 paintIcon: $null, $g, $2, $3];
+ [$g dispose];
+ return $buffered;
+ }
+}
+
+sub imageToImage {
+ local('$buffered $g');
+ $buffered = [new BufferedImage: [$1 getWidth: $null], [$1 getHeight: $null], [BufferedImage TYPE_INT_ARGB]];
+ $g = [$buffered createGraphics];
+ [$g drawImage: $1, 0, 0, [$1 getWidth: $null], [$1 getHeight: $null], $null];
+ [$g dispose];
+ return $buffered;
+}
+
+sub select {
+ local('$combo');
+ $combo = [new JComboBox: cast($1, ^String)];
+ [$combo setSelectedItem: $2];
+ return $combo;
+}
+
+# buildTreeNodes(@)
+sub buildTree {
+ local('%nodes $entry $parent $path');
+
+ foreach $entry ($1) {
+ $parent = %nodes;
+ foreach $path (split('\\/', $entry)) {
+ if ($path !in $parent) {
+ $parent[$path] = %();
+ }
+ $parent = $parent[$path];
+ }
+ }
+ return %nodes;
+}
+
+# treeNodes($1, buildTree(@(...)))
+sub treeNodes {
+ local('$temp $p');
+
+ if ($1 is $null) {
+ $1 = [new DefaultMutableTreeNode: "modules"];
+ [$1 setAllowsChildren: 1];
+ }
+
+
+ foreach $temp (sorta(keys($2))) {
+ $p = [new DefaultMutableTreeNode: $temp];
+ [$p setAllowsChildren: 1];
+
+ if (size($2[$temp]) > 0) {
+ treeNodes($p, $2[$temp]);
+ }
+
+ [$1 add: $p];
+ }
+
+ return $1;
+}
+
+sub wrapComponent {
+ local('$panel');
+ $panel = [new JPanel];
+ [$panel setLayout: [new BorderLayout]];
+ [$panel add: $1, [BorderLayout CENTER]];
+ [$panel setBorder: [BorderFactory createEmptyBorder: $2, $2, $2, $2]];
+ return $panel;
+}
+
+sub thread {
+ local('$thread');
+ $thread = [new ArmitageThread: $1];
+ [$thread start];
+}
+
+sub compareHosts {
+ if ($1 eq "unknown") {
+ return compareHosts("0.0.0.0", $2);
+ }
+ else if ($2 eq "unknown") {
+ return compareHosts($1, "0.0.0.0");
+ }
+ else {
+ return [Route ipToLong: $1] <=> [Route ipToLong: $2];
+ }
+}
+
+# tells table to save any edited cells before going forward...
+sub syncTable {
+ if ([$1 isEditing]) {
+ [[$1 getCellEditor] stopCellEditing];
+ }
+}
+
+sub isWindows {
+ return iff("*Windows*" iswm systemProperties()["os.name"], 1);
+}
+
+sub selected {
+ return [$2 getSelectedValueFromColumn: $1, $3];
+}
+
+# ($table, $model) = setupTable("lead", @rows)
+sub setupTable {
+ local('$table $model $sorter $row $index $col');
+ $model = [new GenericTableModel: $2, $1, 8];
+ foreach $row ($3) {
+ [$model _addEntry: $row];
+ }
+
+ $table = [new ATable: $model];
+ [[$table getSelectionModel] setSelectionMode: [ListSelectionModel SINGLE_SELECTION]];
+ $sorter = [new TableRowSorter: $model];
+ [$table setRowSorter: $sorter];
+
+ # make sure our columns have sorters that make sense
+ foreach $index => $col ($2) {
+ if ($col eq "session_host" || $col eq "host" || $col eq "Host") {
+ [$sorter setComparator: $index, &compareHosts];
+ }
+ else if ($col eq "port" || $col eq "sid" || $col eq "Port") {
+ [$sorter setComparator: $index, { return $1 <=> $2; }];
+ }
+ }
+
+ return @($table, $model);
+}
+
+# creates a list dialog,
+# $1 = title, $2 = button text, $3 = columns, $4 = rows, $5 = callback
+sub quickListDialog {
+ local('$dialog $panel $table $row $model $button $sorter $after $a $tablef');
+ $dialog = dialog($1, $width, $height);
+ $panel = [new JPanel];
+ [$panel setLayout: [new BorderLayout]];
+
+ ($table, $model) = setupTable($3[0], sublist($3, 1), $4);
+ [$panel add: [new JScrollPane: $table], [BorderLayout CENTER]];
+
+ if ($tablef !is $null) {
+ [$tablef: $table, $model];
+ }
+
+ $button = [new JButton: $2];
+ [$button addActionListener: lambda({
+ [$callback : [$model getSelectedValueFromColumn: $table, $lead], $table, $model];
+ [$dialog setVisible: 0];
+ }, \$dialog, $callback => $5, \$model, \$table, $lead => $3[0])];
+
+ local('$south');
+ $south = [new JPanel];
+ [$south setLayout: [new BoxLayout: $south, [BoxLayout Y_AXIS]]];
+
+ if ($after !is $null) {
+ foreach $a ($after) {
+ [$south add: $a];
+ }
+ }
+ [$south add: center($button)];
+
+ [$panel add: $south, [BorderLayout SOUTH]];
+ [$dialog add: $panel, [BorderLayout CENTER]];
+ [$dialog show];
+ [$dialog setVisible: 1];
+}
+
+sub setTableColumnWidths {
+ local('$col $width $temp');
+ foreach $col => $width ($2) {
+ [[$1 getColumn: $col] setPreferredWidth: $width];
+ }
+}
+
+sub tableRenderer {
+ return [ATable getDefaultTableRenderer: $1, $2];
+}
+
+sub gotoFile {
+ return lambda({
+ local('$exception $ex');
+ try {
+ if ([Desktop isDesktopSupported]) {
+ try {
+ [[Desktop getDesktop] open: $f];
+ }
+ catch $ex {
+ ask_async("Browse to this file:", $f, {});
+ }
+ }
+ else {
+ ask_async("Browse to this file:", $f, {});
+ }
+ }
+ catch $exception {
+ showError("Could not open $f $+ \n $+ $exception");
+ }
+ }, $f => $1);
+}
+
+sub isShift {
+ return iff(([$1 getModifiers] & [ActionEvent SHIFT_MASK]) == [ActionEvent SHIFT_MASK], 1);
+}
+
+sub addMouseListener {
+ [$1 addMouseListener: [new SafeMouseListener: $2]];
+}
+
+sub pad {
+ local('$panel');
+ $panel = [new JPanel];
+ [$panel setLayout: [new BorderLayout]];
+ [$panel add: $1, [BorderLayout CENTER]];
+ [$panel setBorder: [BorderFactory createEmptyBorder: $2, $3, $4, $5]];
+ return $panel;
+}
+
+sub setClipboard {
+ local('$sel $cb');
+ $sel = [new StringSelection: $1];
+ $cb = [[Toolkit getDefaultToolkit] getSystemSelection];
+ if ($cb !is $null) {
+ [$cb setContents: $sel, $null];
+ }
+
+ $cb = [[Toolkit getDefaultToolkit] getSystemClipboard];
+ if ($cb !is $null) {
+ [$cb setContents: $sel, $null];
+ }
+}
+
+sub setupMenu {
+ [$frame setupMenu: $1, $2, _args($3)];
+}
+
+sub installMenu {
+ [$frame installMenu: $1, $2, _args($3)];
+}
diff --git a/scripts/hosts.sl b/armitage/src/main/resources/scripts/hosts.sl
similarity index 100%
rename from scripts/hosts.sl
rename to armitage/src/main/resources/scripts/hosts.sl
diff --git a/scripts/jobs.sl b/armitage/src/main/resources/scripts/jobs.sl
similarity index 100%
rename from scripts/jobs.sl
rename to armitage/src/main/resources/scripts/jobs.sl
diff --git a/scripts/log.sl b/armitage/src/main/resources/scripts/log.sl
similarity index 100%
rename from scripts/log.sl
rename to armitage/src/main/resources/scripts/log.sl
diff --git a/scripts/loot.sl b/armitage/src/main/resources/scripts/loot.sl
similarity index 100%
rename from scripts/loot.sl
rename to armitage/src/main/resources/scripts/loot.sl
diff --git a/scripts/menus.sl b/armitage/src/main/resources/scripts/menus.sl
similarity index 100%
rename from scripts/menus.sl
rename to armitage/src/main/resources/scripts/menus.sl
diff --git a/scripts/meterpreter.sl b/armitage/src/main/resources/scripts/meterpreter.sl
similarity index 100%
rename from scripts/meterpreter.sl
rename to armitage/src/main/resources/scripts/meterpreter.sl
diff --git a/scripts/modules.sl b/armitage/src/main/resources/scripts/modules.sl
similarity index 100%
rename from scripts/modules.sl
rename to armitage/src/main/resources/scripts/modules.sl
diff --git a/scripts/passhash.sl b/armitage/src/main/resources/scripts/passhash.sl
similarity index 100%
rename from scripts/passhash.sl
rename to armitage/src/main/resources/scripts/passhash.sl
diff --git a/scripts/pivots.sl b/armitage/src/main/resources/scripts/pivots.sl
similarity index 100%
rename from scripts/pivots.sl
rename to armitage/src/main/resources/scripts/pivots.sl
diff --git a/scripts/preferences.sl b/armitage/src/main/resources/scripts/preferences.sl
similarity index 100%
rename from scripts/preferences.sl
rename to armitage/src/main/resources/scripts/preferences.sl
diff --git a/scripts/process.sl b/armitage/src/main/resources/scripts/process.sl
similarity index 100%
rename from scripts/process.sl
rename to armitage/src/main/resources/scripts/process.sl
diff --git a/scripts/reporting.sl b/armitage/src/main/resources/scripts/reporting.sl
similarity index 100%
rename from scripts/reporting.sl
rename to armitage/src/main/resources/scripts/reporting.sl
diff --git a/scripts/screenshot.sl b/armitage/src/main/resources/scripts/screenshot.sl
similarity index 100%
rename from scripts/screenshot.sl
rename to armitage/src/main/resources/scripts/screenshot.sl
diff --git a/scripts/scripts.sl b/armitage/src/main/resources/scripts/scripts.sl
similarity index 100%
rename from scripts/scripts.sl
rename to armitage/src/main/resources/scripts/scripts.sl
diff --git a/scripts/server.sl b/armitage/src/main/resources/scripts/server.sl
similarity index 100%
rename from scripts/server.sl
rename to armitage/src/main/resources/scripts/server.sl
diff --git a/scripts/services.sl b/armitage/src/main/resources/scripts/services.sl
similarity index 100%
rename from scripts/services.sl
rename to armitage/src/main/resources/scripts/services.sl
diff --git a/scripts/shell.sl b/armitage/src/main/resources/scripts/shell.sl
similarity index 100%
rename from scripts/shell.sl
rename to armitage/src/main/resources/scripts/shell.sl
diff --git a/scripts/targets.sl b/armitage/src/main/resources/scripts/targets.sl
similarity index 100%
rename from scripts/targets.sl
rename to armitage/src/main/resources/scripts/targets.sl
diff --git a/scripts/tokens.sl b/armitage/src/main/resources/scripts/tokens.sl
similarity index 100%
rename from scripts/tokens.sl
rename to armitage/src/main/resources/scripts/tokens.sl
diff --git a/scripts/util.sl b/armitage/src/main/resources/scripts/util.sl
similarity index 100%
rename from scripts/util.sl
rename to armitage/src/main/resources/scripts/util.sl
diff --git a/scripts/workspaces.sl b/armitage/src/main/resources/scripts/workspaces.sl
similarity index 100%
rename from scripts/workspaces.sl
rename to armitage/src/main/resources/scripts/workspaces.sl
diff --git a/build.xml b/build.xml
deleted file mode 100644
index b1075b0a..00000000
--- a/build.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/clean.sh b/clean.sh
new file mode 100755
index 00000000..005a225e
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+set -ex
+
+./gradlew clean
+
+rm -rf release
\ No newline at end of file
diff --git a/cortana/build.gradle b/cortana/build.gradle
new file mode 100644
index 00000000..c7d08bb5
--- /dev/null
+++ b/cortana/build.gradle
@@ -0,0 +1,46 @@
+plugins {
+ id 'java'
+}
+
+group 'cortana'
+version '1.0-SNAPSHOT'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+repositories {
+ mavenCentral()
+}
+
+jar {
+ manifest {
+ attributes 'Main-Class': 'cortana.Main'
+ }
+ from {
+ configurations.compileClasspath.filter { it.exists() }.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+ archiveName 'cortana.jar'
+}
+
+dependencies {
+ implementation project(':armitage')
+ implementation files('../lib/sleep.jar', '../lib/jgraphx.jar')
+
+ implementation group: 'org.javassist', name: 'javassist', version: '3.28.0-GA'
+ implementation group: 'org.postgresql', name: 'postgresql', version: '9.4.1212'
+ implementation group: 'org.msgpack', name: 'msgpack', version: '0.6.12'
+
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
+}
+
+test {
+ useJUnitPlatform()
+}
+
+task copyJar(type: Copy) {
+ from jar
+ into "../build"
+}
+
+assemble.finalizedBy(copyJar)
\ No newline at end of file
diff --git a/dist/mac/Armitage.app/Contents/Info.plist b/dist/mac/Armitage.app/Contents/Info.plist
index 76b90b10..bd9050db 100644
--- a/dist/mac/Armitage.app/Contents/Info.plist
+++ b/dist/mac/Armitage.app/Contents/Info.plist
@@ -35,7 +35,7 @@
JVMMainClassName
armitage.ArmitageMain
CFBundleIconFile
- aquaicon2
+ macIcon
JVMOptions
-XX:+AggressiveHeap
diff --git a/dist/mac/Armitage.app/Contents/Resources/aquaicon2.icns b/dist/mac/Armitage.app/Contents/Resources/aquaicon2.icns
deleted file mode 100644
index 062c59a8..00000000
Binary files a/dist/mac/Armitage.app/Contents/Resources/aquaicon2.icns and /dev/null differ
diff --git a/dist/mac/Armitage.app/Contents/Resources/macIcon.icns b/dist/mac/Armitage.app/Contents/Resources/macIcon.icns
new file mode 100644
index 00000000..67005614
Binary files /dev/null and b/dist/mac/Armitage.app/Contents/Resources/macIcon.icns differ
diff --git a/dist/mac/build.sh b/dist/mac/build.sh
index ca0fba78..825e8ea6 100755
--- a/dist/mac/build.sh
+++ b/dist/mac/build.sh
@@ -2,13 +2,5 @@
# unzip armitage.tgz in this directory first.
#
-rm -rf dist
-mkdir dist
-cp -r Armitage.app dist
-cp armitage/armitage.jar dist/Armitage.app/Contents/Java
-cp armitage/*.txt dist/
-cp *.rtf dist/
-rm -rf armitage
-mv dist Armitage
-hdiutil create -ov -volname Armitage -srcfolder ./Armitage armitage.dmg
-rm -rf armitage
+mv armitage.jar Armitage.app/Contents/Java
+hdiutil create -ov -volname Armitage -srcfolder . armitage.dmg
diff --git a/fixfiles.sh b/fixfiles.sh
deleted file mode 100755
index 821aafdf..00000000
--- a/fixfiles.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# fix the line formats so windows users can read the files too
-#
-perl -pi -e 's/\n/\r\n/g' readme.txt
-perl -pi -e 's/\n/\r\n/g' whatsnew.txt
-
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..e708b1c0
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..da9702f9
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 00000000..4f906e0c
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 00000000..107acd32
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/lib/javassist-3.15.0-GA.jar b/lib/javassist-3.15.0-GA.jar
deleted file mode 100644
index 5af8eaeb..00000000
Binary files a/lib/javassist-3.15.0-GA.jar and /dev/null differ
diff --git a/lib/msgpack-0.6.12-devel.jar b/lib/msgpack-0.6.12-devel.jar
deleted file mode 100644
index 76402f83..00000000
Binary files a/lib/msgpack-0.6.12-devel.jar and /dev/null differ
diff --git a/lib/postgresql-9.1-901.jdbc4.jar b/lib/postgresql-9.1-901.jdbc4.jar
deleted file mode 100644
index 203d5a1d..00000000
Binary files a/lib/postgresql-9.1-901.jdbc4.jar and /dev/null differ
diff --git a/lib/sleep.jar b/lib/sleep.jar
index 124acbbe..a5374bf3 100644
Binary files a/lib/sleep.jar and b/lib/sleep.jar differ
diff --git a/package.sh b/package.sh
index 5bfa5c08..8c93040e 100755
--- a/package.sh
+++ b/package.sh
@@ -1,63 +1,26 @@
#!/bin/bash
-#
-# I know Apache Ant does all of this stuff... I hate working with XML though
-#
-
-rm -f armitage.zip
-rm -f armitage.tgz
-
-ant clean
-ant compile
-cp -r resources/ bin/
-cp -r scripts/ bin/
-rm -rf bin/*/*/.svn
-rm -rf bin/*/.svn
-ant jar
-
-#
-# build *NIX package
-#
-mkdir armitage
-cp armitage.jar armitage
-cp cortana.jar armitage
-cp readme.txt armitage
-cp whatsnew.txt armitage
-cp -r dist/unix/* armitage
-
- # kill the silly .svn file
-rm -rf armitage/.svn
-tar zcvf armitage.tgz armitage
-
-rm -rf armitage
-
-#
-# build Windows package
-#
-mkdir armitage
-cp -r dist/windows/* armitage
-cp armitage.jar armitage/
-cp cortana.jar armitage/
-cp readme.txt armitage/readme.txt
-cp whatsnew.txt armitage/whatsnew.txt
-
- # kill that silly .svn file
-rm -rf armitage/.svn
-rm -rf armitage/*/*/.svn
-rm -rf armitage/*/.svn
-cd armitage
-zip -r ../armitage.zip .
-cd ..
-
-rm -rf armitage
-
-#
-# update the release directory
-#
-cd release/
-tar zxvf ../armitage.tgz
-mv armitage/* armitage-unix
-rm -rf armitage
-
-cd ../release/
-cd armitage-windows
-unzip -o ../../armitage.zip
+
+set -ex
+
+./gradlew assemble
+
+
+for i in unix windows mac; do
+
+ if [ "${i}" == "mac" ] && [ "$(uname)" != "Darwin" ]; then
+ echo "Skipping macOS build because this is not running on Darwin"
+ continue
+ fi
+
+ mkdir -p "release/${i}"
+ cp *.txt "release/${i}"
+ cp build/*.jar "release/${i}"
+ cp -r "dist/${i}/"* "release/${i}"
+
+ if [ "${i}" == "mac" ] && [ "$(uname)" == "Darwin" ]; then
+ pushd "release/${i}"
+ ./build.sh
+ popd
+ fi
+
+done;
diff --git a/release/armitage-unix/armitage b/release/armitage-unix/armitage
deleted file mode 100755
index ad5fa75e..00000000
--- a/release/armitage-unix/armitage
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-java -XX:+AggressiveHeap -XX:+UseParallelGC -jar armitage.jar $@
diff --git a/release/armitage-unix/armitage-logo.png b/release/armitage-unix/armitage-logo.png
deleted file mode 100644
index 70a05173..00000000
Binary files a/release/armitage-unix/armitage-logo.png and /dev/null differ
diff --git a/release/armitage-unix/armitage.jar b/release/armitage-unix/armitage.jar
deleted file mode 100644
index f9feb613..00000000
Binary files a/release/armitage-unix/armitage.jar and /dev/null differ
diff --git a/release/armitage-unix/cortana.jar b/release/armitage-unix/cortana.jar
deleted file mode 100644
index 1b4d3c4b..00000000
Binary files a/release/armitage-unix/cortana.jar and /dev/null differ
diff --git a/release/armitage-unix/readme.txt b/release/armitage-unix/readme.txt
deleted file mode 100644
index 5f4e54b8..00000000
--- a/release/armitage-unix/readme.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-=============================================================================
-Armitage - Cyber Attack Management for Metasploit
-=============================================================================
-
- *** http://www.fastandeasyhacking.com ***
-
-1. What is Armitage?
- -----------------
-
-Armitage is a graphical cyber attack management tool for Metasploit that
-visualizes your targets, recommends exploits, and exposes the advanced
-capabilities of the framework.
-
-Advanced users will find Armitage valuable for managing remote Metasploit
-instances and collaboration. Armitage's red team collaboration features allow
-your team to use the same sessions, share data, and communicate through one
-Metasploit instance.
-
-Armitage aims to make Metasploit usable for security practitioners who
-understand hacking but don't use Metasploit every day. If you want to learn
-Metasploit and grow into the advanced features, Armitage can help you.
-
-2. Documentation
- -------------
-
-The documentation for Armitage is located on the Armitage website at:
-http://www.fastandeasyhacking.com. Read the FAQ and the Manual for
-information on connecting Armitage to Metasploit and using it.
-
-3. Install and Update
- ----------
-
-To get started, see the manual at http://www.fastandeasyhacking.com
-
-4. Source Code
- -----------
-
-This projected is hosted on Google Code at:
-http://code.google.com/p/armitage/
-
-5. Disclaimer
- ----------
-
-Use this code for your development and don't hack systems that you don't
-have permission to hack. The existence of this software does not reflect the
-opinions or beliefs of my current employers, past employers, future
-employers, or any small animals I come into contact with. Enjoy this
-software with my blessing. I hope it helps you learn and become a better
-security professional.
-
-6. Contact
- -------
-
-Report bugs in the issue tracker at:
-http://code.google.com/p/armitage/issues/list
-
-E-mail contact@fastandeasyhacking.com with other questions/concerns. Make
-sure you peruse the FAQ and Manual first.
-
-7. License
- -------
-
-(c) 2010-2013 Raphael Mudge. This project is licensed under the BSD license.
-See section 8 for more information.
-
-lib/jgraphx.jar is used here within the terms of the BSD license offered by
-JGraphX Ltd. http://www.jgraphx.com/
--
-lib/msgpack-0.5.1-devel.jar and lib/postgresql-9.1-901.jdbc4.jar are both
-BSD licensed libraries.
--
-Some code in src/msf/* comes from msfgui by scriptjunkie.
--
-This project uses the LGPL Sleep scripting language with no modifications.
-Sleep's source is available at: http://sleep.dashnine.org/
-
-8. The BSD License
- ---------------
-
-Redistribution and use in source and binary forms are permitted provided
-that the above copyright notice and this paragraph are duplicated in all
-such forms and that any documentation, advertising materials, and other
-materials related to such distribution and use acknowledge that the
-software was developed by the copyright holders. The name of the copyright
-holders may not be used to endorse or promote products derived from this
-software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ''AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/release/armitage-unix/teamserver b/release/armitage-unix/teamserver
deleted file mode 100755
index fbd41b78..00000000
--- a/release/armitage-unix/teamserver
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/bash
-# start msfrpcd and the deconfliction server. Check for common mistakes
-# to save some time and head scratching...
-
-# make pretty looking messages (thanks Carlos)
-function print_good () {
- echo -e "\x1B[01;32m[+]\x1B[0m $1"
-}
-
-function print_error () {
- echo -e "\x1B[01;31m[-]\x1B[0m $1"
-}
-
-function print_info () {
- echo -e "\x1B[01;34m[*]\x1B[0m $1"
-}
-
-# check the arguments
-EXPECTED=2
-if [ $# -ne $EXPECTED ]; then
- print_info "You must provide: "
- echo " must be reachable by Armitage"
- echo " clients on port 55553"
- echo " is a shared password your team uses to"
- echo " authenticate to the Armitage team server"
- exit
-fi
-
-# check that we're r00t
-if [ $UID -ne 0 ]; then
- print_error "Superuser privileges are required to run the team server"
- exit
-fi
-
-# check if java is available...
-if [ $(command -v java) ]; then
- true
-else
- print_error "java is not in \$PATH"
- echo " is Java installed?"
- exit
-fi
-
-# check if keytool is available...
-if [ $(command -v keytool) ]; then
- true
-else
- print_error "keytool is not in \$PATH"
- echo " install the Java Developer Kit"
- exit
-fi
-
-# check if msfrpcd is available
-if [ $(command -v msfrpcd) ]; then
- true
-else
- print_error "msfrpcd is not in \$PATH"
- echo " is Metasploit installed?"
- exit
-fi
-
-# check if msfrpcd is running or not
-if [ "$(pidof msfrpcd)" ]; then
- print_error "msfrpcd is already running. Kill it before running this script"
- echo " try: killall -9 msfrpcd"
- exit
-fi
-
-# generate a certificate
- # naturally you're welcome to replace this step with your own permanent certificate.
- # just make sure you pass -Djavax.net.ssl.keyStore="/path/to/whatever" and
- # -Djavax.net.ssl.keyStorePassword="password" to java. This is used for setting up
- # an SSL server socket. Also, the SHA-1 digest of the first certificate in the store
- # is printed so users may have a chance to verify they're not being owned.
-print_info "Generating X509 certificate and keystore (for SSL)"
-rm -f ./armitage.store
-keytool -keystore ./armitage.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias armitage -dname "CN=Armitage Hacker, OU=FastAndEasyHacking, O=Armitage, L=Somewhere, S=Cyberspace, C=Earth"
-
-# start everything up
-print_info "Starting RPC daemon"
-msfrpcd -U msf -P $2 -a 127.0.0.1 -p 55554 -S
-print_info "sleeping for 20s (to let msfrpcd initialize)"
-sleep 20
-print_info "Starting Armitage team server"
-java -Djavax.net.ssl.keyStore=./armitage.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+UseParallelGC -jar armitage.jar --server $1 55554 msf $2 55553
diff --git a/release/armitage-unix/whatsnew.txt b/release/armitage-unix/whatsnew.txt
deleted file mode 100644
index 2292e065..00000000
--- a/release/armitage-unix/whatsnew.txt
+++ /dev/null
@@ -1,1622 +0,0 @@
-Armitage Changelog
-==================
-
-20 Nov 14 (tested against msf git revision: 55ef5dd484)
----------
-- Added helper for SCRIPT option.
-- Right-click a tab's X button and use "Send to bottom" or Ctrl+B to
- dock a tab to the bottom of the Armitage window. Use Ctrl+E to get
- get rid of the docked tab..
-- Added more YAML warnings to save heartache for custom installs
-- Database layer now uses core.version results to decide which MSF
- data model to use.
-- File tab completion (Cortana console) better handles ~
-- team server startup verifies default host is an IPv4 address.
-- Prompt for default address is now more aggressive and continues to
- ask until an address is put in. If a user hit cancel on this dialog,
- threads to poll the database never get started. Bad day, for sure.
-- Armitage now sends a keep-alive every 1-2mins over an idle team
- server connection to combat disconnection by a NAT device
-- Armitage client now shows Disconnect message when it loses any of
- its connections to the team server.
-
-Cortana Updates (for scripters)
---------
-- &credential_add, &credential_delete use Metasploit 4.10 conventions
-- name field for hosts is now available.
-
-18 Aug 14 (tested against msf git revision: 55ef5dd484)
----------
-- Added hard-coded database.yml path as fallback for Kali users
-- Updated internal db.creds/db.creds2 calls to pull from new creds
- model in database.
-- [meterpreter] -> Access -> Dump Hashes -> wdigest uses sso post
- module now. New creds model makes this better.
-- Added Import option to View -> Credentials dialog.
-
-15 Jul 14 (tested against msf git revision: 55ef5dd484)
----------
-- Command Shell experience on Windows Meterpreter is much better now
-- Java Meterpreter may now interact with a bash shell
-- Removed [host] -> Meterpreter -> Access -> Migrate Now! menu item
-- Ctrl+Escape temporarily drops the timeout times for Meterpreter
- commands to 5s, across the board. If a Meterpreter session appears
- unresponsive, try this to force any hung commands to timeout
-- Armitage now warns when a team server is non-responsive by making
- its server button purple. When the server is responsive again, the
- button will turn its normal color again. This requires that you're
- connected to multiple team servers.
-- Windows EXE launcher for Armitage now finds 64-bit Java.
-
-15 May 14 (tested against msf git revision: 0a4c10876d)
----------
-- Worked around invisible text selection bug with latest Java on Kali
-
-23 Apr 14 (tested against msf git revision: 0a4c10876d)
----------
-- Added Ctrl+L to quickly add an entry to timeline.[xml|tsv] (exported
- through View -> Reporting -> Export Data)
-- Added osx-app to Output: type for payloads. Outputs a zipped MacOS X
- app archive.
-- Scrubbed Armitage to eliminate unnecessary blocking calls from Sleep
- source code. This improves Armitage's responsiveness and takes away
- many opportunities for deadlock.
-- Sync Files for Loot and Downloads is now much better with large files
-- REJOICE! After more than three years of a team server capability,
- Armitage now tells you when you are disconnected from a server.
-- Keyboard shortcuts to change text size now work in table view
-- Added Copy button to View -> Creds
-- Services tab right-click menu now has options to edit a service's info
-- Updated Armitage's YAML parser to better deal with unexpected whitespace
- and to provide better errors when YAML file contains constructs that
- Armitage's YAML parser can't deal with.
-- Armitage's intercept of the shell command now intercepts shell when
- arguments are present too. This prevents meterp sessions from getting
- messed up.
-- Logging now deals with IPv6 addresses better for Windows users
-- Launching psexec at 4+ hosts will no longer open a tab for each host
-- Armitage no longer allows two buttons with the same name in its team
- server button bar.
-
-Cortana Updates (for scripters)
---------
-- Added &script_load to load a script (as if the user did this)
-- Added &script_unload to unload a script
-
-27 Feb 14 (tested against msf git revision: 72da8299a5)
----------
-- Armitage console is now a mouse hot spot. Right-click a host in the
- console to see its menu. Click a module to open the module's launcher
-- Armitage module launch console ignores false meterpreter prompt from
- msfrpcd after a successful exploit job is run.
-- hashdump and wdigest menus now add usernames with spaces to database
- thanks to Steve Pinkham for reporting this issue *with* a fix.
-- Added [host] -> Login -> psexec (psh) to use psexec_psh to authenticate
- to a host.
-- Armitage.app for MacOS X now works with Oracle's Java 1.7
-- Long awaited! I've added a feature to change LHOST in Armitage. Go to
- Armitage -> Listeners -> Set LHOST.
-- IPv6 reverse sessions now associate with their host properly.
-- Windows open with Ctrl+W now show the Armitage icon
-- Armitage now uses a JFrame to display its dialogs. This will give each
- window its own button in the taskbar regardless of window manager.
-
-21 Nov 13 (tested against msf git revision: 597eb56dcf)
----------
-- Fixed webcam selection logic that I broke last update. Go me!
-- Added a helper for PATH option
-- Java 1.6 is no longer a supported environment to run Armitage. Added
- a warning message to indicate as much. You should update to Java 1.7
-- Connect dialog now masks the password field.
-- Armitage no longer allows you to start msfrpcd on Windows. It shows an
- error stating that you need to connect to a team server on Linux.
-- Fixed a potential deadlock when opening a module launcher dialog.
-- Missing MSF_DATABASE_CONFIG error now gives troubleshooting steps with
- the error message.
-- Added another check to detect and correct a corrupt module cache.
-- [host] -> Operating System -> Firewall works again.
-- You can now set PAYLOAD for windows/local/wmi exploit
-- Default meterpreter/reverse_tcp listener now encodes its second stage
-
-21 Aug 13 (tested against msf git revision: 0af2f1c611)
----------
-- Removed sunrpc and dcerpc modules from MSF Scans feature
-- Fixed a potential deadlock when updating the host display
-- Updated multiplexing code to be compatible with enumdesktops command
-- Updated multiplexing code to be compatible with webcam_list command
-- You may now choose which camera to take a Webcam Shot from
-- Close button now shows w/ Armitage dialogs on Kali Linux.
-- Module Launcher dialog is now always active when opened.
-- EXE::Custom is no longer treated as an advanced option. When available
- it's always present for you to modify in a module.
-- Meterpreter -> Access -> Persistence now uses the local exploit module
- (default settings now work without tweaks too)
-- Meterpreter -> Access -> Pass Session and Process -> Inject now use the
- payload_inject local exploit module.
-- Added Meterpreter -> Access -> Dump Hashes -> wdigest to run mimikatz's
- wdigest command, to retrieve plaintext creds.
-- Armitage now uses a better method to shuttle files to team server and
- notify you of the progress of this action.
-- Made multiplexing code smarter about load and use commands.
-- Added a check to detect commercial MSF modules in the module cache and
- to automatically clear it. When this happens you will need to restart the
- Metasploit Framework. A corrupt cache causes some RPC calls to throw
- errors as plain msfrpcd is not allowed to interact with commercial modules.
-- Added ANSI color markup to armitage's console output. It's less scary
- than the default messages and it's nicer to look at.
-- Added cmd/unix/reverse to payload selection logic.
-- Updated the payload output formats to match what's now possible in MSF
-- Armitage -> Listeners actions now show commands/output in a tab
-- [host] -> Login options now set DB_ALL_CREDS to false. Making this option
- default to true is not the decision I would have made.
-
-6 Jun 13 (tested against msf git revision: c705928052)
---------
-- Attacks -> Hail Mary now asks you to confirm the action.
-- Fixed a potential table sorting issue
-- Changed how some tables are updated to minimize blocking of other
- tasks. This should make UI feel snappier in many cases.
-- Credential helper now shows credentials from all servers you're
- connected to.
-- Updated multiplexing code to be compatible with mimikatz extension's
- output scheme.
-- Meterpreter upload command (with no arguments) now prompts for a file.
- This file will be bounced to team server (if one is present) and
- uploaded to the target for you.
-- Cred tables no longer show SSH keys
-- Added vmauthd to the Login menu
-- Increased the number of modules run in response to services found during
- a sweep with the MSF Scans feature.
-- Attack menu attached to host now splits menus up if there are more than
- 10 items. This will help with the webapp and http menus.
-- Added a menu to mark a host as a firewall
-- Added a type-fix hack for MsgPack Long types
-
-Cortana Updates (for scripters)
---------
-- Updated &log_resource to account for new log folder layout scheme that
- involves a description of the current Armitage server
-- Fixed a potential argument corruption bug with filters
-
-10 Apr 13 (tested against msf ca43900a7)
----------
-- Jobs dialog now queries job info in a separate thread context,
- stopping it from locking up your Armitage instance.
-- Fixed console queue display bug when a required option has no setting
-- Hashdump -> lsass method now pops open a Meterpreter tab and shows
- its progress. Should help when there's a lot of hashes coming back.
-- Hail Mary attack now gives better feedback about what it's doing
-- Fixed blank line showing when a host label exists and a session w/o
- any information is associated with the host.
-- The correct OS icon is now shown for Windows 2012 Server.
-- Added an Inject button to the Process Explorer
-- Event log now shows date with timestamp
-- Messages to your nick in the event log are now highlighted
-- Disabled the display of the MSF banner by default.
-
-Cortana Updates (for scripters)
---------
-- Added work-around to prevent &psexec failing due to Ruby complaining
- about incompatible encodings.
-
-6 Mar 13 (tested against msf ca43900a7)
---------
-- Active console now gets higher priority when polling msf for output
-- Improved team server responsiveness in high latency situations by
- creating additional connections to server to balance messages over
-- Preferences are now shared among each Armitage connection.
-
-6 Mar 13 (2000h)
---------
-- Fixed issue with additional team server connections reporting wrong
- application and receiving a summary rejection by the team server.
-
-Cortana Updates (for scripters)
---------
-- Added a &publish, &query, &subscribe API to allow inter-script
- communication across the team server.
-- Added &table_update to set the contents of a table tab without
- disturbing the highlighted rows.
-- Added an exec_error event. Fired when &m_exec or &m_exec_local fail
- due to an error reported by meterpreter.
-- Fixed a bug that sometimes caused session_sync to fire twice (boo!)
-- Added a 60s timeout to &s_cmd commands. Cortana will give a shell
- command 60s to execute. If it doesn't finish in that time, Cortana
- will release the lock on the shell so the user can control it.
- (ideally, this shouldn't happen... this is a safety mechanism)
-- Changed Meterpreter command timeout to 2m from 12s. This is because
- https meterpreter might not checkin for up to 60s, if it's been
- idle for a long time. This will make &m_cmd less likely to timeout
-
-12 Feb 13 (tested against msf 16438)
----------
-- Fixed a corner case preventing the display of removed host labels
- when connected to a team server.
-- Fixed RPC call cache corruption in team server mode. This bug could
- lead to some exploits defaulting to a shell payload when meterpreter
- was a possibility.
-- Slight optimization to some DB queries. I no longer pull unused
- fields making the query marginally faster. Team server is more
- efficient too as changes to unused fields won't force data (re)sync.
-- Hosts -> Clear Database now clears host labels too.
-- Added the ability to manage multiple team server instances through
- Armitage. Go to Armitage -> New Connection to connect to another
- server. A button bar will appear that allows you to switch active
- Armitage connections.
- - Credentials available across instances are pooled when using
- the [host] -> Login menu and the credential helper.
-- Rewrote the event log management code in the team server
-- Added nickname tab completion to event log. I feel like I'm writing
- an IRC client again.
-- Hosts -> Clear Database now asks you to confirm the action.
-- Hosts -> Import Hosts announces successful import to event log again.
-
-23 Jan 13 (tested against msf 16351)
----------
-- Added helpers to set EXE::Custom and EXE::Template options.
-- Fixed a bug displaying a Windows 8 icon for Windows 2008 hosts
-- Cleaned up Armitage -> SOCKS Proxy job management code. The code to
- check if a proxy server is up was deadlock prone. Removed it.
-- Starting SOCKS Proxy module now opens a tab displaying the module
- start process. An event is posted to the event log too.
-- Created an option helper to select credentials for SMBUser, SMBPass,
- USERNAME, and PASSWORD.
-- Added a feature to label hosts. A label will show up in its own column
- in table view or below all info in graph view. Any team member may
- change a label through [host] -> host -> Set Label. You may also use
- dynamic workspaces to show hosts with certain labels attached.
-- Fixed bad things happening when connecting Armitage to 'localhost' and
- not '127.0.0.1'.
-- Screenshots and Webcam shots are now centered in their tab.
-- Added an alternate .bat file to start msfrpcd on Windows in the
- Metasploit 4.5 installer's environment.
-- Added a color-style for [!] warning messages
-
-Cortana Updates (for scripters)
---------
-- &handler function now works as advertised.
-- Cortana now avoids use of core.setg
-
-4 Jan 13 (tested against msf 16252)
---------
-- Added a helper to set REXE option
-- Added an icon to represent Windows 8
-- [host] -> Login menu is now built using open services for all
- highlighted hosts, not just the first one.
-- [host] -> Login items now escape punctuation characters in passwords
- before passing them to a framework module.
-- Added the windows and linux postgres_payload exploits to the use a
- reverse payload by default list.
-- Small tweak to allow Armitage to work with Metasploit 4.5 installed
- environment on Windows.
-
-Cortana Updates (for scripters)
---------
-- &credential_add and &credential_delete no longer break when a
- password has creative punctuation in it.
-
-26 Nov 12 (tested against msf 16114)
----------
-- Windows command shell tab is now friendlier to commands that prompt
- for input (e.g., time command)
-- [host] -> Meterpreter -> Access -> Escalate Privileges now shows all
- the framework's new exploit/windows/local modules too
-- [host] -> Shell -> Post Modules now shows the framework's unix/local
- and exploit/linux/local modules
-- Added Ctrl+I shortcut. Lets you choose a session to interact with.
-- Added Steal Token button to Processes dialog.
-- Armitage now asks Metasploit for a non-expiring authentication token.
- This will prevent Armitage from losing its access to msfrpcd when you
- put your computer to sleep or pause the VM running Metasploit.
-- add_user and add_[local]group_user now show all of their output when
- the -h flag is used to operate on a remote host.
-- added a Delete menu to creds table. Right-click a cred to delete it
-
-Cortana Updates (for scripters)
---------
-- aliased &data_delete to &data_clear to match the documentation.
-- &file_get, &loot_get, and &file_content no longer delete the remote
- file when connected to a teamserver.
-
-16 Oct 12 (tested against msf 15972)
----------
-- Added port 5985 to MSF Scans list.
-- Meterpreter -> Access -> Persistence sets ACTION option for you
-- Changed how LHOST and LPORT are set globally to prevent Ruby
- character encoding conversion error in the framework.
-- Pass Session, Log Keystrokes, and Persist now query module info
- in a separate thread (avoids a deadlock opportunity)
-- Armitage now shows folder/URL in a popup dialog for environments
- where JDesktop API to open them directly is not supported
-- Check all credentials option now filters the list to avoid trying
- a pair of credentials twice.
-- Armitage's exploit payload selection now selects cmd/unix/interact
- when appropriate.
-- Explore -> Processes now works with Java Meterpreter again.
-- MSF Scans feature now runs http_version against port 443
-
-5 Sept 12 (tested against msf r15804)
----------
-- Setup dialog now trims host, port, user, and pass fields.
-- Armitage now complains when it can't write to your preferences
- file (versus just hanging without a real error message)
-- View -> Jobs now queries jobs in a thread outside of UI thread
-- Tab completion now uses a separate thread to call into the RPC
- server. This prevents a deadlock if server is not responding.
-- Login -> psexec now shows when 445 is open on a Windows machine.
- The old criteria was too restrictive.
-- Added a helper to set Wordlist option
-- Armitage now sets a random LPORT for non-exploit modules with an
- LPORT option (e.g., post modules that do priv escalation)
-- Armitage now shows an error if it can't open a Win command shell
-- Steal Token dialog now uses incognito module to get token data
- instead of the MSF post module. This is more reliable.
-- You may now setup the reverse payload for current_user_psexec
-
-Cortana Updates (for scripters)
---------
-- added an eventlog popup hook
-
-16 Aug 12 (tested against msf r15753)
-----------
-- Dynamic workspaces now removes closed services from its set of
- hosts matching certain open ports.
-- Cortana console now reports a clear error message a built-in
- command is executed without the right number of arguments.
-- Added host icons for Android and iOS. You may now set these
- operating systems by going to [host] -> Host -> Operating System
-- Armitage now shows the client-side exploit dialog for any exploit
- that does not target an RHOST (for example, windows/smb/smb_relay)
-- Added support for remote exploits that use RHOSTS over RHOST
- (this includes the new windows/local/current_user_psexec)
-- Added a helper for setting the SESSION option
-
-Cortana Updates (for scripters)
---------
-- s_cmd no longer times out after 60s. It will wait forever for
- a command to complete now.
-- added shell_read event which fires when a shell s_cmd comes
- back with intermediate output.
-- fixed a potential deadlock with &open_console_tab
-- scripts now have the ability to redefine the max size of a
- workspace: db_workspace(%(size => #####));
-
-2 Aug 12 (tested again msf r15698)
---------
-- Armitage now reports vulnerability module and descriptions
- properly (again) when exporting data. Had to update to match a
- change to the db schema.
-- Pass-the-Hash and Login dialogs now stay open if you press
- shift while clicking Launch. This convention is pretty universal
- to Armitage.
-- Team server now buffers all of its outgoing data. I've also
- disabled SO_NODELAY. This will greatly improve team server latency
- on congested networks without impacting responsiveness otherwise.
-- Added Cortana, a DARPA funded scripting technology, into Armitage.
- There's a lot of fun to be had here.
-- Armitage now queues messages to destroy a console rather than
- spinning up a new thread for each closed console.
-- Rendering of icons for hosts now happens outside of UI thread.
-- Increased timeout for meterpreter read command
-- Armitage now detects a corrupt module cache and attempts to clear
- it so it can be rebuilt.
-
-5 Jul 12
---------
-- Login -> psexec now sets a different LPORT for each host it's
- launched against when using a reverse payload. Fixes a bug where
- using a reverse connect payload against X hosts didn't work.
-- Progressbar Cancel button now works with the Sync Files button
- in View -> Downloads and View -> Loot
-- Fixed a potential deadlock with the Sync Files feature
-- Clicking the Size column in View -> Downloads now sorts properly
-
-24 Jun 12
----------
-- Meterpreter -> Kill now uses session.stop RPC call
-- Simplified code to stop a running job
-- Added an option to disable TCP_NODELAY from the comamnd line:
-
- java -Darmitage.enable_nagle=true -jar armitage.jar
-
- Use this if you see "bad mac" SSL errors when connected to a
- team server.
-- Log Keystrokes tab now changes color when there is activity
-- Randomized filename for USERPASS_FILE to allow multiple brute
- forces to happen at once.
-- Added a View item in the File Browser's popup menu. This will
- let you quickly read several highlighted text files (it also
- saves the files to the right place locally too)
-
-7 Jun 12 - Adding on to those quick bug fixes / tweaks
---------
-- Disabled Nagles algorithm for team server and client SSL sockets.
- This makes team server much more responsive... trust me.
-- Fixed bug preventing Armitage from showing "Started Service"
- message when starting the SOCKS Proxy server.
-- Fixed a find feature highlight bug in the View tab.
-
-30 May 12 - A few quick bug fixes / tweaks...
----------
-- Fixed an exception when killing a session or removing a route
- through the UI.
-- Oooh, ps command added a new column to its output. Updated ps
- parser to handle this.
-- Hosts -> Import Hosts now works under Windows again. Had to
- escape the filename. *sigh*
-- Hail Mary now sets LHOST option. This is necessary for some
- attacks to work properly.
-- Tweaked console create code in beginning of Armitage setup to
- hopefully avoid aggravating the evil console.create deadlock
- condition.
-
-21 May 12
----------
-- Added a hack to prevent the input area from flickering when the
- prompt changes.
-- Updated the color palette to something a little more subtle.
-- Added an optimization to how modules are launched. This will make
- a difference for team use in high latency situations.
-- Rewrote MSF Scans feature to use console queue. This option is more
- reliable and it makes the code easier to follow.
-- Added a hack to combine chat message writes with a read request.
- This will make the event log more responsive in a high latency
- situation (can't you tell I care about this "situation")
-- Fixed text highlights through Ctrl+F on Windows. UNIX platforms
- were always OK. Another good reason to not use these tools on
- Windows. Ever.
-- View -> Downloads Sync Files feature now works on Windows. It looks
- like leaving those pesky :'s in the file paths is bad.
-
-17 May 12
----------
-- Fixed bug with loot/download viewer breaking with a font resize.
-- Default console font color is now grey. I never noticed that I had
- white text on a black background before. That's a lot of contrast.
- This is adjustable too through Armitage -> Preferences.
-- And... the Armitage console now displays pretty colors. If you don't
- like colors, set the console.show_colors.boolean preference to false
- through Armitage -> Preferences.
-- Fixed a bug preventing input field from getting focus when popping a
- console tab using Ctrl+W.
-
-14 May 12
----------
-- Oopserific--dynamic workspace shortcuts were not bound until you
- clicked the Workspaces menu. I fixed that.
-- Improved console pool's ability to detect a dead console. If you saw
- "null" prompts in an open tab, it's because of a dead console. Fixed
-- Bound Ctrl+Backspace to reset dynamic workspaces. Ctrl+0 is now back
- to what it originally did (resetting the font size to default).
-- Added Ctrl+T to take a screenshot of the active tab
-- Added Ctrl+W to pop the active tab into its own window
-- Armitage team server is now SSL enabled. The teamserver script (you
- are using it, right?) generates a certificate for you using keytool.
- The server presents the SHA1 hash of its certificate. Armitage users
- have the opportunity to verify and trust the hash of the certificate
- presented to them or to reject it and not connect.
-- Added Ctrl+Left / Ctrl+Right to quickly navigate through tabs.
-- Added a check to prevent clients from connecting to msfrpcd directly
- when teaming is enabled.
-- Fixed a bug that prevented command shells from opening on some sessions
-- Team server client now caches certain calls to RPC server.
-- Reworked the Loot/Downloads View button. Now, all highlighted files are
- displayed in one View tab. This makes searching easier. Each file is
- displayed with a colored header (to make it easier to tell when one file
- ends and the other begins).
-- Added Sync Files button to Loot/Downloads tabs when connected to a team
- server. This button will download all files associated with the highlighted
- rows and save them in the Armitage data directory.
-
-7 May 12
---------
-Note: Armitage team server setup has changed. Refer to the manual for
-the latest information: http://www.fastandeasyhacking.com/manual#7
-
-- Armitage team mode now routes all Metasploit-bound calls through the
- deconfliction server. Armitage also pools "temporary" Metasploit
- consoles. It's too bad this is logged as one change, because it's
- more like twenty. These changes were motivated by a desire to avoid
- triggering a race condition that was introduced w/ Metasploit 4.3.0.
- http://dev.metasploit.com/redmine/issues/6829
-
- On the bright side these changes will allow a lot more flexibility
- to optimize how Armitage interacts with msfrpcd and to do some neat
- things (like logging) in a centralized way.
-- Module description (in module launch dialog) is now resizable.
-- Added Ctrl+D keyboard shortcut to close active tab.
-- Armitage now uses (more robust) console queue for launching post
- modules, handlers, brute force attacks, and other things.
-- Fixed a race condition in the Jobs tab refresh after killing a job
-- Armitage now filters smb hashes from non-psexec/smb login dialogs.
-- Added armitage.log_data_here.folder setting. This setting lets you
- specify where Armitage will save its logs, downloaded files, and
- screenshots. *cough* Some penetration testers like to dump everything
- to an encrypted volume. *cough*. I apologize it took this long to
- get this feature in place.
-- Improved perceived responsiveness of a console interaction
-
-17 Apr 12
----------
-- Modified how Armitage determines a console command is complete to stay
- compat with behavior changes in a recent Metasploit update.
-- Armitage now queues console commands to prevent out of order execution.
-
-16 Apr 12
----------
-- The search field in the module browser now updates results in real time.
- Start typing and Armitage will start filtering the module tree for you.
- Clear the field to reset it to the default state.
-- Added keyboard shortcuts to switch dynamic workspaces...
- Ctrl+1 = first workspace
- Ctrl+2 = second workspace
- ....
- Ctrl+0 = show all
-- Added keyboard shortcuts:
- Ctrl+N = new console
- Ctrl+O = open preferences
-- Armitage's Meterpreter -> Access -> Dump Hashes -> lsass method is now
- much better about grabbing all of the hashdump output and adding it to
- the creds table. The hashdump command returns output as an arbitrary
- number of chunks. I now use a different read strategy for determining when
- the output is complete.
-- You may now use Ctrl+Alt to deselect highlighted items in a range in the
- Jobs and Workspaces table views (most other table views that do multi
- selection should allow this already).
-- Added Shell -> Pass Session for *NIX shell sessions. Uses the system_session
- module to pass a shell session elsewhere (or duplicate the current shell)
-
-29 Mar 12
----------
-- Fixed a bug that affects first-time users. Armitage was not initializing a
- console before trying to connect to the database.
-
-28 Mar 12
----------
-- Team server now delivers chat messages in batches vs. one line at a time.
- This will make syncing on reconnect much better (in theory)
-- Several optimizations to prevent unnecessary reads/calls to deconfliction
- server when in team mode. This will primarily affect high latency situations.
-- Use Shift+Click to close all tabs with the same name. This feature now closes
- all tabs in the same group (e.g., all screenshots, file browsers, command
- shells, etc.)
-- Armitage now logs launches of the enum_dns module.
-- Hosts -> DNS Enumerate now populates NS field with highlighted host.
-- Armitage now adds a tooltip to tabs associated with a session. Hover your
- mouse over a tab X button to see which host the tab is associated with.
-- Fixed a potential exception caused when listing downloads.
-- Created a queue to process certain commands meant for Metasploit in order and
- in a throttled manner. Started moving some Armitage calls to it. Now you can
- fire an exploit at 1,000 hosts and Armitage won't blink. It might take awhile
- before that exploit finishes firing against all of the hosts though :)
-- The file browser now has a "List Drives" button. It's only available on
- Windows sessions. Click it to see which drives are available.
-- File browser can now navigate to folders with apostrophes in their name.
-- Made some major internal changes to how Armitage interacts with Metasploit. The
- goal is to make a more robust and faster hacking experience for you.
-
-22 Mar 12
----------
-- Updated Armitage NMap profiles with the following:
- -T4 (instead of -T5) [wait longer for open services to reply]
- -n [forces NMap to not resolve the hostname of IP addresses]
- --min-hostgroup 96 [allows more parallelism when scanning hosts]
-- Armitage now intercepts screenshot and webcam_snap commands from meterpreter
- shell and performs the appropriate action with them.
-- View -> Creds -> Export button now works in team mode.
-- Doh! Armitage now properly shows VMWare icon when OS is set to a VMWare ESXi
-- Armitage "is command finished?" heuristic now accounts for commands like
- del /S which prompt with a (Y/N)? - you can safely use these commands again.
-- Armitage now detects whether a client connecting to the team server is out
- dated or not. It rejects old clients. They will get a message indicating they
- need to update and then their client won't do anything else. You'll see a
- message printed to STDOUT where the team server ran about the rejection.
-- Added a * indicator to the active workspace in the workspaces menu.
-- Added Hosts -> DNS Enumerate, this menu launches a Metasploit module that will
- attempt to discover hosts by querying a name server in different ways.
-- Added a file chooser helper to WORDLIST option.
-- Armitage now displays a pivot relationship between a compromised host and the
- NAT/proxy device it is connected through.
-- Added a Copy button to services tab. This button copies the highlighted hosts
- to the clipboard. I found myself needing this several times recently.
-- Improved reverse payload selection logic (now it includes rev php meterpreter)
-- Armitage now sets a different LPORT for each exploit launched with a rev payload
-
-10:30am
-- Changed algorithm for determining which edges to highlight in graph view. If there
- is a pivot and both sides have a session, then the edge is highlighted.
-
-8 Mar 12 1.43-dev
---------
-- Armitage now uses session_host to determine which host a session is associated
- with. This value is grabbed directly from the OS itself. You'll no longer have
- 20 meterpreter sessions associated with a NAT/firewall device.
-- Armitage now spins up a new listener for each client-side attack (no longer
- relying on the random default listener created on startup). Of course you can
- change this... double-click the PAYLOAD option to set it to something else.
-- Token stealing dialog now disables refresh button while grabbing tokens. Enables
- it again when done.
-- Armitage now talks to Metasploit every two minutes to prevent auth timeout.
-- Armitage now displays a firewall icon for hosts with no OS marked as a firewall
- by MSF.
-- Armitage now selects an IPv6 bind payload when attacking IPv6 hosts.
-- Armitage now explicitly sets RPORT for different MSF Scan options and psexec.
-- Updated the about dialog to include a version number and release date.
-- Added a ./teamserver [external IP] [shared pass] script to the UNIX distro of
- Armitage. This script makes it much easier to startup Armitage's team server mode.
-
-2 Mar 12 - Catching up to a few MSF 4.3.0-dev changes...
---------
-- Added a tab rename feature.
-- Hosts that self report as .NET server now display an XP/2003 era icon.
-- Updated route command parser to conform to Metasploit 4.3.0's output for it
-- "Check all credentials" feature now works when running the deconfliction
- server AND client from the same folder.
-- [host] -> Host -> Operating System -> * now clears notes related to host
- before updating OS. This allows future scans to trigger MSF normalization
- code and update the OS to something else (e.g., from Unknown to X)
-
-29 Feb 12
----------
-- Armitage now displays a VMWare icon for hosts flagged as ESX/ESXi servers
-- Overhauled token stealing user experience--this is the cadillac version. You
- now get a nice list of the available tokens (from the post module), click to
- impersonate, refresh, rev2self, and getuid.
-- Improved file browser responsiveness
-- Table view now allows individual hosts to be deselected in an interveral
- (Armitage will no longer reselect these hosts for you)
-- Dynamic workspaces no longer requires a comma and a space between entries (a
- comma is good enough)
-- Improved the [Host] -> Remove menu option
-- Deconfliction server now returns the previous 100 events to new clients.
-- File browser directory up button is now more obvious
-- Keyboard accelerators when you right-click in the graph view are now correct.
-- Adjusted the graph view scrolling increments to something sane.
-- Added a slight delay between commands issued to a console to prevent them
- from executing out of order.
-
-21 Feb 12
----------
-- Added Cut/Copy/Paste menu to table cell editor.
-- Module browser search field now treats spaces as a wildcard. You may type:
- "win meterp" and Armitage will treat it as "win*meterp"
-- Hovering over an edge in graph view no longer reports a "null" tooltip
-- Fixed parsing of ps output for the process dialog (it's much much better now)
-
-14 Feb 12
----------
-- Added ports 5631 (pc anywhere) and 902 (vmauthd) to the MSF Scans feature.
-- Several cosmetic tweaks to the spacing in Armitage tables.
-- Moved table render code from Sleep to Java to avoid potential lock conflicts
-- Added support for vba-exe payload output type.
-- Payload generation dialog now sets more appropriate default options for the
- vba output type when it is selected.
-- Meterp command shell "read more stuff?" heuristic now accounts for Yes/No/All
-- Fixed ExitOnSession showing up twice when setting advanced options for a
- client-side exploit
-- You may now import multiple files through Hosts -> Import again.
-- Added 5s timeout to d-server connect attempt.
-- Added a --client [connect.properties] to specify which Metasploit server to
- connect to. The connect.properties file is a Java properties file that looks
- like this (without the leading whitespace):
-
- host=127.0.0.1
- port=55553
- user=msf
- pass=test
-
-19 Jan 12
----------
-- Data export now includes a sessions file. This lists all of the Metasploit
- sessions you had in your database. There's some neat data here including
- which exploit was used, which payload, start time, and close time. You can
- calculate how much time you spent on your client's boxes. Cool stuff.
-- Fixed a potential dead-lock caused by mouse enter/exit events firing code
- that required a lock. Nice landmine to defuse.
-- Fixed a weird condition with d-server detection. Sometimes (rarely)
- Armitage wouldn't detect the d-server even when it's present.
-- Added check to d-server allowing one lock per/client. Client won't reobtain
- a lock until it lets it go. This prevents you from opening two shell tabs
- for a shell session in team mode.
-- Fixed an infinite loop condition when some Windows shell commands would
- return output with no newlines (e.g., net stop [some service]). Thanks
- Jesse for pointing me to this one.
-- Data export now includes a timeline file. This file documents all of the
- major engagement events seen by Armitage. Included with each of these
- events is the source ip of the attack system and the user who carried out
- the action (when teaming is setup).
-- Data export now exports timestamps with current timezone (not GMT)
-- Fixed a nasty bug that's been with Armitage since the beginning! I wasn't
- freeing edges properly in the graph view. If you had pivots setup in graph
- view and used Armitage long enough--eventually Armitage would slow down until
- the program became unusable. At least it's fixed now.
-- Adjusted the d-server state identity hash combination algorithm to better
- avoid collissions.
-- Armitage now displays 'shell session' below a host if the host info is just
- the Windows shell banner.
-
-5 Jan 12
---------
-- Armitage d-server now transmits hosts, service, and session state only
- when something has changed. This makes teaming much snappier.
-- Uploading an imported hosts file now shows a progress dialog.
-- File browser upload function no longer blocks the user interface in team
- mode. A progress dialog is shown for uploading larger files.
-- Removed Ctrl+R refresh hosts shortcut from graph view (it's no longer
- necessary)
-- Armitage now exits if it was unable to connect to the collaboration server.
-- Hosts -> NMap Scans and Hosts -> MSF Scans dialogs are now populated with
- the selected values from the target area by default.
-- You may now interact with a Windows command shell through Java meterpreter.
-- Armitage no longer shows Webcam Shot option through Java meterpreter.
-- Armitage now detects when it does not have read permissions for the database
- YAML file and prompts with something helpful. Before it would just freeze
- with a blank dialog. Not helpful. :)
-- Armitage now only shows services that are open.
-- View -> Reporting -> Export Data now has the capability of dumping the whole
- database (not just the current workspace).
-- Added a dialog to View -> Reporting Export Data. Now you have the ability to
- dump all hosts or choose to dump one of the dynamic workspaces. This gives
- you a lot of flexibility with which hosts are included.
-- Cleaned up exported output of vulnerabilities in the Metasploit database:
- -- duplicate entries are collapsed to one (this was the fault of my query)
- -- refs column contains references separated by a comma and a space
- -- added info and module columns. The module column indicates the appropriate
- Metasploit module
- -- Metasploit modules now populate name, info, and module in an appropriate
- way.
-- Values exported to TSV are cleaned up such that newlines are replaced with a
- literal \n and tabs are converted to three spaces.
-
-30 Dec 11 - last release of the year?
----------
-- Hosts -> Clear Database now clears the sessions and clients tables
-- Fixed a bug preventing dynamic workspace port/session filter from
- working on a fresh database. This was a fun one. This only affected
- folks with a completely fresh database and because Hosts -> Clear
- Database didn't clear everything, this went unnoticed until now.
-- Added various reverse shell payloads to payload helper dialog.
-- Added file chooser helper for SigningCert and SigningKey options.
-- Added hack to return correct route info when setting up pivoting through
- Java meterpreter.
-- Armitage now posts a note to the event log when a user starts a browser
- exploit or a server module.
-- Armitage now supports dragging and dropping a module onto a host in graph
- and table view. This action opens the module launcher configured to work
- with that host.
-- Drastically rewrote MSF Scans. MSF Scans now intelligently builds a list
- of ports to scan based on what Metasploit can do. After an initial port
- scan, MSF Scans runs discovery modules against relevant hosts. As a bonus
- you will see all of the output of these scans.
-- Enhanced the Windows heuristic used to guess which OS image to display
-- The deconfliction server throttle is now less draconian about how long it
- throttles a call.
-- Armitage no longer posts to the event log from the UI thread (this will
- prevent the UI from blocking in some cases)
-- Command shell now handles interaction with d-server in a separate thread
- from the UI thread. This will prevent UI blocking in some cases.
-- Added Ping Sweep... option for non-Windows meterpreter sessions. Now Java
- meterpreter users have a quick host discovery option.
-- Change Host OS option now matches new Metasploit database schema.
-- Deconfliction server now sets LHOST to the IP address you provided. Also,
- Armitage clients do not overwrite LHOST once it is set.
-- Interacting with a shell in team mode no longer blocks UI to communicate
- with d-server.
-
-12 Dec 11
----------
-- Armitage teaming mode now downloads the resulting file for any fileformat
- exploit.
-- Armitage -> Set Exploit Rank and Set Target View now show a * next to an
- item to indicate the current setting.
-- Shift+click on Launch in a module launch dialog will not close the module
- launch dialog. One use case for this: set up a payload multi/handler,
- shift+click Launch to do it, then change output type to exe, click Launch
- and you're all set.
-- Dynamic Workspace editor now trims whitespace from your entries. Errant
- whitespace causes Armitage to reject the entry and your workspace never
- acivates.
-- Updated the "msfrpcd died" troubleshooting dialog. The new one takes folks
- to a website with detailed information.
-- Armitage now uses "load" to load a meterpreter module instead of "use"
-- Key logger event log announcement now notes the session ID. This is so
- your teammates will know not to migrate that session since it's recording
- key strokes.
-- Right-click X in tab -> Save Screenshot now displays filename without the
- path.
-- Deconfliction server now detects when database is not available and offers
- troubleshooting steps.
-- Loot/Downloads viewer now has a right-click menu to Copy selected text.
-
-22 Nov 11 - A big improvement...
----------
-- Services refresh is now set to 30s (vs. 60s before)
-- Workspaces -> Manage now opens as a tab and shows all data about workspaces
-- Fixed a bug with Edit Workspace not auto-checking session box when set.
-- Meterpreter -> Access -> Escalate Privileges now highlights the priv esc
- options in the post module true. This is viable now that getsystem is a
- module.
-- Payload module launcher now lets you set Template, Iterations, Encoder, and
- KeepTemplateWorking for any Windows payload. Also, payload is generated and
- saved locally without opening a tab.
-- sessions -i ## trap is now smarter and opens a shell tab for shell sessions,
- a meterpreter tab for meterpreter sessions, and offers an error when you
- try to interact with a session that doesn't exist.
-- Armitage no longer shows a host until it receives a db.hosts reply.
-- Right-click a module and select Relevant Targets to create a dynamic
- workspace that shows only targets that meet the host/port criteria for that
- module. Use Ctrl+A to select all of those hosts and rock'n'roll. :)
-- Hosts -> Import Hosts now works when the folder/file has spaces in it.
-- Dynamic workspaces are now local to the current Armitage client. They no
- longer have a global effect in teaming mode.
-- Added an Activate button to workspace management dialog.
-- Fixed a bug with sessions only dyn workspace sometimes showing hosts that
- do not have sessions.
-- You may now highlight multiple jobs in View -> Jobs and select Kill to get
- rid of all them at once.
-
-11.17.11 - All the things I wanted to do, but didn't have time
---------
-Release Note 1: if you use Armitage teaming, things changed. You have to start
-msfrpcd with a different set of flags and your team must use the latest version
-of Armitage. If you have a script that starts msfrpcd, you must update it.
-
-More information is at: http://www.fastandeasyhacking.com/manual#7
-
-Release Note 2: Armitage requires a Metasploit base install of 4.0 or greater.
-If you use msfupdate to update a Metasploit install prior to 4.0, then Armitage
-will not work. The Metasploit pre-4.0 installers did not install dependencies
-that Armitage requires today. Missing are certain Java cryptography extensions
-and the msgpack Ruby gem. BackTrack 5 is Metasploit 3.7. BackTrack 5r1 is 4.0.
-
-- db.services now limits its results to hosts that are returned by db.hosts.
- This fixes a bug where services data for some hosts was not returned when
- when >3,500 hosts are in the armitage database.
-- MSF Scans menu is now available under Hosts menu again.
-- Removed Browser Autopwn menu as its future in Metasploit is undecided.
-- Find Attacks/Hail Mary now pull latest service info from DB before resolving
- the attacks. This prevents a situation where Find Attacks after a scan yielded
- nothing because Armitage had not synced with the database yet.
-- Deconfliction server now complains when you try to use 127.0.0.1 as your host
-- Added cut/copy/paste/clear menu to most textfields. (for Glen)
-- Added Workspaces -> Manage to edit, add, and remove dynamic workspaces.
-- Added code to intercept "sessions -i ##" and open a meterpreter tab instead.
-- Armitage now honors port setting when starting msfrpcd for you.
-- Armitage now detects msfrpcd shutdown and offers user advice to fix it. The
- most common cause is probably a lack of msgpack.
-- Fixed a deadlock that happened when generating a payload.
-
-11.13.11 - A major rewrite of a lot of stuff.
---------
-- Moved from XML/RPC interface to MSGPACK. This should be much faster.
-- Removed Armitage dependence on Metapsloit db.* API--since it may go away soon.
-- Attack recommendations and Hail Mary no longer depend on db_autopwn. New code
- offers same results with improved speed.
-- Simplified Hail Mary and Find Attacks to use port/OS information only.
-- Greatly improved keystroke recorder. The option is now called "Log Keystrokes".
- It uses the Metasploit keystroke_recorder post module. Results are regularly
- dumped into the post module window. Also, the results are stored as loot
- available for the team to view.
-- Launching the keystroke_recorder post module now makes an announcement to the
- event log.
-- Added a button to Processes tab to log keystrokes. This will bring up a the
- keystroke_recorder module configured to migrate to the process and record
- keystrokes there.
-- Removed Workspaces menu. Armitage now works from the default workspace.
-- Simplified Hosts menu.
-- Meterpreter -> Access -> Persistence now calls persistence post module.
-- Improved Meterpreter -> Access -> Steal Tokens, it's still wonky but it's a
- little better now.
-- Host import now uses db_import command running in a console.
-- Added Armitage -> Set Exploit Rank to update the minimum exploit rank value.
-- Armitage now displays up to 512 hosts and 12,288 services at any given time.
- This keeps Armitage operable even if you scan a big freaking network.
-- Added dynamic workspaces. This feature gives you the ability to define a filter
- on the database and Armitage will display only hosts that match this filter.
- You may define filters based on operating system, open ports, and network address.
- Go to Workspaces -> Create to create a filter. Filters show up under the
- Workspaces menu and you may switch back and forth betweem them too.
-- Simplified the Connect dialog. One button. :)
-- Right-click Scan option now scans for HTTPS.
-- Check all credentials option no longer tries blank passwords/username as pass
-- Added a read optimization to the console code. This will reduce load in a team
- engagement + make consoles feel faster when there is output.
-- Armitage now opens the event log tab instead of a metasploit console tab in team
- mode.
-- Fixed a host sorting issue in table view.
-- Moved View -> Targets to Armitage -> Set Target View
-- Overhauled how Armitage handles downloaded files. Downloads are saved to a set
- place on the attack server. Downloads are available to the whole team through
- View -> Downloads. This works like the loot viewer. Team members may view text
- files or download binary files. This method is friendlier when downloading whole
- directories of stuff.
-
-10.20.11
---------
-- Modified hail mary attack to get a little more success with some common Windows
- attacks.
-
-10.17.11
---------
-- Added menu item to dump hashes using the old lsass method or the smart hashdump
- registry method.
-
-10.13.11 take II?
---------
-- updated msf3/data directories to account for new install locations.
-- Removed Meterpreter -> Access - > Duplicate because it is now redundant with
- Meterpreter -> Access -> Pass Session
-- Updated Meterpreter -> Access -> Pass Session to have LPORT of default
- Meterpreter listener. Click Launch to simply duplicate your current session.
-- Added Meterpreter -> Access -> Steal Token to list and steal user/group tokens
-- Updated meterpreter multiplexer to not expect output from rev2self.
-
-10.13.11
---------
-- added ability to set up VNC on a target when connected to a remote Metasploit
-- Armitage now tells you where to connect your VNC client to access the desktop
- of a compromised host. You'll need to have a local VNC client available.
-
-10.12.11 - oooh SECKSY
---------
-- fixed a typo in the default armitage settings file.
-- made PAYLOAD helper friendly to post/windows/manage/payload_inject
-- Meterpreter -> Access -> Pass Session now uses payload_inject
-
-10.12.11
---------
-- Meterpreter N -> Hashdump now runs post/windows/gather/smart_hashdump module.
- This gives you the benefit of seeing its output and it works in more
- situations.
-- Right-click the tab X button and select Save Screenshot to take a screenshot
- of the current tab. This image will render the tab contents exactly as seen
- on the screen. Useful for putting together a report or presentation.
- (thanks Rob for the suggestion)
-- Added a module launcher helper for RHOSTS and RHOST. This helper will let you
- import a list of IPs (separated by newlines) from a file into these fields.
-- View -> Reporting -> Export Data no longer fails if there are no hosts to
- export data about.
-- Armitage now runs post/auxiliary modules as jobs (meaning you may kill them
- using View -> Jobs)
-- hashdump and smart_hashdump post modules will now announce to the event log
- that hashes were dumped when they're run (whether through the menu or
- the module browser).
-- View -> Reporting -> Export Data now takes a screenshot of the table view
- and includes it in the artifacts (when table view is active)
-
-09.26.11 - take 2
---------
-- Improved performance when launching exploits and other modules that open
- a new tab.
-- Launching an exploit will only open a tab when fewer than four hosts are
- highlighted. If four or more are highlighted, then Armitage will use the old
- behavior of silently launching each exploit. [You're supposed to be able to
- attack hundreds of hosts at once--hence my desire to add this caveat]
-- When launching an exploit in the background, Armitage will show a dialog
- indicating that the exploit was launched against X hosts.
-
-09.26.11
---------
-- You may now drag and drop Armitage tabs to rearrange their order.
-- Armitage "show all commands" option (for better exploit feedback) is now on
- by default.
-- You may now right-click a screenshot/webcam shot to zoom in or out on the
- image. The zoom-level stays fixed (in case you refresh the image later)
-- Added a menu to the X button in the tabs. Through this menu you may open the
- current tab in its own window or close all like tabs.
-- Updated Hosts -> Import Hosts to reflect the current importable file types.
-- Added View -> Reporting -> Export Data to dump most Metasploit tables into
- TSV and XML files suitable for parsing (by you!) into a report format of
- some sort.
-- Armitage now encodes (-e x86/shikata_ga_nai -i 3) any Windows meterpreter
- payload generated from the module launcher dialog.
-- [host] -> Meterpreter -> Access -> Duplicate now uses multi_meter_inject to
- launch Meterpreter into memory directly (rather than upload and execute a file)
-- In teaming mode, Armitage will now automatically upload a file selected through
- the + option (e.g., USER_FILE +) to the Metasploit server and set the value
- in Metasploit accordingly.
-- Modified error output for a failed Metasploit method to only display the
- method name and error message. Displaying a large input would cause Armitage
- UI to start flashing in some weird disco mode until a hard reset. Yeaah.
-
-09.08.11
---------
-- Armitage now highlights the event log tab when something new is posted and the
- tab is not active. Control the color by editing tab.highlight.color pref.
-- Fixed a bug preventing preference values from saving properly (and having an
- effect).
-- Added "Check all credentials" option to the login dialogs. This option will
- login to the service to test each credential. Successful logins will populate
- the credentials table.
-- Fixed a bug preventing the first open console from scrolling all the way to
- the bottom when open.
-- Credential export button now escapes the file path (making the button work on
- Windows). This bug is another good example of why you should use Armitage on
- Linux. It'll just work. Windows users: expect surprises.
-- Use Ctrl+Shift on a tab X button to remove the tab and create a desktop window
- with its contents. I suspect you'll find this really useful at times.
-- Armitage now remembers your auto-layout setting. Right-click in the graph area
- to change it.
-- Setting armitage.show_all_commands.boolean to true will now run each exploit in
- its own tab. Setting this is a good way to get feedback on the attacks you
- launch and to learn the Metasploit console better.
-
-07.31.11
---------
-- Fixed bug preventing Meterpreter -> Access -> Hashdump from noting all hashes
- into the credentials table.
-
-07.30.11 - Paying down some engineering debt.
---------
-- Loot viewer no longer displays non-text files. If you try to "view" a
- binary loot, it will the folder containing it.
-- Improved UI responsiveness by making sure all communication with Metasploit
- happens in some thread other than the UI thread. This will prevent latency
- from bogging the UI down and making it feel locked up. Armitage will also
- feel a lot faster for many actions.
-- The code that creates a console, executes a command, and calls a callback
- now uses a much tighter sleeping schedule (10ms vs 500ms). This greatly
- improves Armitage responsiveness.
-- Armitage connect progress dialog now shows progress setting up the Armitage
- environment once a connection is successful. Chances are it'll happen fast
- enough that you won't see it.
-- View -> Activity Log now opens activity log folder on MacOS X.
-- Removed restriction that prevents user from deleting/clearing default
- workspace.
-- File chooser helper used to set values in the module launch dialog now
- escapes all backslashes in the path. This fixes a problem on Windows caused
- by the console stripping the unescaped backslashes.
-
-07.28.11 - Armed for Metasploit 4
---------
-- Armitage now sends use prive with use stdapi when it gets a command not
- found error in Meterpreter.
-- Armitage now sends BLANK_PASSWORDS 0 with any Login menu items. This
- should speed up the login by forcing Metasploit to not try a blank
- user/password first.
-- Armitage no longer sends payload related variables to auxiliary modules.
- (note to programmer: auxiliary modules don't use PAYLOADs :P~~~)
-- Module launch dialog for client-side attacks (fileformat and browser)
- now presents payload options to you. They're still configured to a
- reasonable default (and updated as the exploit target changes).
-- Client-side payload "guess" is now better about selecting an OS X specific
- payload when appropriate.
-- Double-click the PAYLOAD option in the module launch dialog to open a
- chooser that lets you select a payload and choose whether to create a
- handler for it or not. This will configure the appropriate payload vars
- for you. You're welcome to tweak them from there.
-- Simplified some of the logic in the file browser and added better error
- reporting.
-- Added a visual hint to clickable option names in the module launcher.
- Double-clicking these options will open a dialog to assist setting the value.
-- Added a visual hint to clickable preference types in the preferences window.
- Double-clicking these types will open a dialog to assist setting the value.
-- Fixed a potential deadlock caused by launching modules while Armitage is
- still initializing.
-- Added a preference to disable displaying the MSF ASCII banner when a new
- console opens. This preference is set to show the banner by default.
-- Added a regexp to strip non-ascii chars from usernames collected with dump
- hashes. The RPC daemon throws an exception when I try to report usernames
- with these chars in them.
-
-23 Jul 11 - Change Log
----------
-- Ooops! My baaad. I broke db.creds in MSF. Someone else unbroke it. Now
- I call it the right way from Armitage so everything works like it's
- supposed to. :)
-
-21 Jul 11 - Change Log
----------
-- loots dialog is now populated by db.loots RPC call. This is faster
- and compatible with changes made to MSF.
-- credentials dialog is now populated by.creds RPC call. This is
- faster and compatible with changes made to MSF.
-- RPC connection code now strips out more characters that may cause
- the XML parser to complain.
-
- ** There were a few changes made to MSF over the past few days that
- broke the credentials and loots dialog. This update brings Armitage
- back to compatability with what exists in MSF trunk. **
-
-19 Jul 11 - Change Log
----------
-- You may now execute a post module against multiple hosts at once.
- Simply highlight the hosts, find your post module, double-click it
- and watch the magic happen. The drawback--each session will open a
- new tab to display the output of the post module.
-- You may now hold down shift and click on a tab to close all tabs
- with the same title. If you run a post module against multiple hosts
- this is a good way to get rid of all those tabs.
-- Graph view Ctrl+P shortcut (save screenshot of graph view) now shows
- pivots.
-- post module output now logs to ~/.armitage/[host]/post.log
-- Fixed some weirdness with popup menu mouse events not being consumed
-- Added View -> Activity Logs to open folder containing Armitage logs
-- Fixed command history so up arrow really gives the previous command
-- Keystrokes dumped using dump button on key scan dialog are now logged
- to ~/.armitage/[host]/keyscan.log
-
- *Respun* Armitage.dmg with .app file fix for MacOS X Lion. Thanks to
- @NightLion for contributing this.
-
-12 Jul 11 - Change Log
----------
-- Fixed a race condition causing some file browser actions to fail on
- Windows hosts at times.
-- Files downloaded through file browser are now archived in:
- [host]\Downloads
-- Hail Mary output nows goes to [log dir]\all\hailmary.log
-- Added Crack Passwords button to Credentials tab. This opens the
- launcher for John the Ripper: auxiliary/analyze/jtr_crack_fast
-- Added Post Modules item to Meterpreter N -> Explore and Shell N menus.
- This menu item will show applicable post-exploitation modules in
- the module browser.
-- Loot browser now opens loot viewer as a tab.
-- Loot viewer now has many of the same keyboard shortcuts as a console
- tab. You can Ctrl+F to search for stuff, Ctrl+Plus/Minus to increase
- and shrink the font, and Ctrl+A to select everything.
-
-02 Jul 11 - Change Log
----------
-- Doubled wait time for Meterpreter ls command to complete.
-- Armitage now shows psexec option instead of smb on Login menu for
- Windows hosts (when smb service is present).
-- Fixed bug preventing manual import of a single host
-- Removed automatic resending of console commands that didn't appear
- sent. This was a work-around for a msf bug that may not be present
- anymore. We'll find out.
-- Removed --script-all from NMap profiles. I saw quite a discussion
- about this on the NMap mailing list. Oops. Oh well :)
- http://seclists.org/nmap-dev/2011/q2/572
-- All host import options now use Metasploit's import_data RPC call.
- This is what all the remote calls map to anyways.
-- Added Help button to start dialog.
-- Armitage now opens cmd.exe and executes programs from the file
- browser using the current process token (execute -t in Meterpreter)
-- Added logging. Logs are stored in ~/.armitage organized as
- [date]/[host]/[file]. The logging captures:
-
- - all Console tab output (console.log)
- - the collaboration event log (event.log)
- - all Meterpreter tab output (meterpreter_[session].log)
- - all Command Shell tab output (cmd_[session]_[pid].log)
- - all Shell tab output (shell_[session].log)
- - all Screenshots captured through Armitage (.../Screenshots/)
- - all Webcam shots captured through Armitage (.../Webcam Shots/)
-
- You can turn this off by setting armitage.log_everything.boolean
- to false in the Armitage preferences.
-- Added a Reset button to preferences dialog to reset Armitage
- preferences.
-- SSL now defaults to off on all platforms
-- Added a Default button to the database settings helper. This
- button loads the default database settings ignoring what is in the
- config file.
-- Loot viewer now uses the same colors and font as a console tab
-- Fixed bug preventing Loot browser from populating data/time column
-- Preferences dialog now brings font and shortcut dialogs to front
- to prevent them from being hidden by prefs dialog.
-
-24 Apr 11 - Happy Birthday Gerry Edition
----------
-- Added a check to prevent jerk faces from entering an empty nick in
- collaborative mode. :)
-- Fixed a potential dead-lock condition with the screenshot/webcam
- shot tab.
-- Armitage -> Listeners -> Reverse now binds to 0.0.0.0.
-- Host import now posts an event to the collab mode shared event log
-- added an option to display an MOTD message to clients that connect
- to Armitage in the collaboration mode. Use -m or --motd before
- --server and specify a file, e.g.:
-
- armitage -m /path/to/motd.txt --server ...
-
- Clients will see this message when they connect.
-- Added Meterpreter -> Access -> Pass Session to send a meterpreter
- session to a handler set up on another host.
-- Armitage now sets ExitOnSession to false for multi/handlers started
- within Armitage.
-- Pivoting and ARP Scan dialogs now highlight first option by default.
-- Added a sanity check to the Route class to prevent malformed IPs
- from screwing up sorting.
-- Removed sqlite3 from the database options. I should have done this
- long ago--it has no place in Armitage.
-- Armitage now intercepts meterpreter "shell" command and opens a
- new tab with the cmd.exe interaction in it.
-
-17 Apr 11 - Change Log
----------
-- Windows command shell interactions are now less likely to die. How
- oh how did we get here? Armitage interacts with cmd.exe through a
- Meterpreter channel. If an unnecessary read happens, it ties up the
- meterpreter session for 10-20s AND the channel dies. If you typed
- commands in too quickly, it's probable that Armitage would do an
- unnecessary read and the channel would die. I believe I've headed
- off this problem. Armitage now locks the channel until the command
- completes. If the command times out or completes, the channel
- becomes unlocked. This should prevent most out of place reads. In
- collaboration mode, this was a great way for excited teammates to
- tie up the meterp session for everyone. :) "I typed this command
- 20 times and nothing happened!!!" Doh! You queued 20 reads with a
- 10-20S timeout each and destroyed that channel. -- Armitage
- protects against this situation now.
-- Command history no longer saves empty commands.
-- Armitage server mode now provides all details that a client needs
- to connect to the server.
-
-13 Apr 11 - Change Log (Dayton, OH Capstone Edition)
----------
-- Metasploit now has host normalization (this is great news). I've
- removed the OS reporting code from Armitage as a consequence. This
- means less overhead communicating with Metasploit
-- Fixed a potential deadlock triggered when interacting with a Windows
- command shell. Sorry about the freezes Matt and Brant.
-- Fixed a strange condition in Armitage that sometimes caused shell
- sessions to die.
-- Download from file browser now notifies user when a file is downloaded.
-- Armitage server mode now prints database connect string to console to
- assist with set up of Metasploit teaming.
-- Fixed a bug causing exploit recommendations to not show for Windows
- hosts due to host normalization
-- Added a check to prevent cd .. button in file browser from retriggering
- too quickly. This will prevent the meterpreter command queue from
- becoming very backed up doing a cd/ls over and over again.
-- Graph view no longer counts edges as a selected item when creating a
- list of hosts to apply an action to.
-- Added another heuristic to prevent Windows cmd.exe interaction from
- locking up.
-
-10 Apr 11 - Change Log
----------
-- Fixed key logger dump button.
-- Process migrate function displays success or fail message again.
-- Armitage now displays nmap output in a tab. You can thank scriptjunkie
- for making this work in Metasploit. Please send cash, check, or money
- order directly to him.
-- Greatly improved post-pivot host discovery workflow... here's the deal:
- -- [host] -> Meterpreter -> ARP Scan menu now shows networks local to
- host and lets you choose to launch an ARP scan from that Meterpreter
- session.
- -- Highlight one or more hosts, right-click, and select Scan to launch
- MSF discovery scans against the highlighted hosts.
-- Added a rudimentary loot browser/viewer to Armitage. Go to View -> Loot
- to see the currently captured loots. Loot is the Metasploit term for
- data captured by certain post/ modules.
-- Armitage now presents a warning when it detects a second Metasploit
- user connected to the same Metasploit server without the collaboration
- server in place.
-- Armitage collaboration mode now updates target information more often
-- Updated Armitage to work with Metasploit's new normalized host OS
- constants and to restore the os_flavor value when it is wiped out.
-
-16 Mar 11
----------
-- Shell -> Disconnect now executes in a separate thread.
-- Armitage now creates ~/armitage-tmp and writes there if the current dir
- is /Applications or it can't write to the current directory.
-- Fixed a potential deadlock issue in the file browser
-- Directory up button in file browser now shows that it has been pressed
-- Added Execute option to file browser (now you can run a program by
- right-clicking on it and selecting Execute--for Jesse)
-- Multiple improvements to responsiveness of command shell and meterpreter
- tabs. This should benefit collaboration mode too.
-
-12 Mar 11 (MACCDC Post Day 1 Update)
----------
-- Fixed a bug preventing host import from working with a remote connection
-- Armitage client now increases default wait for meterpreter commands to
- complete when in teaming mode.
-- Increased wait time to download a generated payload file to 8s.
-
-11 Mar 11 Update (0100h EST)
----------
-- Fixed a deadlock condition in the module launcher (caused by the changes
- to increase responsiveness... oops).
-
-10 Mar 11 Update (2230h EST)
----------
-- Fixed race condition importing manual list of hosts (sometimes the file
- would get deleted). Grr.
-- Added a lock to prevent multiple Armitage clients from trying to
- determine what OS a box has. This should help in CTF situations.
-
-10 Mar 11 Changes
----------
-
-Quick story: NECCDC 2011 Red Team. TJ launches a script that lands 70
-sessions in the first few seconds. 11 red team members are connected to
-Armitage eager to carry out their pieces of pwnage. The Ruby process pegs
-the CPU and Armitage fails spectacularly. Very funny. This releases fixes
-that.
-
-- Armitage YAML parser now accepts quoted strings in the YAML fields
-- Added caching of sessions.list, db.hosts, and db.services to Armitage
- collaboration server. This should help prevent msfrpcd from overloading
- when many clients are connected and owning boxen at one time.
-- Improved GUI responsiveness by making several parts of the Armitage GUI
- spawn a new thread to avoid blocking while communicating with Metasploit
-- Added a tooltip to the "Start MSF" and "Connect" buttons to clarify use
-- Export credentials button now prompts for a remote file when connected
- to a remote Metasploit instance.
-- Export credentials and payload generate output now transparently
- downloads to your local host when connected to Armitage's collab server.
-- Armitage now loads stdapi in Meterpreter if it finds it's not loaded.
- Armitage also prompts you to rerun the failed command when this happens.
-- Right-click in services now shows popup for taking actions against
- selected hosts. Now you can do mass actions against hosts sorted by port.
-- Added Access -> Persist to Meterpreter menu. This will run Meterpreter's
- persistence script using the default Armitage handler. Meterpreter will
- start at boot and at login.
-- Added an Armitage.app file for MacOS X. Use Armitage from OS X as a
- client to connect to Metasploit hosted in other places.
-- Added a check for whether current working directory is writeable or not.
- If it's not, Armitage does all of its read/write operations in home dir.
-
-Tested with 10 concurrent Armitage clients from four boxes with 140+ shell
-sessions and a few meterpreter sessions. I think we're ready to rock now.
-
-27 Feb 11 Changes
----------
-- Webcam snap features works again. Sorry about that. :)
-- Download file button in file browser now works through the collaboration
- server. This feature has a few limitations / requirements:
-
- 1) Armitage server must have the same $PWD as msfrpcd
- 2) Files must download in less than 12s or else you'll need to retrieve
- them from the msfrpcd host.
- 3) Recursive downloads of files from a directory are kept on the host with
- msfrpcd. You'll need to retrieve them with sftp or something else.
-
-25 Feb 11 Changes
----------
-
-This release is primarily bug fixes. The network attack collaboration
-feature is further tested and ready for your use.
-
-See: http://www.youtube.com/watch?v=coF8dVLBnOQ
-
-- Armitage now consumes data from msfrpcd's stderr when Start MSF button is
- used. This means Armitage won't lock up when database tables are
- initialized during the first run on Windows.
-- pivoting, logins, hail mary, and pass-the-hash now print to the event log.
-- Pass-the-hash dialog is now available via [host] -> Login -> psexec.
-- Fixed bug causing Event Log menu to be present outside of collab mode.
-- armitage.sh start-up shell script is now named armitage
-- Console destroy and shell unlocking commands on tab close now happen in a
- new thread to prevent the GUI from blocking.
-- Armitage now stops meterpreter read thread when it detects a dead session.
-- Replaced jyaml with a quick and dirty parser that doesn't mistake ####e#
- for a double number. This was screwing up connecting to postgres for some
- of you.
-- Upload button in file browser now works through Armitage's collab server
-- Added Ctrl+P shortcut to save screen capture of hosts graph view
-
-22 Feb 11 Changes
----------
-- Improved shell "when should I read more data from this channel" heuristic.
- This means command shell sessions should not freeze on an errant Meterp.
- read command that blocks until the universe is recreated.
-- Fixed a potential deadlock using Armitage's meterpreter dialogs with a
- meterpreter tab open.
-- Command shell tab now only opens when Armitage knows channel and PID
- settings
-- Rewrote how Armitage interfaces with Meterpreter. This has a few impacts:
- -- Armitage now waits for a command to execute and reads its output
- before executing another command. This prevents Armitage from getting
- confused when you're doing a lot of stuff at once.
- -- You can now open multiple meterpreter console tabs for a session
- -- Commands executed by Armitage's dialogs will not show up in your
- Meterpreter tab(s).
-- File browser now does a cd "current directory" before each action.
-- Added a network attack collaboration feature to Armitage. This is as
- beta as it gets (although it *should* work). To use it, start msfrpcd
- and connect Armitage's collaboration server (on the same box as msfrcpd!)
-
- ./armitage --server host port user pass [ssl? 1 or 0]
-
- This will connect Armitage's collaboration server to the Metasploit RPC
- daemon you specify. This server will then bind port+1 and tell future
- Armitage clients to use it for extra collaboration features.
-
- Connect one or more remote Armitage clients as normal. Some of the
- features you get in this mode:
-
- 1. View -> Event Log for chatting and watching major events
- 2. Command shell and webcam/screenshot features work for remote clients
- 3. Armitage clients automatically lock a shell session when they're in use
- and notify other clients that it's locked if they try to use it.
- 4. Transparent real-time sharing of meterpreter amongst multiple clients.
-- Payload generation now works on Windows (I wasn't escaping the backslashes
- in the paths... doh!)
-- Armitage now prompts you for a path (and not a file chooser) when generating
- a payload using a remote connection to Metasploit.
-- Armitage now loads database settings from file in MSF_DATABASE_CONFIG env var
-- You can now highlight text in the Armitage console tabs on MacOS X.
-- Fixed a potential deadlock when opening a Windows command shell tab
-
-Update 9am EST
-- Removed a remnant of my development environment from server.sl. If you see:
- jar file to import package from was not found! at line 25
-
- Then you need to update.
-
-13 Feb 11 Changes
----------
-- Organized View menu (it was getting out of control)
-- Added RPC Console item to view menu (Start MSF only). This item will show
- the STDOUT for msfrpcd. Use this to watch nmap's output.
-- Added Ctrl+A shortcut to select all text in a console tab
-- Kill meterpreter, kill pivots, and credential dumps now use fresh
- consoles to execute. This ensures they will execute even if the global
- console is stale (this sometimes happens.)
-- Added tab completion to Meterpreter window.
-- Hosts -> Import Hosts now lets you select multiple files to import at once.
-- Use SSL is now checked by default on Linux (and unchecked by def. on Win)
-- Updated Armitage to remove or alter some UI options when connected to a
- remote Metasploit RPC instance.
-
- -- Meterpreter shell is the only interact option
- -- Webcam and Screenshot menu items are gone
- -- Upload asks for a full file name rather than show a file chooser dialog
-
- These adjustments are necessary during remote connections as Armitage does
- not have access to the local file system of the Metasploit RPC daemon.
-
-21 Jan 11 Changes
----------
-- Increased wait time between connection attempts to MSF RPC
-- Fixed bug with Windows command shell not working when using Armitage from a
- Windows host.
-- Host refresh using sysinfo now only happens when no OS is set for the host.
-- Fixed a deadlock condition caused when an automatic sysinfo request was
- made while a Meterpreter tab for the same host was open.
-
-18 Jan 11 Changes
----------
-- Added a Migrate Now! item to Meterpreter Access menu. Runs migrate -f.
-- Right-click in Meterpreter console now shows menu as before (silly bugs).
-- Armitage now detects hashdump failure and reports possible causes to you.
-- Armitage now binds default handler to 0.0.0.0.
-- Added a table view for the targets area. Go to View -> Targets to change the
- setting. If you're working with many hosts, table view may be better for you.
-- Added preliminary support for Metasploit post/ modules. You can launch them
- and if a host is highlighted, Armitage will populate the SESSION var for you.
-- Armitage now uses the sysinfo command in a meterpreter session to pull host
- OS info if it doesn't know it. This also means Armitage will auto-populate
- the host OS when a client-side attack is successful.
-- Tab completion is now ignored when input field is empty
-
-13 Jan 11 Changes
----------
-- Hosts reported as Windows Me now display W2K era Windows logo.
-- "Hail Mary" attack is now launched and managed by Armitage. Exploits are
- selected using the output of db_autopwn AND the operating system information
- Armitage knows. Also attacks are launched in a more optimal order (sorted by
- exploit rank/age). This is a big improvement over db_autopwn by itself.
-- Added a link to the Armitage Issue Tracker in the Help menu.
-- Updated remote exploit payload selection to choose Java payloads or Windows
- shell payloads before resorting to the generic/* payloads.
-- Updated client-side exploit launcher to let you select the target. Armitage
- uses this target (plus the exploit name) to determine which payload to use.
- multi/java_signed_applet works very nicely now ;)
-- Fixed (once and for all now) the mysterious OS info not refreshing bug.
- Now those pretty OS pictures will show up if Metasploit knows about the OS.
-- Added a 52 character length limit to a target's description in the target
- dropdown. This stops weird GUI layouts caused by long target descriptions.
-- Exploit recommendations now take into account FreeBSD hosts.
-- Added an OpenBSD option to the hosts menu.
-- Armitage now does a setg AutoLoadStdapi true when setting up MSF.
-- Last modified field of file browser now sorts properly.
-- Jobs console and its kill feature should now work in all circumstances.
-- Session menus for meterpreter now limited for non-Win meterp sessions.
-- Updated Armitage/Windows to provide a better startup experience. Simply
- extract the archive over your MSF install and rock n' roll.
-
-22 Dec 10 Changes
----------
-- Updated meterpreter shell and command shell console to honor your set
- preferences. I forgot to pass $preferences to the console constructor. Doh!
-- Added a -d/--debug command line option. This will dump System.getProperties()
- and a log of all exchanges with the MSF server to debug.log in the current
- working directory.
-- To play nice with existing conventions, Armitage is now licensed under the
- BSD license. Distribute, use, reuse, recycle.... have fun.
-- Fixed a deadlock condition that arose when a large nmap scan is imported
-- About dialog now shows up centered.
-- Armitage now has a graphic for Cisco IOS. You can mark a host as a Cisco IOS
- device. Also Armitage recognizes IOS from an NMAP Scan.
-- Fixed Armitage "crash" due to read timeouts. This would occur for those of
- you who ran a really taxing operation (e.g., db_autopwn).
-- Added a time limit flag to db_autopwn (20s)
-- Ctrl+R is now even more aggressive clearing internal data structures.
-- Shell N -> Meterpreter... no longer blocks waiting for the operation to
- complete.
-
-13 Dec 10 Changes
----------
-
-- Added Meterpreter -> Browse -> Webcam Shot to grab webcam snap shots.
-- You may now click the image in the webcam/screenshot view to save it.
-- Workspace -> Create menu now automatically switches you to the net workspace.
-- UNIX shell sessions now have an Upload... menu. This item will open a local
- file and use the printf command on the remote host to put it together. It's
- slow but it works.
-- Removed the rename file menu item from the file browser. It turns out I had
- my Windows command shell vs. meterpreter command interface crossed. The
- command doesn't exist in Meterpreter.
-- Upload button now waits until file is uploaded to refresh file listing
-- Added Timestomp item to File Browser popup menu. This works like a clipboard.
- Select Get MACE to capture the MACE values of the current file. Use Set MACE
- on another file to set the MACE values to the currently known attributes.
-- Dump hashes menu item no longer pulls up a new credentials tab.
-- Added a Refresh button to the credentials tab.
-- Updated db refresh code to be a little smarter about when it needs to merge
- db_notes hints into the MSF database.
-
-6 Dec 10 Changes
---------
-
-- added -y filename.yml command line option for specifying a YAML file with
- database parameters
-- updated "Start MSF" to launch "ruby msfrpcd" on Windows. This requires the
- current working directory of Armitage be set to the Metasploit base directory.
-- jobs view now parses job output with only 3 columns of information.
-- connect dialog is now centered on your screen when you start Armitage
-- Armitage now saves your settings when you use Start MSF.
-- Armitage now forces cells in editor mode to save before launching a module or
- an exploit. This should prevent a few surprises where things seemed like they
- weren't working for a few of you.
-- MSF Discovery Scans are now started from a separate thread, preventing
- Armitage from "locking up" while the scans launch. A dialog also comes up to
- state how many scans were launched.
-- MSF Discovery Scans are now limited to 2 threads/scan on Windows and 8 on
- other operating systems. This prevents serious lag issues caused by
- starting too many threads.
-- connect dialog is now a window, meaning it has an icon in whatever your
- window manager is and if you close it Armitage exits.
-- updated DB Connect String helper dialog to ask for DB user, DB pass, DB host,
- and DB name. This should prevent some of you from confusing the database
- user/pass with the MSFRPCD user/pass.
-- Current environment variables are now passed to msfrpcd when executed from
- Armitage. This will allow msfrpcd to inherit any PATH changes and other
- necessary things when Armitage is run from a shell script or batch file.
-- Added .svn folders to the Armitage distribution. Now you can use svn update .
- to keep your install of Armitage up to date.
-- File browser upload and make directory commands now allow files with spaces
- in them.
-- Armitage will now exit if it takes longer than 5 seconds to shutdown msfrpcd
- when cancel is pressed during the connecting phase.
-
-25 Nov 10
----------
-- start msf button now kills msfrpcd session if db_connect fails
-- set default database options to mysql with BackTrack 4 R2 settings.
-- Armitage -> Exit menu now kills msfrpcd, if the "Start MSF" button was used
-- Added ability to set up a multi/handler from Payload launch dialog
-
-13 Nov 10
----------
-- fixed file browser directory icon showing up in every field within Windows L&F
-- added an export button to the credentials view. This will save the credentials to
- a pwdump format file.
-- fixed console highlighting issue, sadly you'll need to click in the console input
- box for it to have focus again. Write once, debug everywhere.
-- added "hail mary" attack option--this launches db_autopwn
-- attack menus now honor the armitage.required_exploit_rank.string setting
-- added Ctrl+R shortcut for refreshing the target view (esp. OS info)
-- fixed db_notes parsing for latest version of MSF (3.5.x?)
-- fixed how auxiliary scans are displayed in the jobs table.
-- db connect helper now prepopulates fields with info taken from connect string
-- added an 8s timeout to abort the database connect if it fails.
-- OS from db_notes to db_hosts refresh is now guaranteed on connect
-- Packaged everything into a single jar file, now I can code in what I like
- without hassle from people who are too lazy to look at the code.
-- SSL handshake now fails after 8 seconds (should give those of you trying
- an SSL connect to a non-SSL server an idea that something is up)
-- added an executable to launch Armitage on Windows
-- fixed command shell interaction bug caused by directories with spaces.
-- Start MSF button now reports an error if it couldn't start MSF-RPC
-
-2 Nov 10
---------
-- Initial (priv8) release.
diff --git a/release/armitage-windows/armitage.exe b/release/armitage-windows/armitage.exe
deleted file mode 100755
index befb5696..00000000
Binary files a/release/armitage-windows/armitage.exe and /dev/null differ
diff --git a/release/armitage-windows/armitage.jar b/release/armitage-windows/armitage.jar
deleted file mode 100644
index f9feb613..00000000
Binary files a/release/armitage-windows/armitage.jar and /dev/null differ
diff --git a/release/armitage-windows/cortana.jar b/release/armitage-windows/cortana.jar
deleted file mode 100644
index 1b4d3c4b..00000000
Binary files a/release/armitage-windows/cortana.jar and /dev/null differ
diff --git a/release/armitage-windows/readme.txt b/release/armitage-windows/readme.txt
deleted file mode 100644
index 5f4e54b8..00000000
--- a/release/armitage-windows/readme.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-=============================================================================
-Armitage - Cyber Attack Management for Metasploit
-=============================================================================
-
- *** http://www.fastandeasyhacking.com ***
-
-1. What is Armitage?
- -----------------
-
-Armitage is a graphical cyber attack management tool for Metasploit that
-visualizes your targets, recommends exploits, and exposes the advanced
-capabilities of the framework.
-
-Advanced users will find Armitage valuable for managing remote Metasploit
-instances and collaboration. Armitage's red team collaboration features allow
-your team to use the same sessions, share data, and communicate through one
-Metasploit instance.
-
-Armitage aims to make Metasploit usable for security practitioners who
-understand hacking but don't use Metasploit every day. If you want to learn
-Metasploit and grow into the advanced features, Armitage can help you.
-
-2. Documentation
- -------------
-
-The documentation for Armitage is located on the Armitage website at:
-http://www.fastandeasyhacking.com. Read the FAQ and the Manual for
-information on connecting Armitage to Metasploit and using it.
-
-3. Install and Update
- ----------
-
-To get started, see the manual at http://www.fastandeasyhacking.com
-
-4. Source Code
- -----------
-
-This projected is hosted on Google Code at:
-http://code.google.com/p/armitage/
-
-5. Disclaimer
- ----------
-
-Use this code for your development and don't hack systems that you don't
-have permission to hack. The existence of this software does not reflect the
-opinions or beliefs of my current employers, past employers, future
-employers, or any small animals I come into contact with. Enjoy this
-software with my blessing. I hope it helps you learn and become a better
-security professional.
-
-6. Contact
- -------
-
-Report bugs in the issue tracker at:
-http://code.google.com/p/armitage/issues/list
-
-E-mail contact@fastandeasyhacking.com with other questions/concerns. Make
-sure you peruse the FAQ and Manual first.
-
-7. License
- -------
-
-(c) 2010-2013 Raphael Mudge. This project is licensed under the BSD license.
-See section 8 for more information.
-
-lib/jgraphx.jar is used here within the terms of the BSD license offered by
-JGraphX Ltd. http://www.jgraphx.com/
--
-lib/msgpack-0.5.1-devel.jar and lib/postgresql-9.1-901.jdbc4.jar are both
-BSD licensed libraries.
--
-Some code in src/msf/* comes from msfgui by scriptjunkie.
--
-This project uses the LGPL Sleep scripting language with no modifications.
-Sleep's source is available at: http://sleep.dashnine.org/
-
-8. The BSD License
- ---------------
-
-Redistribution and use in source and binary forms are permitted provided
-that the above copyright notice and this paragraph are duplicated in all
-such forms and that any documentation, advertising materials, and other
-materials related to such distribution and use acknowledge that the
-software was developed by the copyright holders. The name of the copyright
-holders may not be used to endorse or promote products derived from this
-software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ''AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/release/armitage-windows/whatsnew.txt b/release/armitage-windows/whatsnew.txt
deleted file mode 100644
index 2292e065..00000000
--- a/release/armitage-windows/whatsnew.txt
+++ /dev/null
@@ -1,1622 +0,0 @@
-Armitage Changelog
-==================
-
-20 Nov 14 (tested against msf git revision: 55ef5dd484)
----------
-- Added helper for SCRIPT option.
-- Right-click a tab's X button and use "Send to bottom" or Ctrl+B to
- dock a tab to the bottom of the Armitage window. Use Ctrl+E to get
- get rid of the docked tab..
-- Added more YAML warnings to save heartache for custom installs
-- Database layer now uses core.version results to decide which MSF
- data model to use.
-- File tab completion (Cortana console) better handles ~
-- team server startup verifies default host is an IPv4 address.
-- Prompt for default address is now more aggressive and continues to
- ask until an address is put in. If a user hit cancel on this dialog,
- threads to poll the database never get started. Bad day, for sure.
-- Armitage now sends a keep-alive every 1-2mins over an idle team
- server connection to combat disconnection by a NAT device
-- Armitage client now shows Disconnect message when it loses any of
- its connections to the team server.
-
-Cortana Updates (for scripters)
---------
-- &credential_add, &credential_delete use Metasploit 4.10 conventions
-- name field for hosts is now available.
-
-18 Aug 14 (tested against msf git revision: 55ef5dd484)
----------
-- Added hard-coded database.yml path as fallback for Kali users
-- Updated internal db.creds/db.creds2 calls to pull from new creds
- model in database.
-- [meterpreter] -> Access -> Dump Hashes -> wdigest uses sso post
- module now. New creds model makes this better.
-- Added Import option to View -> Credentials dialog.
-
-15 Jul 14 (tested against msf git revision: 55ef5dd484)
----------
-- Command Shell experience on Windows Meterpreter is much better now
-- Java Meterpreter may now interact with a bash shell
-- Removed [host] -> Meterpreter -> Access -> Migrate Now! menu item
-- Ctrl+Escape temporarily drops the timeout times for Meterpreter
- commands to 5s, across the board. If a Meterpreter session appears
- unresponsive, try this to force any hung commands to timeout
-- Armitage now warns when a team server is non-responsive by making
- its server button purple. When the server is responsive again, the
- button will turn its normal color again. This requires that you're
- connected to multiple team servers.
-- Windows EXE launcher for Armitage now finds 64-bit Java.
-
-15 May 14 (tested against msf git revision: 0a4c10876d)
----------
-- Worked around invisible text selection bug with latest Java on Kali
-
-23 Apr 14 (tested against msf git revision: 0a4c10876d)
----------
-- Added Ctrl+L to quickly add an entry to timeline.[xml|tsv] (exported
- through View -> Reporting -> Export Data)
-- Added osx-app to Output: type for payloads. Outputs a zipped MacOS X
- app archive.
-- Scrubbed Armitage to eliminate unnecessary blocking calls from Sleep
- source code. This improves Armitage's responsiveness and takes away
- many opportunities for deadlock.
-- Sync Files for Loot and Downloads is now much better with large files
-- REJOICE! After more than three years of a team server capability,
- Armitage now tells you when you are disconnected from a server.
-- Keyboard shortcuts to change text size now work in table view
-- Added Copy button to View -> Creds
-- Services tab right-click menu now has options to edit a service's info
-- Updated Armitage's YAML parser to better deal with unexpected whitespace
- and to provide better errors when YAML file contains constructs that
- Armitage's YAML parser can't deal with.
-- Armitage's intercept of the shell command now intercepts shell when
- arguments are present too. This prevents meterp sessions from getting
- messed up.
-- Logging now deals with IPv6 addresses better for Windows users
-- Launching psexec at 4+ hosts will no longer open a tab for each host
-- Armitage no longer allows two buttons with the same name in its team
- server button bar.
-
-Cortana Updates (for scripters)
---------
-- Added &script_load to load a script (as if the user did this)
-- Added &script_unload to unload a script
-
-27 Feb 14 (tested against msf git revision: 72da8299a5)
----------
-- Armitage console is now a mouse hot spot. Right-click a host in the
- console to see its menu. Click a module to open the module's launcher
-- Armitage module launch console ignores false meterpreter prompt from
- msfrpcd after a successful exploit job is run.
-- hashdump and wdigest menus now add usernames with spaces to database
- thanks to Steve Pinkham for reporting this issue *with* a fix.
-- Added [host] -> Login -> psexec (psh) to use psexec_psh to authenticate
- to a host.
-- Armitage.app for MacOS X now works with Oracle's Java 1.7
-- Long awaited! I've added a feature to change LHOST in Armitage. Go to
- Armitage -> Listeners -> Set LHOST.
-- IPv6 reverse sessions now associate with their host properly.
-- Windows open with Ctrl+W now show the Armitage icon
-- Armitage now uses a JFrame to display its dialogs. This will give each
- window its own button in the taskbar regardless of window manager.
-
-21 Nov 13 (tested against msf git revision: 597eb56dcf)
----------
-- Fixed webcam selection logic that I broke last update. Go me!
-- Added a helper for PATH option
-- Java 1.6 is no longer a supported environment to run Armitage. Added
- a warning message to indicate as much. You should update to Java 1.7
-- Connect dialog now masks the password field.
-- Armitage no longer allows you to start msfrpcd on Windows. It shows an
- error stating that you need to connect to a team server on Linux.
-- Fixed a potential deadlock when opening a module launcher dialog.
-- Missing MSF_DATABASE_CONFIG error now gives troubleshooting steps with
- the error message.
-- Added another check to detect and correct a corrupt module cache.
-- [host] -> Operating System -> Firewall works again.
-- You can now set PAYLOAD for windows/local/wmi exploit
-- Default meterpreter/reverse_tcp listener now encodes its second stage
-
-21 Aug 13 (tested against msf git revision: 0af2f1c611)
----------
-- Removed sunrpc and dcerpc modules from MSF Scans feature
-- Fixed a potential deadlock when updating the host display
-- Updated multiplexing code to be compatible with enumdesktops command
-- Updated multiplexing code to be compatible with webcam_list command
-- You may now choose which camera to take a Webcam Shot from
-- Close button now shows w/ Armitage dialogs on Kali Linux.
-- Module Launcher dialog is now always active when opened.
-- EXE::Custom is no longer treated as an advanced option. When available
- it's always present for you to modify in a module.
-- Meterpreter -> Access -> Persistence now uses the local exploit module
- (default settings now work without tweaks too)
-- Meterpreter -> Access -> Pass Session and Process -> Inject now use the
- payload_inject local exploit module.
-- Added Meterpreter -> Access -> Dump Hashes -> wdigest to run mimikatz's
- wdigest command, to retrieve plaintext creds.
-- Armitage now uses a better method to shuttle files to team server and
- notify you of the progress of this action.
-- Made multiplexing code smarter about load and use commands.
-- Added a check to detect commercial MSF modules in the module cache and
- to automatically clear it. When this happens you will need to restart the
- Metasploit Framework. A corrupt cache causes some RPC calls to throw
- errors as plain msfrpcd is not allowed to interact with commercial modules.
-- Added ANSI color markup to armitage's console output. It's less scary
- than the default messages and it's nicer to look at.
-- Added cmd/unix/reverse to payload selection logic.
-- Updated the payload output formats to match what's now possible in MSF
-- Armitage -> Listeners actions now show commands/output in a tab
-- [host] -> Login options now set DB_ALL_CREDS to false. Making this option
- default to true is not the decision I would have made.
-
-6 Jun 13 (tested against msf git revision: c705928052)
---------
-- Attacks -> Hail Mary now asks you to confirm the action.
-- Fixed a potential table sorting issue
-- Changed how some tables are updated to minimize blocking of other
- tasks. This should make UI feel snappier in many cases.
-- Credential helper now shows credentials from all servers you're
- connected to.
-- Updated multiplexing code to be compatible with mimikatz extension's
- output scheme.
-- Meterpreter upload command (with no arguments) now prompts for a file.
- This file will be bounced to team server (if one is present) and
- uploaded to the target for you.
-- Cred tables no longer show SSH keys
-- Added vmauthd to the Login menu
-- Increased the number of modules run in response to services found during
- a sweep with the MSF Scans feature.
-- Attack menu attached to host now splits menus up if there are more than
- 10 items. This will help with the webapp and http menus.
-- Added a menu to mark a host as a firewall
-- Added a type-fix hack for MsgPack Long types
-
-Cortana Updates (for scripters)
---------
-- Updated &log_resource to account for new log folder layout scheme that
- involves a description of the current Armitage server
-- Fixed a potential argument corruption bug with filters
-
-10 Apr 13 (tested against msf ca43900a7)
----------
-- Jobs dialog now queries job info in a separate thread context,
- stopping it from locking up your Armitage instance.
-- Fixed console queue display bug when a required option has no setting
-- Hashdump -> lsass method now pops open a Meterpreter tab and shows
- its progress. Should help when there's a lot of hashes coming back.
-- Hail Mary attack now gives better feedback about what it's doing
-- Fixed blank line showing when a host label exists and a session w/o
- any information is associated with the host.
-- The correct OS icon is now shown for Windows 2012 Server.
-- Added an Inject button to the Process Explorer
-- Event log now shows date with timestamp
-- Messages to your nick in the event log are now highlighted
-- Disabled the display of the MSF banner by default.
-
-Cortana Updates (for scripters)
---------
-- Added work-around to prevent &psexec failing due to Ruby complaining
- about incompatible encodings.
-
-6 Mar 13 (tested against msf ca43900a7)
---------
-- Active console now gets higher priority when polling msf for output
-- Improved team server responsiveness in high latency situations by
- creating additional connections to server to balance messages over
-- Preferences are now shared among each Armitage connection.
-
-6 Mar 13 (2000h)
---------
-- Fixed issue with additional team server connections reporting wrong
- application and receiving a summary rejection by the team server.
-
-Cortana Updates (for scripters)
---------
-- Added a &publish, &query, &subscribe API to allow inter-script
- communication across the team server.
-- Added &table_update to set the contents of a table tab without
- disturbing the highlighted rows.
-- Added an exec_error event. Fired when &m_exec or &m_exec_local fail
- due to an error reported by meterpreter.
-- Fixed a bug that sometimes caused session_sync to fire twice (boo!)
-- Added a 60s timeout to &s_cmd commands. Cortana will give a shell
- command 60s to execute. If it doesn't finish in that time, Cortana
- will release the lock on the shell so the user can control it.
- (ideally, this shouldn't happen... this is a safety mechanism)
-- Changed Meterpreter command timeout to 2m from 12s. This is because
- https meterpreter might not checkin for up to 60s, if it's been
- idle for a long time. This will make &m_cmd less likely to timeout
-
-12 Feb 13 (tested against msf 16438)
----------
-- Fixed a corner case preventing the display of removed host labels
- when connected to a team server.
-- Fixed RPC call cache corruption in team server mode. This bug could
- lead to some exploits defaulting to a shell payload when meterpreter
- was a possibility.
-- Slight optimization to some DB queries. I no longer pull unused
- fields making the query marginally faster. Team server is more
- efficient too as changes to unused fields won't force data (re)sync.
-- Hosts -> Clear Database now clears host labels too.
-- Added the ability to manage multiple team server instances through
- Armitage. Go to Armitage -> New Connection to connect to another
- server. A button bar will appear that allows you to switch active
- Armitage connections.
- - Credentials available across instances are pooled when using
- the [host] -> Login menu and the credential helper.
-- Rewrote the event log management code in the team server
-- Added nickname tab completion to event log. I feel like I'm writing
- an IRC client again.
-- Hosts -> Clear Database now asks you to confirm the action.
-- Hosts -> Import Hosts announces successful import to event log again.
-
-23 Jan 13 (tested against msf 16351)
----------
-- Added helpers to set EXE::Custom and EXE::Template options.
-- Fixed a bug displaying a Windows 8 icon for Windows 2008 hosts
-- Cleaned up Armitage -> SOCKS Proxy job management code. The code to
- check if a proxy server is up was deadlock prone. Removed it.
-- Starting SOCKS Proxy module now opens a tab displaying the module
- start process. An event is posted to the event log too.
-- Created an option helper to select credentials for SMBUser, SMBPass,
- USERNAME, and PASSWORD.
-- Added a feature to label hosts. A label will show up in its own column
- in table view or below all info in graph view. Any team member may
- change a label through [host] -> host -> Set Label. You may also use
- dynamic workspaces to show hosts with certain labels attached.
-- Fixed bad things happening when connecting Armitage to 'localhost' and
- not '127.0.0.1'.
-- Screenshots and Webcam shots are now centered in their tab.
-- Added an alternate .bat file to start msfrpcd on Windows in the
- Metasploit 4.5 installer's environment.
-- Added a color-style for [!] warning messages
-
-Cortana Updates (for scripters)
---------
-- &handler function now works as advertised.
-- Cortana now avoids use of core.setg
-
-4 Jan 13 (tested against msf 16252)
---------
-- Added a helper to set REXE option
-- Added an icon to represent Windows 8
-- [host] -> Login menu is now built using open services for all
- highlighted hosts, not just the first one.
-- [host] -> Login items now escape punctuation characters in passwords
- before passing them to a framework module.
-- Added the windows and linux postgres_payload exploits to the use a
- reverse payload by default list.
-- Small tweak to allow Armitage to work with Metasploit 4.5 installed
- environment on Windows.
-
-Cortana Updates (for scripters)
---------
-- &credential_add and &credential_delete no longer break when a
- password has creative punctuation in it.
-
-26 Nov 12 (tested against msf 16114)
----------
-- Windows command shell tab is now friendlier to commands that prompt
- for input (e.g., time command)
-- [host] -> Meterpreter -> Access -> Escalate Privileges now shows all
- the framework's new exploit/windows/local modules too
-- [host] -> Shell -> Post Modules now shows the framework's unix/local
- and exploit/linux/local modules
-- Added Ctrl+I shortcut. Lets you choose a session to interact with.
-- Added Steal Token button to Processes dialog.
-- Armitage now asks Metasploit for a non-expiring authentication token.
- This will prevent Armitage from losing its access to msfrpcd when you
- put your computer to sleep or pause the VM running Metasploit.
-- add_user and add_[local]group_user now show all of their output when
- the -h flag is used to operate on a remote host.
-- added a Delete menu to creds table. Right-click a cred to delete it
-
-Cortana Updates (for scripters)
---------
-- aliased &data_delete to &data_clear to match the documentation.
-- &file_get, &loot_get, and &file_content no longer delete the remote
- file when connected to a teamserver.
-
-16 Oct 12 (tested against msf 15972)
----------
-- Added port 5985 to MSF Scans list.
-- Meterpreter -> Access -> Persistence sets ACTION option for you
-- Changed how LHOST and LPORT are set globally to prevent Ruby
- character encoding conversion error in the framework.
-- Pass Session, Log Keystrokes, and Persist now query module info
- in a separate thread (avoids a deadlock opportunity)
-- Armitage now shows folder/URL in a popup dialog for environments
- where JDesktop API to open them directly is not supported
-- Check all credentials option now filters the list to avoid trying
- a pair of credentials twice.
-- Armitage's exploit payload selection now selects cmd/unix/interact
- when appropriate.
-- Explore -> Processes now works with Java Meterpreter again.
-- MSF Scans feature now runs http_version against port 443
-
-5 Sept 12 (tested against msf r15804)
----------
-- Setup dialog now trims host, port, user, and pass fields.
-- Armitage now complains when it can't write to your preferences
- file (versus just hanging without a real error message)
-- View -> Jobs now queries jobs in a thread outside of UI thread
-- Tab completion now uses a separate thread to call into the RPC
- server. This prevents a deadlock if server is not responding.
-- Login -> psexec now shows when 445 is open on a Windows machine.
- The old criteria was too restrictive.
-- Added a helper to set Wordlist option
-- Armitage now sets a random LPORT for non-exploit modules with an
- LPORT option (e.g., post modules that do priv escalation)
-- Armitage now shows an error if it can't open a Win command shell
-- Steal Token dialog now uses incognito module to get token data
- instead of the MSF post module. This is more reliable.
-- You may now setup the reverse payload for current_user_psexec
-
-Cortana Updates (for scripters)
---------
-- added an eventlog popup hook
-
-16 Aug 12 (tested against msf r15753)
-----------
-- Dynamic workspaces now removes closed services from its set of
- hosts matching certain open ports.
-- Cortana console now reports a clear error message a built-in
- command is executed without the right number of arguments.
-- Added host icons for Android and iOS. You may now set these
- operating systems by going to [host] -> Host -> Operating System
-- Armitage now shows the client-side exploit dialog for any exploit
- that does not target an RHOST (for example, windows/smb/smb_relay)
-- Added support for remote exploits that use RHOSTS over RHOST
- (this includes the new windows/local/current_user_psexec)
-- Added a helper for setting the SESSION option
-
-Cortana Updates (for scripters)
---------
-- s_cmd no longer times out after 60s. It will wait forever for
- a command to complete now.
-- added shell_read event which fires when a shell s_cmd comes
- back with intermediate output.
-- fixed a potential deadlock with &open_console_tab
-- scripts now have the ability to redefine the max size of a
- workspace: db_workspace(%(size => #####));
-
-2 Aug 12 (tested again msf r15698)
---------
-- Armitage now reports vulnerability module and descriptions
- properly (again) when exporting data. Had to update to match a
- change to the db schema.
-- Pass-the-Hash and Login dialogs now stay open if you press
- shift while clicking Launch. This convention is pretty universal
- to Armitage.
-- Team server now buffers all of its outgoing data. I've also
- disabled SO_NODELAY. This will greatly improve team server latency
- on congested networks without impacting responsiveness otherwise.
-- Added Cortana, a DARPA funded scripting technology, into Armitage.
- There's a lot of fun to be had here.
-- Armitage now queues messages to destroy a console rather than
- spinning up a new thread for each closed console.
-- Rendering of icons for hosts now happens outside of UI thread.
-- Increased timeout for meterpreter read command
-- Armitage now detects a corrupt module cache and attempts to clear
- it so it can be rebuilt.
-
-5 Jul 12
---------
-- Login -> psexec now sets a different LPORT for each host it's
- launched against when using a reverse payload. Fixes a bug where
- using a reverse connect payload against X hosts didn't work.
-- Progressbar Cancel button now works with the Sync Files button
- in View -> Downloads and View -> Loot
-- Fixed a potential deadlock with the Sync Files feature
-- Clicking the Size column in View -> Downloads now sorts properly
-
-24 Jun 12
----------
-- Meterpreter -> Kill now uses session.stop RPC call
-- Simplified code to stop a running job
-- Added an option to disable TCP_NODELAY from the comamnd line:
-
- java -Darmitage.enable_nagle=true -jar armitage.jar
-
- Use this if you see "bad mac" SSL errors when connected to a
- team server.
-- Log Keystrokes tab now changes color when there is activity
-- Randomized filename for USERPASS_FILE to allow multiple brute
- forces to happen at once.
-- Added a View item in the File Browser's popup menu. This will
- let you quickly read several highlighted text files (it also
- saves the files to the right place locally too)
-
-7 Jun 12 - Adding on to those quick bug fixes / tweaks
---------
-- Disabled Nagles algorithm for team server and client SSL sockets.
- This makes team server much more responsive... trust me.
-- Fixed bug preventing Armitage from showing "Started Service"
- message when starting the SOCKS Proxy server.
-- Fixed a find feature highlight bug in the View tab.
-
-30 May 12 - A few quick bug fixes / tweaks...
----------
-- Fixed an exception when killing a session or removing a route
- through the UI.
-- Oooh, ps command added a new column to its output. Updated ps
- parser to handle this.
-- Hosts -> Import Hosts now works under Windows again. Had to
- escape the filename. *sigh*
-- Hail Mary now sets LHOST option. This is necessary for some
- attacks to work properly.
-- Tweaked console create code in beginning of Armitage setup to
- hopefully avoid aggravating the evil console.create deadlock
- condition.
-
-21 May 12
----------
-- Added a hack to prevent the input area from flickering when the
- prompt changes.
-- Updated the color palette to something a little more subtle.
-- Added an optimization to how modules are launched. This will make
- a difference for team use in high latency situations.
-- Rewrote MSF Scans feature to use console queue. This option is more
- reliable and it makes the code easier to follow.
-- Added a hack to combine chat message writes with a read request.
- This will make the event log more responsive in a high latency
- situation (can't you tell I care about this "situation")
-- Fixed text highlights through Ctrl+F on Windows. UNIX platforms
- were always OK. Another good reason to not use these tools on
- Windows. Ever.
-- View -> Downloads Sync Files feature now works on Windows. It looks
- like leaving those pesky :'s in the file paths is bad.
-
-17 May 12
----------
-- Fixed bug with loot/download viewer breaking with a font resize.
-- Default console font color is now grey. I never noticed that I had
- white text on a black background before. That's a lot of contrast.
- This is adjustable too through Armitage -> Preferences.
-- And... the Armitage console now displays pretty colors. If you don't
- like colors, set the console.show_colors.boolean preference to false
- through Armitage -> Preferences.
-- Fixed a bug preventing input field from getting focus when popping a
- console tab using Ctrl+W.
-
-14 May 12
----------
-- Oopserific--dynamic workspace shortcuts were not bound until you
- clicked the Workspaces menu. I fixed that.
-- Improved console pool's ability to detect a dead console. If you saw
- "null" prompts in an open tab, it's because of a dead console. Fixed
-- Bound Ctrl+Backspace to reset dynamic workspaces. Ctrl+0 is now back
- to what it originally did (resetting the font size to default).
-- Added Ctrl+T to take a screenshot of the active tab
-- Added Ctrl+W to pop the active tab into its own window
-- Armitage team server is now SSL enabled. The teamserver script (you
- are using it, right?) generates a certificate for you using keytool.
- The server presents the SHA1 hash of its certificate. Armitage users
- have the opportunity to verify and trust the hash of the certificate
- presented to them or to reject it and not connect.
-- Added Ctrl+Left / Ctrl+Right to quickly navigate through tabs.
-- Added a check to prevent clients from connecting to msfrpcd directly
- when teaming is enabled.
-- Fixed a bug that prevented command shells from opening on some sessions
-- Team server client now caches certain calls to RPC server.
-- Reworked the Loot/Downloads View button. Now, all highlighted files are
- displayed in one View tab. This makes searching easier. Each file is
- displayed with a colored header (to make it easier to tell when one file
- ends and the other begins).
-- Added Sync Files button to Loot/Downloads tabs when connected to a team
- server. This button will download all files associated with the highlighted
- rows and save them in the Armitage data directory.
-
-7 May 12
---------
-Note: Armitage team server setup has changed. Refer to the manual for
-the latest information: http://www.fastandeasyhacking.com/manual#7
-
-- Armitage team mode now routes all Metasploit-bound calls through the
- deconfliction server. Armitage also pools "temporary" Metasploit
- consoles. It's too bad this is logged as one change, because it's
- more like twenty. These changes were motivated by a desire to avoid
- triggering a race condition that was introduced w/ Metasploit 4.3.0.
- http://dev.metasploit.com/redmine/issues/6829
-
- On the bright side these changes will allow a lot more flexibility
- to optimize how Armitage interacts with msfrpcd and to do some neat
- things (like logging) in a centralized way.
-- Module description (in module launch dialog) is now resizable.
-- Added Ctrl+D keyboard shortcut to close active tab.
-- Armitage now uses (more robust) console queue for launching post
- modules, handlers, brute force attacks, and other things.
-- Fixed a race condition in the Jobs tab refresh after killing a job
-- Armitage now filters smb hashes from non-psexec/smb login dialogs.
-- Added armitage.log_data_here.folder setting. This setting lets you
- specify where Armitage will save its logs, downloaded files, and
- screenshots. *cough* Some penetration testers like to dump everything
- to an encrypted volume. *cough*. I apologize it took this long to
- get this feature in place.
-- Improved perceived responsiveness of a console interaction
-
-17 Apr 12
----------
-- Modified how Armitage determines a console command is complete to stay
- compat with behavior changes in a recent Metasploit update.
-- Armitage now queues console commands to prevent out of order execution.
-
-16 Apr 12
----------
-- The search field in the module browser now updates results in real time.
- Start typing and Armitage will start filtering the module tree for you.
- Clear the field to reset it to the default state.
-- Added keyboard shortcuts to switch dynamic workspaces...
- Ctrl+1 = first workspace
- Ctrl+2 = second workspace
- ....
- Ctrl+0 = show all
-- Added keyboard shortcuts:
- Ctrl+N = new console
- Ctrl+O = open preferences
-- Armitage's Meterpreter -> Access -> Dump Hashes -> lsass method is now
- much better about grabbing all of the hashdump output and adding it to
- the creds table. The hashdump command returns output as an arbitrary
- number of chunks. I now use a different read strategy for determining when
- the output is complete.
-- You may now use Ctrl+Alt to deselect highlighted items in a range in the
- Jobs and Workspaces table views (most other table views that do multi
- selection should allow this already).
-- Added Shell -> Pass Session for *NIX shell sessions. Uses the system_session
- module to pass a shell session elsewhere (or duplicate the current shell)
-
-29 Mar 12
----------
-- Fixed a bug that affects first-time users. Armitage was not initializing a
- console before trying to connect to the database.
-
-28 Mar 12
----------
-- Team server now delivers chat messages in batches vs. one line at a time.
- This will make syncing on reconnect much better (in theory)
-- Several optimizations to prevent unnecessary reads/calls to deconfliction
- server when in team mode. This will primarily affect high latency situations.
-- Use Shift+Click to close all tabs with the same name. This feature now closes
- all tabs in the same group (e.g., all screenshots, file browsers, command
- shells, etc.)
-- Armitage now logs launches of the enum_dns module.
-- Hosts -> DNS Enumerate now populates NS field with highlighted host.
-- Armitage now adds a tooltip to tabs associated with a session. Hover your
- mouse over a tab X button to see which host the tab is associated with.
-- Fixed a potential exception caused when listing downloads.
-- Created a queue to process certain commands meant for Metasploit in order and
- in a throttled manner. Started moving some Armitage calls to it. Now you can
- fire an exploit at 1,000 hosts and Armitage won't blink. It might take awhile
- before that exploit finishes firing against all of the hosts though :)
-- The file browser now has a "List Drives" button. It's only available on
- Windows sessions. Click it to see which drives are available.
-- File browser can now navigate to folders with apostrophes in their name.
-- Made some major internal changes to how Armitage interacts with Metasploit. The
- goal is to make a more robust and faster hacking experience for you.
-
-22 Mar 12
----------
-- Updated Armitage NMap profiles with the following:
- -T4 (instead of -T5) [wait longer for open services to reply]
- -n [forces NMap to not resolve the hostname of IP addresses]
- --min-hostgroup 96 [allows more parallelism when scanning hosts]
-- Armitage now intercepts screenshot and webcam_snap commands from meterpreter
- shell and performs the appropriate action with them.
-- View -> Creds -> Export button now works in team mode.
-- Doh! Armitage now properly shows VMWare icon when OS is set to a VMWare ESXi
-- Armitage "is command finished?" heuristic now accounts for commands like
- del /S which prompt with a (Y/N)? - you can safely use these commands again.
-- Armitage now detects whether a client connecting to the team server is out
- dated or not. It rejects old clients. They will get a message indicating they
- need to update and then their client won't do anything else. You'll see a
- message printed to STDOUT where the team server ran about the rejection.
-- Added a * indicator to the active workspace in the workspaces menu.
-- Added Hosts -> DNS Enumerate, this menu launches a Metasploit module that will
- attempt to discover hosts by querying a name server in different ways.
-- Added a file chooser helper to WORDLIST option.
-- Armitage now displays a pivot relationship between a compromised host and the
- NAT/proxy device it is connected through.
-- Added a Copy button to services tab. This button copies the highlighted hosts
- to the clipboard. I found myself needing this several times recently.
-- Improved reverse payload selection logic (now it includes rev php meterpreter)
-- Armitage now sets a different LPORT for each exploit launched with a rev payload
-
-10:30am
-- Changed algorithm for determining which edges to highlight in graph view. If there
- is a pivot and both sides have a session, then the edge is highlighted.
-
-8 Mar 12 1.43-dev
---------
-- Armitage now uses session_host to determine which host a session is associated
- with. This value is grabbed directly from the OS itself. You'll no longer have
- 20 meterpreter sessions associated with a NAT/firewall device.
-- Armitage now spins up a new listener for each client-side attack (no longer
- relying on the random default listener created on startup). Of course you can
- change this... double-click the PAYLOAD option to set it to something else.
-- Token stealing dialog now disables refresh button while grabbing tokens. Enables
- it again when done.
-- Armitage now talks to Metasploit every two minutes to prevent auth timeout.
-- Armitage now displays a firewall icon for hosts with no OS marked as a firewall
- by MSF.
-- Armitage now selects an IPv6 bind payload when attacking IPv6 hosts.
-- Armitage now explicitly sets RPORT for different MSF Scan options and psexec.
-- Updated the about dialog to include a version number and release date.
-- Added a ./teamserver [external IP] [shared pass] script to the UNIX distro of
- Armitage. This script makes it much easier to startup Armitage's team server mode.
-
-2 Mar 12 - Catching up to a few MSF 4.3.0-dev changes...
---------
-- Added a tab rename feature.
-- Hosts that self report as .NET server now display an XP/2003 era icon.
-- Updated route command parser to conform to Metasploit 4.3.0's output for it
-- "Check all credentials" feature now works when running the deconfliction
- server AND client from the same folder.
-- [host] -> Host -> Operating System -> * now clears notes related to host
- before updating OS. This allows future scans to trigger MSF normalization
- code and update the OS to something else (e.g., from Unknown to X)
-
-29 Feb 12
----------
-- Armitage now displays a VMWare icon for hosts flagged as ESX/ESXi servers
-- Overhauled token stealing user experience--this is the cadillac version. You
- now get a nice list of the available tokens (from the post module), click to
- impersonate, refresh, rev2self, and getuid.
-- Improved file browser responsiveness
-- Table view now allows individual hosts to be deselected in an interveral
- (Armitage will no longer reselect these hosts for you)
-- Dynamic workspaces no longer requires a comma and a space between entries (a
- comma is good enough)
-- Improved the [Host] -> Remove menu option
-- Deconfliction server now returns the previous 100 events to new clients.
-- File browser directory up button is now more obvious
-- Keyboard accelerators when you right-click in the graph view are now correct.
-- Adjusted the graph view scrolling increments to something sane.
-- Added a slight delay between commands issued to a console to prevent them
- from executing out of order.
-
-21 Feb 12
----------
-- Added Cut/Copy/Paste menu to table cell editor.
-- Module browser search field now treats spaces as a wildcard. You may type:
- "win meterp" and Armitage will treat it as "win*meterp"
-- Hovering over an edge in graph view no longer reports a "null" tooltip
-- Fixed parsing of ps output for the process dialog (it's much much better now)
-
-14 Feb 12
----------
-- Added ports 5631 (pc anywhere) and 902 (vmauthd) to the MSF Scans feature.
-- Several cosmetic tweaks to the spacing in Armitage tables.
-- Moved table render code from Sleep to Java to avoid potential lock conflicts
-- Added support for vba-exe payload output type.
-- Payload generation dialog now sets more appropriate default options for the
- vba output type when it is selected.
-- Meterp command shell "read more stuff?" heuristic now accounts for Yes/No/All
-- Fixed ExitOnSession showing up twice when setting advanced options for a
- client-side exploit
-- You may now import multiple files through Hosts -> Import again.
-- Added 5s timeout to d-server connect attempt.
-- Added a --client [connect.properties] to specify which Metasploit server to
- connect to. The connect.properties file is a Java properties file that looks
- like this (without the leading whitespace):
-
- host=127.0.0.1
- port=55553
- user=msf
- pass=test
-
-19 Jan 12
----------
-- Data export now includes a sessions file. This lists all of the Metasploit
- sessions you had in your database. There's some neat data here including
- which exploit was used, which payload, start time, and close time. You can
- calculate how much time you spent on your client's boxes. Cool stuff.
-- Fixed a potential dead-lock caused by mouse enter/exit events firing code
- that required a lock. Nice landmine to defuse.
-- Fixed a weird condition with d-server detection. Sometimes (rarely)
- Armitage wouldn't detect the d-server even when it's present.
-- Added check to d-server allowing one lock per/client. Client won't reobtain
- a lock until it lets it go. This prevents you from opening two shell tabs
- for a shell session in team mode.
-- Fixed an infinite loop condition when some Windows shell commands would
- return output with no newlines (e.g., net stop [some service]). Thanks
- Jesse for pointing me to this one.
-- Data export now includes a timeline file. This file documents all of the
- major engagement events seen by Armitage. Included with each of these
- events is the source ip of the attack system and the user who carried out
- the action (when teaming is setup).
-- Data export now exports timestamps with current timezone (not GMT)
-- Fixed a nasty bug that's been with Armitage since the beginning! I wasn't
- freeing edges properly in the graph view. If you had pivots setup in graph
- view and used Armitage long enough--eventually Armitage would slow down until
- the program became unusable. At least it's fixed now.
-- Adjusted the d-server state identity hash combination algorithm to better
- avoid collissions.
-- Armitage now displays 'shell session' below a host if the host info is just
- the Windows shell banner.
-
-5 Jan 12
---------
-- Armitage d-server now transmits hosts, service, and session state only
- when something has changed. This makes teaming much snappier.
-- Uploading an imported hosts file now shows a progress dialog.
-- File browser upload function no longer blocks the user interface in team
- mode. A progress dialog is shown for uploading larger files.
-- Removed Ctrl+R refresh hosts shortcut from graph view (it's no longer
- necessary)
-- Armitage now exits if it was unable to connect to the collaboration server.
-- Hosts -> NMap Scans and Hosts -> MSF Scans dialogs are now populated with
- the selected values from the target area by default.
-- You may now interact with a Windows command shell through Java meterpreter.
-- Armitage no longer shows Webcam Shot option through Java meterpreter.
-- Armitage now detects when it does not have read permissions for the database
- YAML file and prompts with something helpful. Before it would just freeze
- with a blank dialog. Not helpful. :)
-- Armitage now only shows services that are open.
-- View -> Reporting -> Export Data now has the capability of dumping the whole
- database (not just the current workspace).
-- Added a dialog to View -> Reporting Export Data. Now you have the ability to
- dump all hosts or choose to dump one of the dynamic workspaces. This gives
- you a lot of flexibility with which hosts are included.
-- Cleaned up exported output of vulnerabilities in the Metasploit database:
- -- duplicate entries are collapsed to one (this was the fault of my query)
- -- refs column contains references separated by a comma and a space
- -- added info and module columns. The module column indicates the appropriate
- Metasploit module
- -- Metasploit modules now populate name, info, and module in an appropriate
- way.
-- Values exported to TSV are cleaned up such that newlines are replaced with a
- literal \n and tabs are converted to three spaces.
-
-30 Dec 11 - last release of the year?
----------
-- Hosts -> Clear Database now clears the sessions and clients tables
-- Fixed a bug preventing dynamic workspace port/session filter from
- working on a fresh database. This was a fun one. This only affected
- folks with a completely fresh database and because Hosts -> Clear
- Database didn't clear everything, this went unnoticed until now.
-- Added various reverse shell payloads to payload helper dialog.
-- Added file chooser helper for SigningCert and SigningKey options.
-- Added hack to return correct route info when setting up pivoting through
- Java meterpreter.
-- Armitage now posts a note to the event log when a user starts a browser
- exploit or a server module.
-- Armitage now supports dragging and dropping a module onto a host in graph
- and table view. This action opens the module launcher configured to work
- with that host.
-- Drastically rewrote MSF Scans. MSF Scans now intelligently builds a list
- of ports to scan based on what Metasploit can do. After an initial port
- scan, MSF Scans runs discovery modules against relevant hosts. As a bonus
- you will see all of the output of these scans.
-- Enhanced the Windows heuristic used to guess which OS image to display
-- The deconfliction server throttle is now less draconian about how long it
- throttles a call.
-- Armitage no longer posts to the event log from the UI thread (this will
- prevent the UI from blocking in some cases)
-- Command shell now handles interaction with d-server in a separate thread
- from the UI thread. This will prevent UI blocking in some cases.
-- Added Ping Sweep... option for non-Windows meterpreter sessions. Now Java
- meterpreter users have a quick host discovery option.
-- Change Host OS option now matches new Metasploit database schema.
-- Deconfliction server now sets LHOST to the IP address you provided. Also,
- Armitage clients do not overwrite LHOST once it is set.
-- Interacting with a shell in team mode no longer blocks UI to communicate
- with d-server.
-
-12 Dec 11
----------
-- Armitage teaming mode now downloads the resulting file for any fileformat
- exploit.
-- Armitage -> Set Exploit Rank and Set Target View now show a * next to an
- item to indicate the current setting.
-- Shift+click on Launch in a module launch dialog will not close the module
- launch dialog. One use case for this: set up a payload multi/handler,
- shift+click Launch to do it, then change output type to exe, click Launch
- and you're all set.
-- Dynamic Workspace editor now trims whitespace from your entries. Errant
- whitespace causes Armitage to reject the entry and your workspace never
- acivates.
-- Updated the "msfrpcd died" troubleshooting dialog. The new one takes folks
- to a website with detailed information.
-- Armitage now uses "load" to load a meterpreter module instead of "use"
-- Key logger event log announcement now notes the session ID. This is so
- your teammates will know not to migrate that session since it's recording
- key strokes.
-- Right-click X in tab -> Save Screenshot now displays filename without the
- path.
-- Deconfliction server now detects when database is not available and offers
- troubleshooting steps.
-- Loot/Downloads viewer now has a right-click menu to Copy selected text.
-
-22 Nov 11 - A big improvement...
----------
-- Services refresh is now set to 30s (vs. 60s before)
-- Workspaces -> Manage now opens as a tab and shows all data about workspaces
-- Fixed a bug with Edit Workspace not auto-checking session box when set.
-- Meterpreter -> Access -> Escalate Privileges now highlights the priv esc
- options in the post module true. This is viable now that getsystem is a
- module.
-- Payload module launcher now lets you set Template, Iterations, Encoder, and
- KeepTemplateWorking for any Windows payload. Also, payload is generated and
- saved locally without opening a tab.
-- sessions -i ## trap is now smarter and opens a shell tab for shell sessions,
- a meterpreter tab for meterpreter sessions, and offers an error when you
- try to interact with a session that doesn't exist.
-- Armitage no longer shows a host until it receives a db.hosts reply.
-- Right-click a module and select Relevant Targets to create a dynamic
- workspace that shows only targets that meet the host/port criteria for that
- module. Use Ctrl+A to select all of those hosts and rock'n'roll. :)
-- Hosts -> Import Hosts now works when the folder/file has spaces in it.
-- Dynamic workspaces are now local to the current Armitage client. They no
- longer have a global effect in teaming mode.
-- Added an Activate button to workspace management dialog.
-- Fixed a bug with sessions only dyn workspace sometimes showing hosts that
- do not have sessions.
-- You may now highlight multiple jobs in View -> Jobs and select Kill to get
- rid of all them at once.
-
-11.17.11 - All the things I wanted to do, but didn't have time
---------
-Release Note 1: if you use Armitage teaming, things changed. You have to start
-msfrpcd with a different set of flags and your team must use the latest version
-of Armitage. If you have a script that starts msfrpcd, you must update it.
-
-More information is at: http://www.fastandeasyhacking.com/manual#7
-
-Release Note 2: Armitage requires a Metasploit base install of 4.0 or greater.
-If you use msfupdate to update a Metasploit install prior to 4.0, then Armitage
-will not work. The Metasploit pre-4.0 installers did not install dependencies
-that Armitage requires today. Missing are certain Java cryptography extensions
-and the msgpack Ruby gem. BackTrack 5 is Metasploit 3.7. BackTrack 5r1 is 4.0.
-
-- db.services now limits its results to hosts that are returned by db.hosts.
- This fixes a bug where services data for some hosts was not returned when
- when >3,500 hosts are in the armitage database.
-- MSF Scans menu is now available under Hosts menu again.
-- Removed Browser Autopwn menu as its future in Metasploit is undecided.
-- Find Attacks/Hail Mary now pull latest service info from DB before resolving
- the attacks. This prevents a situation where Find Attacks after a scan yielded
- nothing because Armitage had not synced with the database yet.
-- Deconfliction server now complains when you try to use 127.0.0.1 as your host
-- Added cut/copy/paste/clear menu to most textfields. (for Glen)
-- Added Workspaces -> Manage to edit, add, and remove dynamic workspaces.
-- Added code to intercept "sessions -i ##" and open a meterpreter tab instead.
-- Armitage now honors port setting when starting msfrpcd for you.
-- Armitage now detects msfrpcd shutdown and offers user advice to fix it. The
- most common cause is probably a lack of msgpack.
-- Fixed a deadlock that happened when generating a payload.
-
-11.13.11 - A major rewrite of a lot of stuff.
---------
-- Moved from XML/RPC interface to MSGPACK. This should be much faster.
-- Removed Armitage dependence on Metapsloit db.* API--since it may go away soon.
-- Attack recommendations and Hail Mary no longer depend on db_autopwn. New code
- offers same results with improved speed.
-- Simplified Hail Mary and Find Attacks to use port/OS information only.
-- Greatly improved keystroke recorder. The option is now called "Log Keystrokes".
- It uses the Metasploit keystroke_recorder post module. Results are regularly
- dumped into the post module window. Also, the results are stored as loot
- available for the team to view.
-- Launching the keystroke_recorder post module now makes an announcement to the
- event log.
-- Added a button to Processes tab to log keystrokes. This will bring up a the
- keystroke_recorder module configured to migrate to the process and record
- keystrokes there.
-- Removed Workspaces menu. Armitage now works from the default workspace.
-- Simplified Hosts menu.
-- Meterpreter -> Access -> Persistence now calls persistence post module.
-- Improved Meterpreter -> Access -> Steal Tokens, it's still wonky but it's a
- little better now.
-- Host import now uses db_import command running in a console.
-- Added Armitage -> Set Exploit Rank to update the minimum exploit rank value.
-- Armitage now displays up to 512 hosts and 12,288 services at any given time.
- This keeps Armitage operable even if you scan a big freaking network.
-- Added dynamic workspaces. This feature gives you the ability to define a filter
- on the database and Armitage will display only hosts that match this filter.
- You may define filters based on operating system, open ports, and network address.
- Go to Workspaces -> Create to create a filter. Filters show up under the
- Workspaces menu and you may switch back and forth betweem them too.
-- Simplified the Connect dialog. One button. :)
-- Right-click Scan option now scans for HTTPS.
-- Check all credentials option no longer tries blank passwords/username as pass
-- Added a read optimization to the console code. This will reduce load in a team
- engagement + make consoles feel faster when there is output.
-- Armitage now opens the event log tab instead of a metasploit console tab in team
- mode.
-- Fixed a host sorting issue in table view.
-- Moved View -> Targets to Armitage -> Set Target View
-- Overhauled how Armitage handles downloaded files. Downloads are saved to a set
- place on the attack server. Downloads are available to the whole team through
- View -> Downloads. This works like the loot viewer. Team members may view text
- files or download binary files. This method is friendlier when downloading whole
- directories of stuff.
-
-10.20.11
---------
-- Modified hail mary attack to get a little more success with some common Windows
- attacks.
-
-10.17.11
---------
-- Added menu item to dump hashes using the old lsass method or the smart hashdump
- registry method.
-
-10.13.11 take II?
---------
-- updated msf3/data directories to account for new install locations.
-- Removed Meterpreter -> Access - > Duplicate because it is now redundant with
- Meterpreter -> Access -> Pass Session
-- Updated Meterpreter -> Access -> Pass Session to have LPORT of default
- Meterpreter listener. Click Launch to simply duplicate your current session.
-- Added Meterpreter -> Access -> Steal Token to list and steal user/group tokens
-- Updated meterpreter multiplexer to not expect output from rev2self.
-
-10.13.11
---------
-- added ability to set up VNC on a target when connected to a remote Metasploit
-- Armitage now tells you where to connect your VNC client to access the desktop
- of a compromised host. You'll need to have a local VNC client available.
-
-10.12.11 - oooh SECKSY
---------
-- fixed a typo in the default armitage settings file.
-- made PAYLOAD helper friendly to post/windows/manage/payload_inject
-- Meterpreter -> Access -> Pass Session now uses payload_inject
-
-10.12.11
---------
-- Meterpreter N -> Hashdump now runs post/windows/gather/smart_hashdump module.
- This gives you the benefit of seeing its output and it works in more
- situations.
-- Right-click the tab X button and select Save Screenshot to take a screenshot
- of the current tab. This image will render the tab contents exactly as seen
- on the screen. Useful for putting together a report or presentation.
- (thanks Rob for the suggestion)
-- Added a module launcher helper for RHOSTS and RHOST. This helper will let you
- import a list of IPs (separated by newlines) from a file into these fields.
-- View -> Reporting -> Export Data no longer fails if there are no hosts to
- export data about.
-- Armitage now runs post/auxiliary modules as jobs (meaning you may kill them
- using View -> Jobs)
-- hashdump and smart_hashdump post modules will now announce to the event log
- that hashes were dumped when they're run (whether through the menu or
- the module browser).
-- View -> Reporting -> Export Data now takes a screenshot of the table view
- and includes it in the artifacts (when table view is active)
-
-09.26.11 - take 2
---------
-- Improved performance when launching exploits and other modules that open
- a new tab.
-- Launching an exploit will only open a tab when fewer than four hosts are
- highlighted. If four or more are highlighted, then Armitage will use the old
- behavior of silently launching each exploit. [You're supposed to be able to
- attack hundreds of hosts at once--hence my desire to add this caveat]
-- When launching an exploit in the background, Armitage will show a dialog
- indicating that the exploit was launched against X hosts.
-
-09.26.11
---------
-- You may now drag and drop Armitage tabs to rearrange their order.
-- Armitage "show all commands" option (for better exploit feedback) is now on
- by default.
-- You may now right-click a screenshot/webcam shot to zoom in or out on the
- image. The zoom-level stays fixed (in case you refresh the image later)
-- Added a menu to the X button in the tabs. Through this menu you may open the
- current tab in its own window or close all like tabs.
-- Updated Hosts -> Import Hosts to reflect the current importable file types.
-- Added View -> Reporting -> Export Data to dump most Metasploit tables into
- TSV and XML files suitable for parsing (by you!) into a report format of
- some sort.
-- Armitage now encodes (-e x86/shikata_ga_nai -i 3) any Windows meterpreter
- payload generated from the module launcher dialog.
-- [host] -> Meterpreter -> Access -> Duplicate now uses multi_meter_inject to
- launch Meterpreter into memory directly (rather than upload and execute a file)
-- In teaming mode, Armitage will now automatically upload a file selected through
- the + option (e.g., USER_FILE +) to the Metasploit server and set the value
- in Metasploit accordingly.
-- Modified error output for a failed Metasploit method to only display the
- method name and error message. Displaying a large input would cause Armitage
- UI to start flashing in some weird disco mode until a hard reset. Yeaah.
-
-09.08.11
---------
-- Armitage now highlights the event log tab when something new is posted and the
- tab is not active. Control the color by editing tab.highlight.color pref.
-- Fixed a bug preventing preference values from saving properly (and having an
- effect).
-- Added "Check all credentials" option to the login dialogs. This option will
- login to the service to test each credential. Successful logins will populate
- the credentials table.
-- Fixed a bug preventing the first open console from scrolling all the way to
- the bottom when open.
-- Credential export button now escapes the file path (making the button work on
- Windows). This bug is another good example of why you should use Armitage on
- Linux. It'll just work. Windows users: expect surprises.
-- Use Ctrl+Shift on a tab X button to remove the tab and create a desktop window
- with its contents. I suspect you'll find this really useful at times.
-- Armitage now remembers your auto-layout setting. Right-click in the graph area
- to change it.
-- Setting armitage.show_all_commands.boolean to true will now run each exploit in
- its own tab. Setting this is a good way to get feedback on the attacks you
- launch and to learn the Metasploit console better.
-
-07.31.11
---------
-- Fixed bug preventing Meterpreter -> Access -> Hashdump from noting all hashes
- into the credentials table.
-
-07.30.11 - Paying down some engineering debt.
---------
-- Loot viewer no longer displays non-text files. If you try to "view" a
- binary loot, it will the folder containing it.
-- Improved UI responsiveness by making sure all communication with Metasploit
- happens in some thread other than the UI thread. This will prevent latency
- from bogging the UI down and making it feel locked up. Armitage will also
- feel a lot faster for many actions.
-- The code that creates a console, executes a command, and calls a callback
- now uses a much tighter sleeping schedule (10ms vs 500ms). This greatly
- improves Armitage responsiveness.
-- Armitage connect progress dialog now shows progress setting up the Armitage
- environment once a connection is successful. Chances are it'll happen fast
- enough that you won't see it.
-- View -> Activity Log now opens activity log folder on MacOS X.
-- Removed restriction that prevents user from deleting/clearing default
- workspace.
-- File chooser helper used to set values in the module launch dialog now
- escapes all backslashes in the path. This fixes a problem on Windows caused
- by the console stripping the unescaped backslashes.
-
-07.28.11 - Armed for Metasploit 4
---------
-- Armitage now sends use prive with use stdapi when it gets a command not
- found error in Meterpreter.
-- Armitage now sends BLANK_PASSWORDS 0 with any Login menu items. This
- should speed up the login by forcing Metasploit to not try a blank
- user/password first.
-- Armitage no longer sends payload related variables to auxiliary modules.
- (note to programmer: auxiliary modules don't use PAYLOADs :P~~~)
-- Module launch dialog for client-side attacks (fileformat and browser)
- now presents payload options to you. They're still configured to a
- reasonable default (and updated as the exploit target changes).
-- Client-side payload "guess" is now better about selecting an OS X specific
- payload when appropriate.
-- Double-click the PAYLOAD option in the module launch dialog to open a
- chooser that lets you select a payload and choose whether to create a
- handler for it or not. This will configure the appropriate payload vars
- for you. You're welcome to tweak them from there.
-- Simplified some of the logic in the file browser and added better error
- reporting.
-- Added a visual hint to clickable option names in the module launcher.
- Double-clicking these options will open a dialog to assist setting the value.
-- Added a visual hint to clickable preference types in the preferences window.
- Double-clicking these types will open a dialog to assist setting the value.
-- Fixed a potential deadlock caused by launching modules while Armitage is
- still initializing.
-- Added a preference to disable displaying the MSF ASCII banner when a new
- console opens. This preference is set to show the banner by default.
-- Added a regexp to strip non-ascii chars from usernames collected with dump
- hashes. The RPC daemon throws an exception when I try to report usernames
- with these chars in them.
-
-23 Jul 11 - Change Log
----------
-- Ooops! My baaad. I broke db.creds in MSF. Someone else unbroke it. Now
- I call it the right way from Armitage so everything works like it's
- supposed to. :)
-
-21 Jul 11 - Change Log
----------
-- loots dialog is now populated by db.loots RPC call. This is faster
- and compatible with changes made to MSF.
-- credentials dialog is now populated by.creds RPC call. This is
- faster and compatible with changes made to MSF.
-- RPC connection code now strips out more characters that may cause
- the XML parser to complain.
-
- ** There were a few changes made to MSF over the past few days that
- broke the credentials and loots dialog. This update brings Armitage
- back to compatability with what exists in MSF trunk. **
-
-19 Jul 11 - Change Log
----------
-- You may now execute a post module against multiple hosts at once.
- Simply highlight the hosts, find your post module, double-click it
- and watch the magic happen. The drawback--each session will open a
- new tab to display the output of the post module.
-- You may now hold down shift and click on a tab to close all tabs
- with the same title. If you run a post module against multiple hosts
- this is a good way to get rid of all those tabs.
-- Graph view Ctrl+P shortcut (save screenshot of graph view) now shows
- pivots.
-- post module output now logs to ~/.armitage/[host]/post.log
-- Fixed some weirdness with popup menu mouse events not being consumed
-- Added View -> Activity Logs to open folder containing Armitage logs
-- Fixed command history so up arrow really gives the previous command
-- Keystrokes dumped using dump button on key scan dialog are now logged
- to ~/.armitage/[host]/keyscan.log
-
- *Respun* Armitage.dmg with .app file fix for MacOS X Lion. Thanks to
- @NightLion for contributing this.
-
-12 Jul 11 - Change Log
----------
-- Fixed a race condition causing some file browser actions to fail on
- Windows hosts at times.
-- Files downloaded through file browser are now archived in:
- [host]\Downloads
-- Hail Mary output nows goes to [log dir]\all\hailmary.log
-- Added Crack Passwords button to Credentials tab. This opens the
- launcher for John the Ripper: auxiliary/analyze/jtr_crack_fast
-- Added Post Modules item to Meterpreter N -> Explore and Shell N menus.
- This menu item will show applicable post-exploitation modules in
- the module browser.
-- Loot browser now opens loot viewer as a tab.
-- Loot viewer now has many of the same keyboard shortcuts as a console
- tab. You can Ctrl+F to search for stuff, Ctrl+Plus/Minus to increase
- and shrink the font, and Ctrl+A to select everything.
-
-02 Jul 11 - Change Log
----------
-- Doubled wait time for Meterpreter ls command to complete.
-- Armitage now shows psexec option instead of smb on Login menu for
- Windows hosts (when smb service is present).
-- Fixed bug preventing manual import of a single host
-- Removed automatic resending of console commands that didn't appear
- sent. This was a work-around for a msf bug that may not be present
- anymore. We'll find out.
-- Removed --script-all from NMap profiles. I saw quite a discussion
- about this on the NMap mailing list. Oops. Oh well :)
- http://seclists.org/nmap-dev/2011/q2/572
-- All host import options now use Metasploit's import_data RPC call.
- This is what all the remote calls map to anyways.
-- Added Help button to start dialog.
-- Armitage now opens cmd.exe and executes programs from the file
- browser using the current process token (execute -t in Meterpreter)
-- Added logging. Logs are stored in ~/.armitage organized as
- [date]/[host]/[file]. The logging captures:
-
- - all Console tab output (console.log)
- - the collaboration event log (event.log)
- - all Meterpreter tab output (meterpreter_[session].log)
- - all Command Shell tab output (cmd_[session]_[pid].log)
- - all Shell tab output (shell_[session].log)
- - all Screenshots captured through Armitage (.../Screenshots/)
- - all Webcam shots captured through Armitage (.../Webcam Shots/)
-
- You can turn this off by setting armitage.log_everything.boolean
- to false in the Armitage preferences.
-- Added a Reset button to preferences dialog to reset Armitage
- preferences.
-- SSL now defaults to off on all platforms
-- Added a Default button to the database settings helper. This
- button loads the default database settings ignoring what is in the
- config file.
-- Loot viewer now uses the same colors and font as a console tab
-- Fixed bug preventing Loot browser from populating data/time column
-- Preferences dialog now brings font and shortcut dialogs to front
- to prevent them from being hidden by prefs dialog.
-
-24 Apr 11 - Happy Birthday Gerry Edition
----------
-- Added a check to prevent jerk faces from entering an empty nick in
- collaborative mode. :)
-- Fixed a potential dead-lock condition with the screenshot/webcam
- shot tab.
-- Armitage -> Listeners -> Reverse now binds to 0.0.0.0.
-- Host import now posts an event to the collab mode shared event log
-- added an option to display an MOTD message to clients that connect
- to Armitage in the collaboration mode. Use -m or --motd before
- --server and specify a file, e.g.:
-
- armitage -m /path/to/motd.txt --server ...
-
- Clients will see this message when they connect.
-- Added Meterpreter -> Access -> Pass Session to send a meterpreter
- session to a handler set up on another host.
-- Armitage now sets ExitOnSession to false for multi/handlers started
- within Armitage.
-- Pivoting and ARP Scan dialogs now highlight first option by default.
-- Added a sanity check to the Route class to prevent malformed IPs
- from screwing up sorting.
-- Removed sqlite3 from the database options. I should have done this
- long ago--it has no place in Armitage.
-- Armitage now intercepts meterpreter "shell" command and opens a
- new tab with the cmd.exe interaction in it.
-
-17 Apr 11 - Change Log
----------
-- Windows command shell interactions are now less likely to die. How
- oh how did we get here? Armitage interacts with cmd.exe through a
- Meterpreter channel. If an unnecessary read happens, it ties up the
- meterpreter session for 10-20s AND the channel dies. If you typed
- commands in too quickly, it's probable that Armitage would do an
- unnecessary read and the channel would die. I believe I've headed
- off this problem. Armitage now locks the channel until the command
- completes. If the command times out or completes, the channel
- becomes unlocked. This should prevent most out of place reads. In
- collaboration mode, this was a great way for excited teammates to
- tie up the meterp session for everyone. :) "I typed this command
- 20 times and nothing happened!!!" Doh! You queued 20 reads with a
- 10-20S timeout each and destroyed that channel. -- Armitage
- protects against this situation now.
-- Command history no longer saves empty commands.
-- Armitage server mode now provides all details that a client needs
- to connect to the server.
-
-13 Apr 11 - Change Log (Dayton, OH Capstone Edition)
----------
-- Metasploit now has host normalization (this is great news). I've
- removed the OS reporting code from Armitage as a consequence. This
- means less overhead communicating with Metasploit
-- Fixed a potential deadlock triggered when interacting with a Windows
- command shell. Sorry about the freezes Matt and Brant.
-- Fixed a strange condition in Armitage that sometimes caused shell
- sessions to die.
-- Download from file browser now notifies user when a file is downloaded.
-- Armitage server mode now prints database connect string to console to
- assist with set up of Metasploit teaming.
-- Fixed a bug causing exploit recommendations to not show for Windows
- hosts due to host normalization
-- Added a check to prevent cd .. button in file browser from retriggering
- too quickly. This will prevent the meterpreter command queue from
- becoming very backed up doing a cd/ls over and over again.
-- Graph view no longer counts edges as a selected item when creating a
- list of hosts to apply an action to.
-- Added another heuristic to prevent Windows cmd.exe interaction from
- locking up.
-
-10 Apr 11 - Change Log
----------
-- Fixed key logger dump button.
-- Process migrate function displays success or fail message again.
-- Armitage now displays nmap output in a tab. You can thank scriptjunkie
- for making this work in Metasploit. Please send cash, check, or money
- order directly to him.
-- Greatly improved post-pivot host discovery workflow... here's the deal:
- -- [host] -> Meterpreter -> ARP Scan menu now shows networks local to
- host and lets you choose to launch an ARP scan from that Meterpreter
- session.
- -- Highlight one or more hosts, right-click, and select Scan to launch
- MSF discovery scans against the highlighted hosts.
-- Added a rudimentary loot browser/viewer to Armitage. Go to View -> Loot
- to see the currently captured loots. Loot is the Metasploit term for
- data captured by certain post/ modules.
-- Armitage now presents a warning when it detects a second Metasploit
- user connected to the same Metasploit server without the collaboration
- server in place.
-- Armitage collaboration mode now updates target information more often
-- Updated Armitage to work with Metasploit's new normalized host OS
- constants and to restore the os_flavor value when it is wiped out.
-
-16 Mar 11
----------
-- Shell -> Disconnect now executes in a separate thread.
-- Armitage now creates ~/armitage-tmp and writes there if the current dir
- is /Applications or it can't write to the current directory.
-- Fixed a potential deadlock issue in the file browser
-- Directory up button in file browser now shows that it has been pressed
-- Added Execute option to file browser (now you can run a program by
- right-clicking on it and selecting Execute--for Jesse)
-- Multiple improvements to responsiveness of command shell and meterpreter
- tabs. This should benefit collaboration mode too.
-
-12 Mar 11 (MACCDC Post Day 1 Update)
----------
-- Fixed a bug preventing host import from working with a remote connection
-- Armitage client now increases default wait for meterpreter commands to
- complete when in teaming mode.
-- Increased wait time to download a generated payload file to 8s.
-
-11 Mar 11 Update (0100h EST)
----------
-- Fixed a deadlock condition in the module launcher (caused by the changes
- to increase responsiveness... oops).
-
-10 Mar 11 Update (2230h EST)
----------
-- Fixed race condition importing manual list of hosts (sometimes the file
- would get deleted). Grr.
-- Added a lock to prevent multiple Armitage clients from trying to
- determine what OS a box has. This should help in CTF situations.
-
-10 Mar 11 Changes
----------
-
-Quick story: NECCDC 2011 Red Team. TJ launches a script that lands 70
-sessions in the first few seconds. 11 red team members are connected to
-Armitage eager to carry out their pieces of pwnage. The Ruby process pegs
-the CPU and Armitage fails spectacularly. Very funny. This releases fixes
-that.
-
-- Armitage YAML parser now accepts quoted strings in the YAML fields
-- Added caching of sessions.list, db.hosts, and db.services to Armitage
- collaboration server. This should help prevent msfrpcd from overloading
- when many clients are connected and owning boxen at one time.
-- Improved GUI responsiveness by making several parts of the Armitage GUI
- spawn a new thread to avoid blocking while communicating with Metasploit
-- Added a tooltip to the "Start MSF" and "Connect" buttons to clarify use
-- Export credentials button now prompts for a remote file when connected
- to a remote Metasploit instance.
-- Export credentials and payload generate output now transparently
- downloads to your local host when connected to Armitage's collab server.
-- Armitage now loads stdapi in Meterpreter if it finds it's not loaded.
- Armitage also prompts you to rerun the failed command when this happens.
-- Right-click in services now shows popup for taking actions against
- selected hosts. Now you can do mass actions against hosts sorted by port.
-- Added Access -> Persist to Meterpreter menu. This will run Meterpreter's
- persistence script using the default Armitage handler. Meterpreter will
- start at boot and at login.
-- Added an Armitage.app file for MacOS X. Use Armitage from OS X as a
- client to connect to Metasploit hosted in other places.
-- Added a check for whether current working directory is writeable or not.
- If it's not, Armitage does all of its read/write operations in home dir.
-
-Tested with 10 concurrent Armitage clients from four boxes with 140+ shell
-sessions and a few meterpreter sessions. I think we're ready to rock now.
-
-27 Feb 11 Changes
----------
-- Webcam snap features works again. Sorry about that. :)
-- Download file button in file browser now works through the collaboration
- server. This feature has a few limitations / requirements:
-
- 1) Armitage server must have the same $PWD as msfrpcd
- 2) Files must download in less than 12s or else you'll need to retrieve
- them from the msfrpcd host.
- 3) Recursive downloads of files from a directory are kept on the host with
- msfrpcd. You'll need to retrieve them with sftp or something else.
-
-25 Feb 11 Changes
----------
-
-This release is primarily bug fixes. The network attack collaboration
-feature is further tested and ready for your use.
-
-See: http://www.youtube.com/watch?v=coF8dVLBnOQ
-
-- Armitage now consumes data from msfrpcd's stderr when Start MSF button is
- used. This means Armitage won't lock up when database tables are
- initialized during the first run on Windows.
-- pivoting, logins, hail mary, and pass-the-hash now print to the event log.
-- Pass-the-hash dialog is now available via [host] -> Login -> psexec.
-- Fixed bug causing Event Log menu to be present outside of collab mode.
-- armitage.sh start-up shell script is now named armitage
-- Console destroy and shell unlocking commands on tab close now happen in a
- new thread to prevent the GUI from blocking.
-- Armitage now stops meterpreter read thread when it detects a dead session.
-- Replaced jyaml with a quick and dirty parser that doesn't mistake ####e#
- for a double number. This was screwing up connecting to postgres for some
- of you.
-- Upload button in file browser now works through Armitage's collab server
-- Added Ctrl+P shortcut to save screen capture of hosts graph view
-
-22 Feb 11 Changes
----------
-- Improved shell "when should I read more data from this channel" heuristic.
- This means command shell sessions should not freeze on an errant Meterp.
- read command that blocks until the universe is recreated.
-- Fixed a potential deadlock using Armitage's meterpreter dialogs with a
- meterpreter tab open.
-- Command shell tab now only opens when Armitage knows channel and PID
- settings
-- Rewrote how Armitage interfaces with Meterpreter. This has a few impacts:
- -- Armitage now waits for a command to execute and reads its output
- before executing another command. This prevents Armitage from getting
- confused when you're doing a lot of stuff at once.
- -- You can now open multiple meterpreter console tabs for a session
- -- Commands executed by Armitage's dialogs will not show up in your
- Meterpreter tab(s).
-- File browser now does a cd "current directory" before each action.
-- Added a network attack collaboration feature to Armitage. This is as
- beta as it gets (although it *should* work). To use it, start msfrpcd
- and connect Armitage's collaboration server (on the same box as msfrcpd!)
-
- ./armitage --server host port user pass [ssl? 1 or 0]
-
- This will connect Armitage's collaboration server to the Metasploit RPC
- daemon you specify. This server will then bind port+1 and tell future
- Armitage clients to use it for extra collaboration features.
-
- Connect one or more remote Armitage clients as normal. Some of the
- features you get in this mode:
-
- 1. View -> Event Log for chatting and watching major events
- 2. Command shell and webcam/screenshot features work for remote clients
- 3. Armitage clients automatically lock a shell session when they're in use
- and notify other clients that it's locked if they try to use it.
- 4. Transparent real-time sharing of meterpreter amongst multiple clients.
-- Payload generation now works on Windows (I wasn't escaping the backslashes
- in the paths... doh!)
-- Armitage now prompts you for a path (and not a file chooser) when generating
- a payload using a remote connection to Metasploit.
-- Armitage now loads database settings from file in MSF_DATABASE_CONFIG env var
-- You can now highlight text in the Armitage console tabs on MacOS X.
-- Fixed a potential deadlock when opening a Windows command shell tab
-
-Update 9am EST
-- Removed a remnant of my development environment from server.sl. If you see:
- jar file to import package from was not found! at line 25
-
- Then you need to update.
-
-13 Feb 11 Changes
----------
-- Organized View menu (it was getting out of control)
-- Added RPC Console item to view menu (Start MSF only). This item will show
- the STDOUT for msfrpcd. Use this to watch nmap's output.
-- Added Ctrl+A shortcut to select all text in a console tab
-- Kill meterpreter, kill pivots, and credential dumps now use fresh
- consoles to execute. This ensures they will execute even if the global
- console is stale (this sometimes happens.)
-- Added tab completion to Meterpreter window.
-- Hosts -> Import Hosts now lets you select multiple files to import at once.
-- Use SSL is now checked by default on Linux (and unchecked by def. on Win)
-- Updated Armitage to remove or alter some UI options when connected to a
- remote Metasploit RPC instance.
-
- -- Meterpreter shell is the only interact option
- -- Webcam and Screenshot menu items are gone
- -- Upload asks for a full file name rather than show a file chooser dialog
-
- These adjustments are necessary during remote connections as Armitage does
- not have access to the local file system of the Metasploit RPC daemon.
-
-21 Jan 11 Changes
----------
-- Increased wait time between connection attempts to MSF RPC
-- Fixed bug with Windows command shell not working when using Armitage from a
- Windows host.
-- Host refresh using sysinfo now only happens when no OS is set for the host.
-- Fixed a deadlock condition caused when an automatic sysinfo request was
- made while a Meterpreter tab for the same host was open.
-
-18 Jan 11 Changes
----------
-- Added a Migrate Now! item to Meterpreter Access menu. Runs migrate -f.
-- Right-click in Meterpreter console now shows menu as before (silly bugs).
-- Armitage now detects hashdump failure and reports possible causes to you.
-- Armitage now binds default handler to 0.0.0.0.
-- Added a table view for the targets area. Go to View -> Targets to change the
- setting. If you're working with many hosts, table view may be better for you.
-- Added preliminary support for Metasploit post/ modules. You can launch them
- and if a host is highlighted, Armitage will populate the SESSION var for you.
-- Armitage now uses the sysinfo command in a meterpreter session to pull host
- OS info if it doesn't know it. This also means Armitage will auto-populate
- the host OS when a client-side attack is successful.
-- Tab completion is now ignored when input field is empty
-
-13 Jan 11 Changes
----------
-- Hosts reported as Windows Me now display W2K era Windows logo.
-- "Hail Mary" attack is now launched and managed by Armitage. Exploits are
- selected using the output of db_autopwn AND the operating system information
- Armitage knows. Also attacks are launched in a more optimal order (sorted by
- exploit rank/age). This is a big improvement over db_autopwn by itself.
-- Added a link to the Armitage Issue Tracker in the Help menu.
-- Updated remote exploit payload selection to choose Java payloads or Windows
- shell payloads before resorting to the generic/* payloads.
-- Updated client-side exploit launcher to let you select the target. Armitage
- uses this target (plus the exploit name) to determine which payload to use.
- multi/java_signed_applet works very nicely now ;)
-- Fixed (once and for all now) the mysterious OS info not refreshing bug.
- Now those pretty OS pictures will show up if Metasploit knows about the OS.
-- Added a 52 character length limit to a target's description in the target
- dropdown. This stops weird GUI layouts caused by long target descriptions.
-- Exploit recommendations now take into account FreeBSD hosts.
-- Added an OpenBSD option to the hosts menu.
-- Armitage now does a setg AutoLoadStdapi true when setting up MSF.
-- Last modified field of file browser now sorts properly.
-- Jobs console and its kill feature should now work in all circumstances.
-- Session menus for meterpreter now limited for non-Win meterp sessions.
-- Updated Armitage/Windows to provide a better startup experience. Simply
- extract the archive over your MSF install and rock n' roll.
-
-22 Dec 10 Changes
----------
-- Updated meterpreter shell and command shell console to honor your set
- preferences. I forgot to pass $preferences to the console constructor. Doh!
-- Added a -d/--debug command line option. This will dump System.getProperties()
- and a log of all exchanges with the MSF server to debug.log in the current
- working directory.
-- To play nice with existing conventions, Armitage is now licensed under the
- BSD license. Distribute, use, reuse, recycle.... have fun.
-- Fixed a deadlock condition that arose when a large nmap scan is imported
-- About dialog now shows up centered.
-- Armitage now has a graphic for Cisco IOS. You can mark a host as a Cisco IOS
- device. Also Armitage recognizes IOS from an NMAP Scan.
-- Fixed Armitage "crash" due to read timeouts. This would occur for those of
- you who ran a really taxing operation (e.g., db_autopwn).
-- Added a time limit flag to db_autopwn (20s)
-- Ctrl+R is now even more aggressive clearing internal data structures.
-- Shell N -> Meterpreter... no longer blocks waiting for the operation to
- complete.
-
-13 Dec 10 Changes
----------
-
-- Added Meterpreter -> Browse -> Webcam Shot to grab webcam snap shots.
-- You may now click the image in the webcam/screenshot view to save it.
-- Workspace -> Create menu now automatically switches you to the net workspace.
-- UNIX shell sessions now have an Upload... menu. This item will open a local
- file and use the printf command on the remote host to put it together. It's
- slow but it works.
-- Removed the rename file menu item from the file browser. It turns out I had
- my Windows command shell vs. meterpreter command interface crossed. The
- command doesn't exist in Meterpreter.
-- Upload button now waits until file is uploaded to refresh file listing
-- Added Timestomp item to File Browser popup menu. This works like a clipboard.
- Select Get MACE to capture the MACE values of the current file. Use Set MACE
- on another file to set the MACE values to the currently known attributes.
-- Dump hashes menu item no longer pulls up a new credentials tab.
-- Added a Refresh button to the credentials tab.
-- Updated db refresh code to be a little smarter about when it needs to merge
- db_notes hints into the MSF database.
-
-6 Dec 10 Changes
---------
-
-- added -y filename.yml command line option for specifying a YAML file with
- database parameters
-- updated "Start MSF" to launch "ruby msfrpcd" on Windows. This requires the
- current working directory of Armitage be set to the Metasploit base directory.
-- jobs view now parses job output with only 3 columns of information.
-- connect dialog is now centered on your screen when you start Armitage
-- Armitage now saves your settings when you use Start MSF.
-- Armitage now forces cells in editor mode to save before launching a module or
- an exploit. This should prevent a few surprises where things seemed like they
- weren't working for a few of you.
-- MSF Discovery Scans are now started from a separate thread, preventing
- Armitage from "locking up" while the scans launch. A dialog also comes up to
- state how many scans were launched.
-- MSF Discovery Scans are now limited to 2 threads/scan on Windows and 8 on
- other operating systems. This prevents serious lag issues caused by
- starting too many threads.
-- connect dialog is now a window, meaning it has an icon in whatever your
- window manager is and if you close it Armitage exits.
-- updated DB Connect String helper dialog to ask for DB user, DB pass, DB host,
- and DB name. This should prevent some of you from confusing the database
- user/pass with the MSFRPCD user/pass.
-- Current environment variables are now passed to msfrpcd when executed from
- Armitage. This will allow msfrpcd to inherit any PATH changes and other
- necessary things when Armitage is run from a shell script or batch file.
-- Added .svn folders to the Armitage distribution. Now you can use svn update .
- to keep your install of Armitage up to date.
-- File browser upload and make directory commands now allow files with spaces
- in them.
-- Armitage will now exit if it takes longer than 5 seconds to shutdown msfrpcd
- when cancel is pressed during the connecting phase.
-
-25 Nov 10
----------
-- start msf button now kills msfrpcd session if db_connect fails
-- set default database options to mysql with BackTrack 4 R2 settings.
-- Armitage -> Exit menu now kills msfrpcd, if the "Start MSF" button was used
-- Added ability to set up a multi/handler from Payload launch dialog
-
-13 Nov 10
----------
-- fixed file browser directory icon showing up in every field within Windows L&F
-- added an export button to the credentials view. This will save the credentials to
- a pwdump format file.
-- fixed console highlighting issue, sadly you'll need to click in the console input
- box for it to have focus again. Write once, debug everywhere.
-- added "hail mary" attack option--this launches db_autopwn
-- attack menus now honor the armitage.required_exploit_rank.string setting
-- added Ctrl+R shortcut for refreshing the target view (esp. OS info)
-- fixed db_notes parsing for latest version of MSF (3.5.x?)
-- fixed how auxiliary scans are displayed in the jobs table.
-- db connect helper now prepopulates fields with info taken from connect string
-- added an 8s timeout to abort the database connect if it fails.
-- OS from db_notes to db_hosts refresh is now guaranteed on connect
-- Packaged everything into a single jar file, now I can code in what I like
- without hassle from people who are too lazy to look at the code.
-- SSL handshake now fails after 8 seconds (should give those of you trying
- an SSL connect to a non-SSL server an idea that something is up)
-- added an executable to launch Armitage on Windows
-- fixed command shell interaction bug caused by directories with spaces.
-- Start MSF button now reports an error if it couldn't start MSF-RPC
-
-2 Nov 10
---------
-- Initial (priv8) release.
diff --git a/run.sh b/run.sh
deleted file mode 100755
index 586a73e3..00000000
--- a/run.sh
+++ /dev/null
@@ -1 +0,0 @@
-java -classpath bin:lib/\*:. armitage.ArmitageMain $*
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 00000000..113c1261
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,3 @@
+rootProject.name = 'armitage'
+include 'armitage', 'cortana'
+