Browse Source

Merge branch 'master' of https://github.com/mip-it/hostage

Conflicts:
	src/de/tudarmstadt/informatik/hostage/HoneyListener.java
	src/de/tudarmstadt/informatik/hostage/protocol/HTTPS.java
mip-it 10 years ago
parent
commit
a3d24cefd9
36 changed files with 289 additions and 265 deletions
  1. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyListener.class
  2. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyService.class
  3. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$array.class
  4. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$dimen.class
  5. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$id.class
  6. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$menu.class
  7. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$string.class
  8. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$style.class
  9. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R.class
  10. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP$STATE.class
  11. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP.class
  12. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/HTTP.class
  13. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/Protocol$TALK_FIRST.class
  14. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/Protocol.class
  15. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB$STATE.class
  16. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB.class
  17. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/SSH$STATE.class
  18. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/SSH.class
  19. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/ListViewAdapter.class
  20. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity.class
  21. 102 99
      gen/de/tudarmstadt/informatik/hostage/R.java
  22. 8 8
      res/layout/activity_viewlog.xml
  23. BIN
      res/raw/https_cert.bks
  24. 3 3
      res/values/protocols.xml
  25. 6 4
      src/de/tudarmstadt/informatik/hostage/HoneyListener.java
  26. 4 6
      src/de/tudarmstadt/informatik/hostage/protocol/ECHO.java
  27. 29 32
      src/de/tudarmstadt/informatik/hostage/protocol/FTP.java
  28. 27 53
      src/de/tudarmstadt/informatik/hostage/protocol/HTTP.java
  29. 83 16
      src/de/tudarmstadt/informatik/hostage/protocol/HTTPS.java
  30. 1 10
      src/de/tudarmstadt/informatik/hostage/protocol/MySQL.java
  31. 0 4
      src/de/tudarmstadt/informatik/hostage/protocol/Protocol.java
  32. 0 7
      src/de/tudarmstadt/informatik/hostage/protocol/SMB.java
  33. 1 8
      src/de/tudarmstadt/informatik/hostage/protocol/SSH.java
  34. 16 0
      src/de/tudarmstadt/informatik/hostage/protocol/SSLProtocol.java
  35. 3 10
      src/de/tudarmstadt/informatik/hostage/protocol/TELNET.java
  36. 6 5
      src/de/tudarmstadt/informatik/hostage/ui/ViewLog.java

BIN
bin/classes/de/tudarmstadt/informatik/hostage/HoneyListener.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/HoneyService.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$array.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$dimen.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$id.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$menu.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$string.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$style.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP$STATE.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/HTTP.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/Protocol$TALK_FIRST.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/Protocol.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB$STATE.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/SSH$STATE.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/SSH.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/ListViewAdapter.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity.class


+ 102 - 99
gen/de/tudarmstadt/informatik/hostage/R.java

@@ -15,17 +15,17 @@ public final class R {
         public static final int out_right_to_left=0x7f040003;
     }
     public static final class array {
-        public static final int delete_criteria=0x7f060001;
-        public static final int format=0x7f060000;
-        public static final int protocols=0x7f060004;
-        public static final int upload_entries=0x7f060002;
-        public static final int upload_values=0x7f060003;
+        public static final int delete_criteria=0x7f070001;
+        public static final int format=0x7f070000;
+        public static final int protocols=0x7f070004;
+        public static final int upload_entries=0x7f070002;
+        public static final int upload_values=0x7f070003;
     }
     public static final class attr {
     }
     public static final class color {
-        public static final int dark_grey=0x7f070001;
-        public static final int light_grey=0x7f070000;
+        public static final int dark_grey=0x7f080001;
+        public static final int light_grey=0x7f080000;
     }
     public static final class dimen {
         /**  Default screen margins, per the Android Design guidelines. 
@@ -34,8 +34,8 @@ public final class R {
          screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
     
          */
-        public static final int activity_horizontal_margin=0x7f080000;
-        public static final int activity_vertical_margin=0x7f080001;
+        public static final int activity_horizontal_margin=0x7f090000;
+        public static final int activity_vertical_margin=0x7f090001;
     }
     public static final class drawable {
         public static final int ic_launcher=0x7f020000;
@@ -52,46 +52,46 @@ public final class R {
         public static final int light_yellow_large=0x7f02000b;
     }
     public static final class id {
-        public static final int TextViewServices=0x7f0c0017;
-        public static final int action_about=0x7f0c0027;
-        public static final int action_settings=0x7f0c0026;
-        public static final int buttonDeleteLog=0x7f0c0022;
-        public static final int buttonExportDatabase=0x7f0c0020;
-        public static final int buttonShowLog=0x7f0c000d;
-        public static final int buttonUploadLog=0x7f0c0021;
-        public static final int checkBoxParanoid=0x7f0c000b;
-        public static final int imageViewLight=0x7f0c000a;
-        public static final int layoutContainer=0x7f0c001a;
-        public static final int listViewProtocols=0x7f0c0018;
-        public static final int textFirstAttack=0x7f0c001b;
-        public static final int textFirstAttackValue=0x7f0c001c;
-        public static final int textLastAttack=0x7f0c001d;
-        public static final int textLastAttackValue=0x7f0c001e;
-        public static final int textLogFile=0x7f0c001f;
-        public static final int textStatistics=0x7f0c0019;
-        public static final int textViewBSSID=0x7f0c0011;
-        public static final int textViewBSSIDValue=0x7f0c0012;
-        public static final int textViewConnections=0x7f0c0024;
-        public static final int textViewConnectionsValue=0x7f0c0025;
-        public static final int textViewDetails=0x7f0c000e;
-        public static final int textViewExternalIP=0x7f0c0015;
-        public static final int textViewExternalIPValue=0x7f0c0016;
-        public static final int textViewInternalIP=0x7f0c0013;
-        public static final int textViewInternalIPValue=0x7f0c0014;
-        public static final int textViewProtocol=0x7f0c0023;
-        public static final int textViewSSID=0x7f0c000f;
-        public static final int textViewSSIDValue=0x7f0c0010;
-        public static final int textViewStatus=0x7f0c0009;
-        public static final int text_author_1=0x7f0c0004;
-        public static final int text_author_2=0x7f0c0005;
-        public static final int text_author_3=0x7f0c0006;
-        public static final int text_author_4=0x7f0c0007;
-        public static final int text_authors=0x7f0c0003;
-        public static final int text_description=0x7f0c0002;
-        public static final int text_version=0x7f0c0000;
-        public static final int toggleButtonOnOff=0x7f0c000c;
-        public static final int version=0x7f0c0001;
-        public static final int viewAnimator=0x7f0c0008;
+        public static final int TextViewServices=0x7f0d0017;
+        public static final int action_about=0x7f0d0027;
+        public static final int action_settings=0x7f0d0026;
+        public static final int buttonDeleteLog=0x7f0d0022;
+        public static final int buttonExportDatabase=0x7f0d0020;
+        public static final int buttonShowLog=0x7f0d000d;
+        public static final int buttonUploadLog=0x7f0d0021;
+        public static final int checkBoxParanoid=0x7f0d000b;
+        public static final int imageViewLight=0x7f0d000a;
+        public static final int layoutContainer=0x7f0d001a;
+        public static final int listViewProtocols=0x7f0d0018;
+        public static final int textFirstAttack=0x7f0d001b;
+        public static final int textFirstAttackValue=0x7f0d001c;
+        public static final int textLastAttack=0x7f0d001d;
+        public static final int textLastAttackValue=0x7f0d001e;
+        public static final int textLogFile=0x7f0d001f;
+        public static final int textStatistics=0x7f0d0019;
+        public static final int textViewBSSID=0x7f0d0011;
+        public static final int textViewBSSIDValue=0x7f0d0012;
+        public static final int textViewConnections=0x7f0d0024;
+        public static final int textViewConnectionsValue=0x7f0d0025;
+        public static final int textViewDetails=0x7f0d000e;
+        public static final int textViewExternalIP=0x7f0d0015;
+        public static final int textViewExternalIPValue=0x7f0d0016;
+        public static final int textViewInternalIP=0x7f0d0013;
+        public static final int textViewInternalIPValue=0x7f0d0014;
+        public static final int textViewProtocol=0x7f0d0023;
+        public static final int textViewSSID=0x7f0d000f;
+        public static final int textViewSSIDValue=0x7f0d0010;
+        public static final int textViewStatus=0x7f0d0009;
+        public static final int text_author_1=0x7f0d0004;
+        public static final int text_author_2=0x7f0d0005;
+        public static final int text_author_3=0x7f0d0006;
+        public static final int text_author_4=0x7f0d0007;
+        public static final int text_authors=0x7f0d0003;
+        public static final int text_description=0x7f0d0002;
+        public static final int text_version=0x7f0d0000;
+        public static final int toggleButtonOnOff=0x7f0d000c;
+        public static final int version=0x7f0d0001;
+        public static final int viewAnimator=0x7f0d0008;
     }
     public static final class layout {
         public static final int activity_about=0x7f030000;
@@ -100,56 +100,59 @@ public final class R {
         public static final int list_view_protocols_row=0x7f030003;
     }
     public static final class menu {
-        public static final int main=0x7f0b0000;
+        public static final int main=0x7f0c0000;
+    }
+    public static final class raw {
+        public static final int https_cert=0x7f060000;
     }
     public static final class string {
-        public static final int action_about=0x7f090002;
-        public static final int action_settings=0x7f090001;
-        public static final int app_name=0x7f090000;
-        public static final int authors=0x7f09001c;
-        public static final int authors_j=0x7f090020;
-        public static final int authors_l=0x7f09001e;
-        public static final int authors_m=0x7f09001d;
-        public static final int authors_w=0x7f09001f;
-        public static final int bssid=0x7f090009;
-        public static final int cancel=0x7f090015;
-        public static final int capital_off=0x7f090004;
-        public static final int capital_on=0x7f090003;
-        public static final int clear=0x7f090013;
-        public static final int connections=0x7f09000d;
-        public static final int database=0x7f09000f;
-        public static final int delete=0x7f090014;
-        public static final int delete_dialog_title=0x7f090018;
-        public static final int description=0x7f09001b;
-        public static final int details=0x7f090007;
-        public static final int dialog_clear_database=0x7f090016;
-        public static final int dialog_clear_database_date=0x7f090019;
-        public static final int export_dialog_title=0x7f090017;
-        public static final int external_ip=0x7f09000b;
-        public static final int firstAttack=0x7f090011;
-        public static final int internal_ip=0x7f09000a;
-        public static final int lastAttack=0x7f090012;
-        public static final int log_actions=0x7f090010;
-        public static final int paranoid=0x7f090006;
-        public static final int pref_alarm=0x7f090022;
-        public static final int pref_alarm_default=0x7f090023;
-        public static final int pref_alarm_summ=0x7f090024;
-        public static final int pref_external_location_title=0x7f090028;
-        public static final int pref_external_storage_summ=0x7f090027;
-        public static final int pref_external_storage_title=0x7f090026;
-        public static final int pref_notification=0x7f090029;
-        public static final int pref_storage=0x7f090025;
-        public static final int pref_upload=0x7f09002c;
-        public static final int pref_upload_server=0x7f09002d;
-        public static final int pref_upload_server_summ=0x7f09002e;
-        public static final int pref_vibration=0x7f09002a;
-        public static final int pref_vibration_summ=0x7f09002b;
-        public static final int services=0x7f09000c;
-        public static final int settings=0x7f090021;
-        public static final int ssid=0x7f090008;
-        public static final int statistics=0x7f09000e;
-        public static final int status=0x7f090005;
-        public static final int text_version=0x7f09001a;
+        public static final int action_about=0x7f0a0002;
+        public static final int action_settings=0x7f0a0001;
+        public static final int app_name=0x7f0a0000;
+        public static final int authors=0x7f0a001c;
+        public static final int authors_j=0x7f0a0020;
+        public static final int authors_l=0x7f0a001e;
+        public static final int authors_m=0x7f0a001d;
+        public static final int authors_w=0x7f0a001f;
+        public static final int bssid=0x7f0a0009;
+        public static final int cancel=0x7f0a0015;
+        public static final int capital_off=0x7f0a0004;
+        public static final int capital_on=0x7f0a0003;
+        public static final int clear=0x7f0a0013;
+        public static final int connections=0x7f0a000d;
+        public static final int database=0x7f0a000f;
+        public static final int delete=0x7f0a0014;
+        public static final int delete_dialog_title=0x7f0a0018;
+        public static final int description=0x7f0a001b;
+        public static final int details=0x7f0a0007;
+        public static final int dialog_clear_database=0x7f0a0016;
+        public static final int dialog_clear_database_date=0x7f0a0019;
+        public static final int export_dialog_title=0x7f0a0017;
+        public static final int external_ip=0x7f0a000b;
+        public static final int firstAttack=0x7f0a0011;
+        public static final int internal_ip=0x7f0a000a;
+        public static final int lastAttack=0x7f0a0012;
+        public static final int log_actions=0x7f0a0010;
+        public static final int paranoid=0x7f0a0006;
+        public static final int pref_alarm=0x7f0a0022;
+        public static final int pref_alarm_default=0x7f0a0023;
+        public static final int pref_alarm_summ=0x7f0a0024;
+        public static final int pref_external_location_title=0x7f0a0028;
+        public static final int pref_external_storage_summ=0x7f0a0027;
+        public static final int pref_external_storage_title=0x7f0a0026;
+        public static final int pref_notification=0x7f0a0029;
+        public static final int pref_storage=0x7f0a0025;
+        public static final int pref_upload=0x7f0a002c;
+        public static final int pref_upload_server=0x7f0a002d;
+        public static final int pref_upload_server_summ=0x7f0a002e;
+        public static final int pref_vibration=0x7f0a002a;
+        public static final int pref_vibration_summ=0x7f0a002b;
+        public static final int services=0x7f0a000c;
+        public static final int settings=0x7f0a0021;
+        public static final int ssid=0x7f0a0008;
+        public static final int statistics=0x7f0a000e;
+        public static final int status=0x7f0a0005;
+        public static final int text_version=0x7f0a001a;
     }
     public static final class style {
         /** 
@@ -173,11 +176,11 @@ public final class R {
     
  API 14 theme customizations can go here. 
          */
-        public static final int AppBaseTheme=0x7f0a0000;
+        public static final int AppBaseTheme=0x7f0b0000;
         /**  Application theme. 
  All customizations that are NOT specific to a particular API-level can go here. 
          */
-        public static final int AppTheme=0x7f0a0001;
+        public static final int AppTheme=0x7f0b0001;
     }
     public static final class xml {
         public static final int preferences=0x7f050000;

+ 8 - 8
res/layout/activity_viewlog.xml

@@ -1,17 +1,17 @@
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:scrollbars="none" >
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+	android:scrollbars="none">
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical" >
+        android:orientation="vertical"
+        android:paddingBottom="@dimen/activity_vertical_margin"
+    	android:paddingLeft="@dimen/activity_horizontal_margin"
+    	android:paddingRight="@dimen/activity_horizontal_margin"
+    	android:paddingTop="@dimen/activity_vertical_margin" >
 
         <TextView
             android:id="@+id/textStatistics"

BIN
res/raw/https_cert.bks


+ 3 - 3
res/values/protocols.xml

@@ -2,14 +2,14 @@
 <resources>
 
     <string-array name="protocols">
+		<item>ECHO</item>
         <item>FTP</item>
-        <item>HTTPS</item>
         <item>HTTP</item>
+        <item>HTTPS</item>
+        <item>MySQL</item>
         <item>SMB</item>
         <item>SSH</item>
         <item>TELNET</item>
-        <item>MySQL</item>
-        <item>ECHO</item>
     </string-array>
 
 </resources>

+ 6 - 4
src/de/tudarmstadt/informatik/hostage/HoneyListener.java

@@ -18,6 +18,7 @@ import de.tudarmstadt.informatik.hostage.handler.ByteArrayHandlerImpl;
 import de.tudarmstadt.informatik.hostage.handler.StringHandlerImpl;
 import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
+import de.tudarmstadt.informatik.hostage.protocol.SSLProtocol;
 import de.tudarmstadt.informatik.hostage.ui.MainActivity;
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
 
@@ -69,9 +70,10 @@ public class HoneyListener implements Runnable {
 			if (protocol.isSecure())
 				// TODO
 				// server = new MyServerSocketFactory().createServerSocket(
-				// protocol.getPort(), protocol.getSSLContext());
-				server = (SSLServerSocket) protocol.getSSLContext()
-						.getServerSocketFactory()
+				// protocol.getPort(), ((SSLProtocol)
+				// protocol).getSSLContext());
+				server = (SSLServerSocket) ((SSLProtocol) protocol)
+						.getSSLContext().getServerSocketFactory()
 						.createServerSocket(protocol.getPort());
 			else
 				server = new MyServerSocketFactory()
@@ -133,7 +135,7 @@ public class HoneyListener implements Runnable {
 	}
 
 	private void startSecureHandler(Socket client) throws Exception {
-		SSLContext sslContext = protocol.getSSLContext();
+		SSLContext sslContext = ((SSLProtocol) protocol).getSSLContext();
 		SSLSocketFactory factory = sslContext.getSocketFactory();
 		SSLSocket sslClient = (SSLSocket) factory.createSocket(client, null,
 				client.getPort(), false);

+ 4 - 6
src/de/tudarmstadt/informatik/hostage/protocol/ECHO.java

@@ -3,10 +3,12 @@ package de.tudarmstadt.informatik.hostage.protocol;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.net.ssl.SSLContext;
-
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
 
+/**
+ * ECHO protocol
+ * @author Wulf Pfeiffer
+ */
 public class ECHO implements Protocol<ByteArray>{
 
 	@Override
@@ -47,8 +49,4 @@ public class ECHO implements Protocol<ByteArray>{
 		return "ECHO";
 	}
 
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
 }

+ 29 - 32
src/de/tudarmstadt/informatik/hostage/protocol/FTP.java

@@ -2,12 +2,10 @@ package de.tudarmstadt.informatik.hostage.protocol;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.regex.Pattern;
-
-import javax.net.ssl.SSLContext;
 
 /**
  * FTP protocol
+ * @author Wulf Pfeiffer
  */
 public final class FTP implements Protocol<String> {
 	/**
@@ -39,60 +37,64 @@ public final class FTP implements Protocol<String> {
 		case NONE:
 			if (message == null) {
 				state = STATE.OPEN;
-				response.add("220 Service ready for new user.");
+				response.add(c220);
 			} else {
 				state = STATE.CLOSED;
-				response.add("421 Service not available, closing control connection.");
+				response.add(c421);
 			}
 			break;
 		case OPEN:
-			if (Pattern.matches("^QUIT\\s?", message)) {
+			if (message.contains("QUIT")) {
 				state = STATE.CLOSED;
 				return null;
-			} else if (Pattern.matches("^USER (\\w)+$", message)) {
+			} else if (message.equals("USER \r\n")) {
+				response.add(c501);
+			} else if (message.contains("USER")) {
 				state = STATE.USER;
-				response.add("331 User name ok, need password.");
-			} else if (message != null && Pattern.matches("^USER\\s?", message)) {
-				response.add("530 Not logged in.");
-			} else if (message != null && Pattern.matches("^USER.*", message)) {
-				response.add("501 Syntax error in parameters or arguments");
+				response.add(c331);
 			} else {
-				response.add("332 Need account for login.");
+				response.add(c332);
 			}
 			break;
 		case USER:
-			if (Pattern.matches("^PASS (\\S)+$", message)) {
-				state = STATE.LOGGED_IN;
-				response.add("230 User logged in.");
-			} else if (Pattern.matches("^PASS.*", message)) {
+			if (message.equals("PASS \r\n")) {
 				state = STATE.OPEN;
-				response.add("501 Syntax error in parameters or arguments");
+				response.add(c501);
+			} else if (message.contains("PASS")) {
+				state = STATE.LOGGED_IN;
+				response.add(c230);
 			} else {
 				state = STATE.CLOSED;
-				response.add("221 Service closing control connection.");
+				response.add(c221);
 			}
 			break;
 		case LOGGED_IN:
-			if (Pattern.matches("^QUIT\\s?", message)) {
-				state = STATE.CLOSED;
-				response.add("221 Service closing control connection.");
-			} else if (message != null) {
-				response.add("502 Command not implemented.");
+			if (message != null && !message.contains("QUIT")) {
+				response.add(c500);
 			} else {
 				state = STATE.CLOSED;
-				response.add("221 Service closing control connection.");
+				response.add(c221);
 			}
 			break;
 		default:
 			state = STATE.CLOSED;
-			response.add("421 Service not available, closing control connection.");
+			response.add(c421);
 		}
 		return response;
 	}
+	
+	private String c220 = "220 Service ready for new user.";
+	private String c221 = "221 Service closing control connection.";
+	private String c230 = "230 User logged in.";
+	private String c331 = "331 User name ok, need password.";
+	private String c332 = "332 Need account for login.";
+	private String c421 = "421 Service not available, closing control connection.";
+	private String c500 = "500 Syntax error, command unrecognized.";
+	private String c501 = "501 Syntax error in parameters or arguments";
 
 	@Override
 	public boolean isClosed() {
-		return (state == STATE.CLOSED);
+		return state == STATE.CLOSED;
 	}
 
 	@Override
@@ -109,10 +111,5 @@ public final class FTP implements Protocol<String> {
 	public String toString() {
 		return "FTP";
 	}
-	
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
 
 }

+ 27 - 53
src/de/tudarmstadt/informatik/hostage/protocol/HTTP.java

@@ -3,26 +3,12 @@ package de.tudarmstadt.informatik.hostage.protocol;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.net.ssl.SSLContext;
-
 /**
  * HTTP protocol
  * @author Wulf Pfeiffer
  */
 public final class HTTP implements Protocol<String> {
 	
-	/**
-	 * Represents the states of the protocol
-	 */
-	private enum STATE {
-		NONE, CLOSED
-	}
-
-	/**
-	 * Denotes in which state the protocol is right now
-	 */
-	private STATE state = STATE.NONE;
-	
 	@Override
 	public int getPort() {
 		return 80;
@@ -37,40 +23,34 @@ public final class HTTP implements Protocol<String> {
 	public List<String> processMessage(String message) {
 		List<String> response = new ArrayList<String>();
 		request = message + request;
-		
-		switch(state) {
-		case NONE:
-			if(!message.contains(version)){
-				response.add(buildPacket(versionUnsupported, ""));
-			} else if(message.contains(get)) {
-				response.add(buildPacket(ok, get));
-			} else if(message.contains(head)) {
-				response.add(buildPacket(ok, head));
-			} else if(message.contains(trace)){
-				response.add(buildPacket(ok, trace));
-			} else if(message.contains(options)){
-				response.add(buildPacket(methodNotAllowed, options));
-			} else if(message.contains(post)){
-				response.add(buildPacket(methodNotAllowed, post));
-			} else if(message.contains(put)){
-				response.add(buildPacket(methodNotAllowed, put));
-			} else if(message.contains(delete)){
-				response.add(buildPacket(methodNotAllowed, delete));
-			} else if(message.contains(connect)){
-				response.add(buildPacket(methodNotAllowed, connect));
-			} else {
-				response.add(buildPacket(badRequest, ""));
-			}
-			state = STATE.CLOSED;
-		default:
-			state = STATE.CLOSED;
+
+		if(!message.contains(version)){
+			response.add(buildPacket(c505, ""));
+		} else if(message.contains(get)) {
+			response.add(buildPacket(c200, get));
+		} else if(message.contains(head)) {
+			response.add(buildPacket(c200, head));
+		} else if(message.contains(trace)){
+			response.add(buildPacket(c200, trace));
+		} else if(message.contains(options)){
+			response.add(buildPacket(c400, options));
+		} else if(message.contains(post)){
+			response.add(buildPacket(c400, post));
+		} else if(message.contains(put)){
+			response.add(buildPacket(c400, put));
+		} else if(message.contains(delete)){
+			response.add(buildPacket(c400, delete));
+		} else if(message.contains(connect)){
+			response.add(buildPacket(c400, connect));
+		} else {
+			response.add(buildPacket(c400, ""));
 		}
 		return response;
 	}
 
 	@Override
 	public boolean isClosed() {
-		return state == STATE.CLOSED;
+		return true;
 	}
 
 	@Override
@@ -87,11 +67,6 @@ public final class HTTP implements Protocol<String> {
 	public String toString() {
 		return "HTTP";
 	}
-	
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
 
 	/**
 	 * Builds a html response that can be sent
@@ -110,8 +85,8 @@ public final class HTTP implements Protocol<String> {
 	}
 
 	/** Whole request that was sent by the client */
-	private String request = "";
-	private String version = "HTTP/1.1";
+	private String request	= "";
+	private String version	= "HTTP/1.1";
 	//request codes
 	private String options 	= "OPTIONS";
 	private String get 		= "GET";
@@ -122,10 +97,9 @@ public final class HTTP implements Protocol<String> {
 	private String trace	= "TRACE";
 	private String connect	= "CONNECT";
 	//response codes
-	private String ok 					= " 200 OK\r\n";
-	private String badRequest 			= " 400 Bad Request\r\n";
-	private String methodNotAllowed 	= " 405 Method Not Allowed\r\n";
-	private String versionUnsupported 	= " 505 HTTP Version not supported\r\n";
+	private String c200 	= " 200 OK\r\n";
+	private String c400 	= " 400 Bad Request\r\n";
+	private String c505 	= " 505 HTTP Version not supported\r\n";
 	
 	//html header pre and suffix
 	private String headerPrefix =				

+ 83 - 16
src/de/tudarmstadt/informatik/hostage/protocol/HTTPS.java

@@ -8,13 +8,12 @@ import java.util.List;
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 
-public class HTTPS implements Protocol<String> {
-
-	private static enum STATE {
-		NONE, OPEN, CLOSED
-	};
-
-	private STATE state = STATE.NONE;
+/**
+ * HTTPS protocol
+ * 
+ * @author Wulf Pfeiffer
+ */
+public class HTTPS implements SSLProtocol<String> {
 
 	@Override
 	public int getPort() {
@@ -29,14 +28,35 @@ public class HTTPS implements Protocol<String> {
 	@Override
 	public List<String> processMessage(String message) {
 		List<String> response = new ArrayList<String>();
-		response.add(header + html);
-		state = STATE.CLOSED;
+		request = message + request;
+
+		if (!message.contains(version)) {
+			response.add(buildPacket(c505, ""));
+		} else if (message.contains(get)) {
+			response.add(buildPacket(c200, get));
+		} else if (message.contains(head)) {
+			response.add(buildPacket(c200, head));
+		} else if (message.contains(trace)) {
+			response.add(buildPacket(c200, trace));
+		} else if (message.contains(options)) {
+			response.add(buildPacket(c400, options));
+		} else if (message.contains(post)) {
+			response.add(buildPacket(c400, post));
+		} else if (message.contains(put)) {
+			response.add(buildPacket(c400, put));
+		} else if (message.contains(delete)) {
+			response.add(buildPacket(c400, delete));
+		} else if (message.contains(connect)) {
+			response.add(buildPacket(c400, connect));
+		} else {
+			response.add(buildPacket(c400, ""));
+		}
 		return response;
 	}
 
 	@Override
 	public boolean isClosed() {
-		return state == STATE.CLOSED;
+		return true;
 	}
 
 	@Override
@@ -81,18 +101,65 @@ public class HTTPS implements Protocol<String> {
 		return sslcontext;
 	}
 
-	private String header = "HTTP/1.1 200 OK\r\n"
-			+ "Date: Mon, 01 Jul 2013 18:27:55 GMT\r\n"
+	/**
+	 * Builds a html response that can be sent
+	 * 
+	 * @param code
+	 *            response code that was determined
+	 * @param type
+	 *            request type that was sent by the client
+	 * @return the html response
+	 */
+	private String buildPacket(String code, String type) {
+		String doc = "";
+		if (type.equals(get))
+			doc = htmlDoc;
+		else if (type.equals(head))
+			doc = "";
+		else if (type.equals(trace))
+			doc = request;
+		else
+			doc = errorHtmlPrefix + code + errorHtmlSuffix;
+
+		return version + code + headerPrefix + doc.length() + headerSuffix
+				+ doc;
+	}
+
+	/** Whole request that was sent by the client */
+	private String request = "";
+	private String version = "HTTP/1.1";
+	// request codes
+	private String options = "OPTIONS";
+	private String get = "GET";
+	private String head = "HEAD";
+	private String post = "POST";
+	private String put = "PUT";
+	private String delete = "DELETE";
+	private String trace = "TRACE";
+	private String connect = "CONNECT";
+	// response codes
+	private String c200 = " 200 OK\r\n";
+	private String c400 = " 400 Bad Request\r\n";
+	private String c505 = " 505 HTTP Version not supported\r\n";
+
+	// html header pre and suffix
+	private String headerPrefix = "Date: Mon, 01 Jul 2013 18:27:55 GMT\r\n"
 			+ "Server: Apache/2.2.22 (Debian)\r\n"
-			+ "X-Powered-By: PHP/5.4.4.-14\r\n" + "Vary: Accept-Encoding\r\n"
-			+ "Content-Length: 173\r\n" + "Keep-Alive: timeout=5, max=100\r\n"
+			+ "Vary: Accept-Encoding\r\n" + "Content-Length: ";
+	private String headerSuffix = "\r\n" + "Keep-Alive: timeout=5, max=100\r\n"
 			+ "Connection: Keep-Alive\r\n" + "Content-Type: text/html\r\n"
 			+ "\r\n";
-
-	private String html = "<!doctype html>\n" + "<html lang=\"en\">\n"
+	// html website
+	private String htmlDoc = "<!doctype html>\n" + "<html lang=\"en\">\n"
 			+ "<head>\n" + "<meta charset=\"UTF-8\">\n"
 			+ "<title>Test successful</title>\n" + "</head>\n" + "<body>\n"
 			+ "<h1>Test successful</h1>\n" + "<p>Congratulations.</p>\n"
 			+ "</body>\n" + "</html>";
+	// html error pre and suffix
+	private String errorHtmlPrefix = "<!doctype html>\n"
+			+ "<html lang=\"en\">\n" + "<head>\n"
+			+ "<meta charset=\"UTF-8\">\n" + "<title>";
+	private String errorHtmlSuffix = "</title>\n" + "</head>\n" + "<body>\n"
+			+ "</body>\n" + "</html>";
 
 }

+ 1 - 10
src/de/tudarmstadt/informatik/hostage/protocol/MySQL.java

@@ -4,8 +4,6 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.net.ssl.SSLContext;
-
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
 
@@ -48,8 +46,6 @@ public class MySQL implements Protocol<ByteArray>{
 		case LOGIN_INFO:
 			if(this.request[4] == 0x01) {
 				state = STATE.CLOSED;
-			} else if(this.request[4] == 0x03) {
-				response.add(new ByteArray(responseOK()));
 			} else {
 				response.add(new ByteArray(responseError()));
 			}
@@ -81,12 +77,7 @@ public class MySQL implements Protocol<ByteArray>{
 	public boolean isClosed() {
 		return state == STATE.CLOSED;
 	}
-	
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
-	
+
 	/**
 	 * Wraps the response packet with the packet length and number
 	 * @param packet that is wrapped

+ 0 - 4
src/de/tudarmstadt/informatik/hostage/protocol/Protocol.java

@@ -2,8 +2,6 @@ package de.tudarmstadt.informatik.hostage.protocol;
 
 import java.util.List;
 
-import javax.net.ssl.SSLContext;
-
 /**
  * Interface for protocols that are used by hostage
  * @param <T> Denotes if the protocol is using Strings or ByteArrays
@@ -60,7 +58,5 @@ public interface Protocol<T> {
 	 */
 	@Override 
 	String toString();
-	
-	SSLContext getSSLContext();
 
 }

+ 0 - 7
src/de/tudarmstadt/informatik/hostage/protocol/SMB.java

@@ -7,8 +7,6 @@ import java.util.List;
 import java.util.Random;
 import java.util.TimeZone;
 
-import javax.net.ssl.SSLContext;
-
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
 
@@ -133,11 +131,6 @@ public final class SMB implements Protocol<ByteArray> {
 	public String toString() {
 		return "SMB";
 	}
-	
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
 
 	/**
 	 * Converts the current system time into a byte[] with windows specific time

+ 1 - 8
src/de/tudarmstadt/informatik/hostage/protocol/SSH.java

@@ -17,8 +17,6 @@ import javax.crypto.KeyAgreement;
 import javax.crypto.interfaces.DHPublicKey;
 import javax.crypto.spec.DHParameterSpec;
 import javax.crypto.spec.DHPublicKeySpec;
-import javax.net.ssl.SSLContext;
-
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
 
@@ -158,12 +156,7 @@ public final class SSH implements Protocol<ByteArray> {
 	public String toString() {
 		return "SSH";
 	}
-	
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
-	
+
 	/**
 	 * Wraps the packets with packet length and padding
 	 * @param packet content that is wrapped

+ 16 - 0
src/de/tudarmstadt/informatik/hostage/protocol/SSLProtocol.java

@@ -0,0 +1,16 @@
+package de.tudarmstadt.informatik.hostage.protocol;
+
+import javax.net.ssl.SSLContext;
+/**
+ * Interface for ssl protocols that are used by hostage
+ * @author Wulf Pfeiffer
+ * @param <T> Denotes if the protocol is using Strings or ByteArrays
+ */
+public interface SSLProtocol<T> extends Protocol<T> {
+
+	/**
+	 * Returns the initialized SSL Context with the KeyManager and TrustManager that will be used
+	 * @return the used SSLContext
+	 */
+	SSLContext getSSLContext();
+}

+ 3 - 10
src/de/tudarmstadt/informatik/hostage/protocol/TELNET.java

@@ -3,8 +3,6 @@ package de.tudarmstadt.informatik.hostage.protocol;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.net.ssl.SSLContext;
-
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
 
@@ -58,7 +56,7 @@ public final class TELNET implements Protocol<ByteArray> {
 			if(request != null) {
 				response.add(new ByteArray(getOptionResponse(request)));
 				response.add(new ByteArray("Debian GNU/Linux 7.0\r\n"));
-				response.add(new ByteArray(server + "login: "));
+				response.add(new ByteArray(server + " login: "));
 				state = STATE.LOGIN;
 			}
 			break;
@@ -68,7 +66,7 @@ public final class TELNET implements Protocol<ByteArray> {
 				response.add(new ByteArray("\r\n"));
 				response.add(new ByteArray("Password: "));
 				state = STATE.AUTHENTICATE;
-				sessionToken = HelperUtils.concat(sessionPrefix, "@".getBytes(), server.getBytes(), sessionMiddle, "@".getBytes(), server.getBytes(), sessionSuffix);
+				sessionToken = HelperUtils.concat(sessionPrefix, user, "@".getBytes(), server.getBytes(), sessionMiddle, user, "@".getBytes(), server.getBytes(), sessionSuffix);
 				break;
 			} else if (request[0] == 0x7f) {
 				byte[] tmp = new byte[user.length - 1];
@@ -86,7 +84,7 @@ public final class TELNET implements Protocol<ByteArray> {
 		case AUTHENTICATE:
 			if(request == null) break;
 			else if(request[0] == 0x0d) {
-				response.add(new ByteArray("Last Login: \r\nLinux" + server + " 3.6.11+\r\n"));
+				response.add(new ByteArray("\r\nLast Login: \r\nLinux" + server + " 3.6.11+\r\n"));
 				response.add(new ByteArray(sessionToken));
 				state = STATE.LOGGED_IN;
 			} else if (request[0] == 0x7f) {
@@ -148,11 +146,6 @@ public final class TELNET implements Protocol<ByteArray> {
 	public Class<ByteArray> getType() {
 		return ByteArray.class;
 	}
-	
-	@Override
-	public SSLContext getSSLContext() {
-		return null;
-	}
 
 	/**
 	 * Determines which options that are requested by the client will be done and which not

+ 6 - 5
src/de/tudarmstadt/informatik/hostage/ui/ViewLog.java

@@ -9,6 +9,7 @@ import java.util.HashMap;
 
 import de.tudarmstadt.informatik.hostage.R;
 import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
+import de.tudarmstadt.informatik.hostage.logging.Record;
 import de.tudarmstadt.informatik.hostage.logging.SQLLogger;
 import android.annotation.SuppressLint;
 import android.app.Activity;
@@ -283,14 +284,14 @@ public class ViewLog extends Activity {
 	}
 
 	private void setFirstAndLastAttack() {
-		int firstAttackId = dbh.getSmallestAttackId();
-		int lastAttackId = dbh.getHighestAttackId();
-		if (firstAttackId != -1) {
-			Date resultdate = new Date(dbh.getRecordOfAttackId(firstAttackId).getTimestamp());
+		Record firstAttack = dbh.getRecordOfAttackId(dbh.getSmallestAttackId());
+		Record lastAttack = dbh.getRecordOfAttackId(dbh.getHighestAttackId());
+		if (firstAttack != null) {
+			Date resultdate = new Date(firstAttack.getTimestamp());
 			TextView text = (TextView) findViewById(R.id.textFirstAttackValue);
 			text.setText(sdf.format(resultdate));
 			text = (TextView) findViewById(R.id.textLastAttackValue);
-			resultdate = new Date(dbh.getRecordOfAttackId(lastAttackId).getTimestamp());
+			resultdate = new Date(lastAttack.getTimestamp());
 			text.setText(sdf.format(resultdate));
 		} else {
 			TextView text = (TextView) findViewById(R.id.textFirstAttackValue);