Jelajahi Sumber

Merge branch 'master' of https://git.tk.informatik.tu-darmstadt.de/scm-ssi-student-hostagev2

Fabio Arnold 10 tahun lalu
induk
melakukan
7b5cd0e27e

+ 4 - 1
AndroidManifest.xml

@@ -33,7 +33,10 @@
 			android:icon="@drawable/ic_launcher"
 			android:label="@string/app_name"
 			android:theme="@style/AppTheme"
-			android:installLocation="preferExternal">
+			android:installLocation="preferExternal"
+			android:vmSafeMode="true"
+			android:allowClearUserData="true"
+			android:hardwareAccelerated="true">
 		<meta-data
 				android:name="com.google.android.gms.version"
 				android:value="14"/>

+ 3 - 1
TODO

@@ -1,2 +1,4 @@
 ! [Overview]    Greeting animation only to show on application start, not on every fragment creation/recreating
-! [Statistics]  Switch to records view on record click
+! [Statistics]  Switch to records view on record click
+! [Back Button] * Fix scenario: Home View -> Threat Map -> Back Button -> Threat Map
+                * Fix scenaria: Home View -> Connection details -> Records -> Back Button

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

@@ -339,24 +339,26 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	}
 
 	public int numBssidSeen(String BSSID){
-		String countQuery = "SELECT  * FROM " + TABLE_BSSIDS + " WHERE "
+		String countQuery = "SELECT  COUNT(*) FROM " + TABLE_BSSIDS + " WHERE "
 				+ KEY_BSSID + " = " + "'" + BSSID + "'";
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(countQuery, null);
-		int result = cursor.getCount();
+		cursor.moveToFirst();
+		int result = cursor.getInt(0);
 		cursor.close();
 		db.close();
 		return result;
 	}
 
 	public int numBssidSeen(String protocol, String BSSID) {
-		String countQuery = "SELECT  * FROM " + TABLE_ATTACK_INFO
+		String countQuery = "SELECT  COUNT(*) FROM " + TABLE_ATTACK_INFO
 				+ " JOIN " + TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + TABLE_ATTACK_INFO + "." +  KEY_PROTOCOL
 				+ " = " + "'" + protocol + "'" + " AND " + TABLE_BSSIDS+ "."+ KEY_BSSID + " = "
 				+ "'" + BSSID + "'";
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(countQuery, null);
-		int result = cursor.getCount();
+		cursor.moveToFirst();
+		int result = cursor.getInt(0);
 		cursor.close();
 		db.close();
 		return result;

+ 51 - 4
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -6,9 +6,11 @@ import android.app.ActivityManager;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
@@ -16,6 +18,7 @@ import android.content.res.TypedArray;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.view.MenuItem;
@@ -26,7 +29,10 @@ import android.widget.ListView;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 
+import de.tudarmstadt.informatik.hostage.HoneyHandler;
 import de.tudarmstadt.informatik.hostage.HoneyService;
 import de.tudarmstadt.informatik.hostage.R;
 import de.tudarmstadt.informatik.hostage.ui.LogFilter;
@@ -107,7 +113,9 @@ public class MainActivity extends Activity {
 
 	};
 
-	private boolean mInvalidMenuItem;
+	private boolean mInvalidMenuItem = false;
+
+	private HashMap<String, Boolean> mAttacksOnProtocol = new HashMap<String, Boolean>();
 
 	/**
 	 * Retrieve the singleton latest instance of the activity
@@ -126,6 +134,8 @@ public class MainActivity extends Activity {
 	public void onStart(){
 		super.onStart();
 
+		registerReceiver();
+
 		if(isServiceRunning()){
 			this.bindService();
 		}
@@ -208,6 +218,35 @@ public class MainActivity extends Activity {
 		}
 	}
 
+	private void registerReceiver() {
+		LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
+				new IntentFilter(getString(R.string.broadcast)));
+	}
+
+	private void unregisterReceiver() {
+		LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
+	}
+
+	private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			Bundle extras = intent.getExtras();
+
+			String sender = extras.getString("SENDER");
+			String[] values = extras.getStringArray("VALUES");
+
+			if(sender.equals(HoneyHandler.class.getName()) && values[0].equals(getString(R.string.broadcast_started))) {
+				mAttacksOnProtocol.put(values[1], true);
+			}
+		}
+	};
+
+	public boolean hasProtocolAttacks(String protocol){
+		if(!mAttacksOnProtocol.containsKey(protocol)) return false;
+
+		return mAttacksOnProtocol.get(protocol);
+	}
+
 	public void startAndBind() {
 		if(!isServiceRunning()){
 			startService(getServiceIntent());
@@ -225,17 +264,24 @@ public class MainActivity extends Activity {
 	}
 
 	public void unbindService() {
-		unbindService(mConnection);
-		//mServiceBound = false;
+		try {
+			unbindService(mConnection);
+		} catch(IllegalArgumentException ex){
+			// somehow already unbound.
+		}
 	}
 
 	public void bindService() {
+		mAttacksOnProtocol.clear();
 		bindService(getServiceIntent(), mConnection, BIND_AUTO_CREATE);
 		//mServiceBound = true;
 	}
 
 	@Override
 	protected void onDestroy() {
+		// Unregister Broadcast Receiver
+		unregisterReceiver();
+
 		// Unbind running service
 		if(!mHoneyService.hasRunningListeners()){
 			stopAndUnbind();
@@ -361,7 +407,8 @@ public class MainActivity extends Activity {
 	public void injectFragment(Fragment fragment, boolean enableBack){
 		injectFragment(fragment, enableBack, null);
 	}
-	public void injectFragment(Fragment fragment, boolean enableBack, Object tagObj){
+
+	private void injectFragment(Fragment fragment, boolean enableBack, Object tagObj){
 		if(enableBack){
 			mDrawerToggle.setDrawerIndicatorEnabled(false);
 		}

+ 0 - 2
src/de/tudarmstadt/informatik/hostage/ui2/adapter/ServicesListAdapter.java

@@ -88,8 +88,6 @@ public class ServicesListAdapter extends ArrayAdapter<ServicesListItem> {
 					new CompoundButton.OnCheckedChangeListener() {
 						public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
 							ServicesListItem item = (ServicesListItem) buttonView.getTag();
-									System.out
-											.println("Protokoll: " + item.protocol);
 				if(!HelperUtils.isWifiConnected(mActivity)){
 					new AlertDialog.Builder(mActivity)
 							.setTitle("Information")

+ 25 - 17
src/de/tudarmstadt/informatik/hostage/ui2/fragment/HomeFragment.java

@@ -55,6 +55,7 @@ public class HomeFragment extends Fragment {
 	private UglyDbHelper dbh;
 
 	private static ThreatIndicatorGLRenderer.ThreatLevel THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.NO_THREAT;
+	private boolean mReceiverRegistered;
 
 	private void assignViews() {
 		mHomeSwitchConnection = (Switch) rootView.findViewById(R.id.home_switch_connection);
@@ -68,14 +69,17 @@ public class HomeFragment extends Fragment {
 	}
 
 	private void registerBroadcastReceiver(){
-		mReceiver = new BroadcastReceiver() {
-			@Override
-			public void onReceive(Context context, Intent intent) {
-				updateUI();
-			}
-		};
+		if(!mReceiverRegistered) {
+			LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, new IntentFilter(getString(R.string.broadcast)));
+			this.mReceiverRegistered = true;
+		}
+	}
 
-		LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, new IntentFilter(getString(R.string.broadcast)));
+	private void unregisterBroadcastReceiver(){
+		if(mReceiverRegistered){
+			LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
+			this.mReceiverRegistered = false;
+		}
 	}
 
 	public HomeFragment(){}
@@ -148,21 +152,18 @@ public class HomeFragment extends Fragment {
 		}
 
 		boolean hasActiveListeners = false;
-		int totalAttacks = 0;
+		int totalAttacks = dbh.numBssidSeen(mConnectionInfo.getString(getString(R.string.connection_info_bssid), null));
 		int totalLogged = 0;
 
 		if(MainActivity.getInstance().isServiceBound()){
 			for(String protocol: getResources().getStringArray(R.array.protocols)){
 				if(MainActivity.getInstance().getHoneyService().isRunning(protocol)){
 					hasActiveListeners = true;
-					int attacks = MainActivity.getInstance().getHoneyService().getNumberOfActiveConnections(protocol);
-					totalAttacks += attacks;
 
-					if(attacks == 0){
-						int log_attacks = dbh.numBssidSeen(protocol, mConnectionInfo.getString(getString(R.string.connection_info_bssid), null));
-						totalLogged += log_attacks;
+					boolean attackRegistered = MainActivity.getInstance().hasProtocolAttacks(protocol);
 
-						if(log_attacks > 0){
+					if(!attackRegistered){
+						if(totalAttacks > 0){
 							if(THREAT_LEVEL != ThreatIndicatorGLRenderer.ThreatLevel.LIVE_THREAT){
 								THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.PAST_THREAT;
 							}
@@ -191,7 +192,7 @@ public class HomeFragment extends Fragment {
 					mHomeTextSecurity.setTextColor(getResources().getColor(R.color.holo_dark_green));
 					break;
 				case PAST_THREAT:
-					mHomeTextAttacks.setText(totalLogged + (totalLogged == 1 ? " attack" : " attacks") +  " logged");
+					mHomeTextAttacks.setText(totalAttacks + (totalAttacks == 1 ? " attack" : " attacks") +  " logged");
 					mHomeTextSecurity.setText("Insecure");
 					mHomeTextAttacks.setTextColor(getResources().getColor(R.color.holo_yellow));
 					mHomeTextSecurity.setTextColor(getResources().getColor(R.color.holo_yellow));
@@ -248,6 +249,12 @@ public class HomeFragment extends Fragment {
 	    setStateNotActive(true);
 	    setStateNotConnected();
 
+	    mReceiver = new BroadcastReceiver() {
+		    @Override
+		    public void onReceive(Context context, Intent intent) {
+			    updateUI();
+		    }
+	    };
 	    registerBroadcastReceiver();
 
 	    updateUI();
@@ -277,7 +284,7 @@ public class HomeFragment extends Fragment {
 				    } else {
 					    if(isChecked){
 						    for(String protocol: protocols){
-							    MainActivity.getInstance().getHoneyService().startListener(protocol);
+							    if(!MainActivity.getInstance().getHoneyService().isRunning(protocol)) MainActivity.getInstance().getHoneyService().startListener(protocol);
 						    }
 
 						    setStateActive();
@@ -304,9 +311,10 @@ public class HomeFragment extends Fragment {
         return rootView;
     }
 
+
 	@Override
 	public void onDestroy(){
+		unregisterBroadcastReceiver();
 		super.onDestroy();
-		LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
 	}
 }

+ 21 - 3
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ServicesFragment.java

@@ -89,7 +89,9 @@ public class ServicesFragment extends Fragment{
 
 				for(int i = 0; i < protocols.length; i++ ){
 					protocolList.get(i).attacks = String.valueOf(dbh.numBssidSeen(protocolList.get(i).protocol, mConnectionInfo.getString(getString(R.string.connection_info_bssid), null)));
-
+				}
+				if (!MainActivity.getInstance().getHoneyService().hasRunningListeners()) {
+					setStateNotActive();
 				}
 				adapter.notifyDataSetChanged();
 			}
@@ -125,9 +127,8 @@ public class ServicesFragment extends Fragment{
 		for(int i=0; i < protocols.length; i++){
 
 			protocolList.get(i).attacks = String.valueOf(dbh.numBssidSeen(protocolList.get(i).protocol, mConnectionInfo.getString(getString(R.string.connection_info_bssid), null)));
-			protocolList.get(i).initialValue = Integer.valueOf(protocolList.get(i).attacks);
+		//	protocolList.get(i).initialValue = Integer.valueOf(protocolList.get(i).attacks);
 		}
-
 		adapter = new ServicesListAdapter(getActivity().getBaseContext(), protocolList);
 		adapter.setActivity(this.getActivity(), this.mServicesSwitchService, this.switchChangeListener);
 		list.setAdapter(adapter);
@@ -181,6 +182,23 @@ public class ServicesFragment extends Fragment{
 
 	};
 
+	@Override
+	public void onStart(){
+		super.onStart();
+		registerBroadcastReceiver();
+	}
+
+	@Override
+	public void onStop(){
+		super.onStop();
+		unregisterBroadcastReceiver();
+
+	}
+
+	private void unregisterBroadcastReceiver(){
+		LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
+	}
+
 	private void setStateActive() {
 		mServicesSwitchService.setChecked(true);
 	}