Persistence!

This commit is contained in:
Tad 2017-12-16 09:31:42 -05:00
parent a7b5c02b10
commit 0befda3456
7 changed files with 64 additions and 25 deletions

View file

@ -6,8 +6,8 @@ android {
applicationId "us.spotco.malwarescanner"
minSdkVersion 21
targetSdkVersion 26
versionCode 9
versionName "1.4" }
versionCode 10
versionName "1.5" }
buildTypes {
release {
minifyEnabled false

View file

@ -4,6 +4,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
@ -12,6 +13,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
@ -23,10 +25,26 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MalwareScannerService"
android:label="Theia Realtime Malware Scanner"
android:enabled="true"
android:exported="false"/>
android:exported="false">
</service>
<receiver
android:name=".BootReceiver"
android:label="Theia Persistence"
android:enabled="true"
android:exported="true">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
</application>
</manifest>

View file

@ -0,0 +1,23 @@
package us.spotco.malwarescanner;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
SharedPreferences prefs = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
boolean autostart = prefs.getBoolean("autostart", true);
if (autostart) {
Intent realtimeScanner = new Intent(context, MalwareScannerService.class);
context.startService(realtimeScanner);
}
}
}
}

View file

@ -2,7 +2,6 @@ package us.spotco.malwarescanner;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;
import java.io.BufferedReader;
@ -37,6 +36,10 @@ public class Database {
//signatureDatabases.add(new SignatureDatabase("http://cdn.malware.expert/malware.expert.hdb", "malware.expert.hdb"));
}
public static boolean areDatabasesAvailable() {
return databasePath.listFiles().length > 0;
}
public static boolean isDatabaseLoaded() {
return signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
}

View file

@ -4,6 +4,7 @@ import android.Manifest;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
@ -13,15 +14,12 @@ import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SwitchCompat;
import android.support.v7.widget.Toolbar;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
import java.io.File;
@ -30,6 +28,7 @@ import java.util.Set;
public class MainActivity extends AppCompatActivity {
private SharedPreferences prefs = null;
private boolean scanSystem = false;
private boolean scanApps = true;
private boolean scanInternal = true;
@ -56,6 +55,8 @@ public class MainActivity extends AppCompatActivity {
final Database database = new Database(this, logView);
final MalwareScanner malwareScanner = new MalwareScanner(this, this, true);
prefs = getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
@ -112,8 +113,10 @@ public class MainActivity extends AppCompatActivity {
Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class);
if (!item.isChecked()) {
startService(realtimeScanner);
prefs.edit().putBoolean("autostart", true).apply();
} else {
stopService(realtimeScanner);
prefs.edit().putBoolean("autostart", false).apply();
}
item.setChecked(!item.isChecked());
break;

View file

@ -7,7 +7,6 @@ import android.content.Context;
import android.os.AsyncTask;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.TextView;
import java.io.File;

View file

@ -9,8 +9,6 @@ import android.os.Environment;
import android.os.FileObserver;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
@ -28,7 +26,6 @@ public class MalwareScannerService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (true) {//Check if we're enabled
malwareMonitors = new ArrayList<>();
malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory().toString()));
malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory() + "/Documents"));
@ -37,12 +34,8 @@ public class MalwareScannerService extends Service {
for (MalwareMonitor malwareMonitor : malwareMonitors) {
malwareMonitor.startWatching();
}
Toast.makeText(this, "Theia: Realtime Scanning Started", Toast.LENGTH_SHORT).show();
//Toast.makeText(this, "Theia: Realtime Scanning Started", Toast.LENGTH_SHORT).show();
setForeground();
} else {
stopSelf();
}
return START_STICKY;
}
@ -51,7 +44,7 @@ public class MalwareScannerService extends Service {
for (MalwareMonitor malwareMonitor : malwareMonitors) {
malwareMonitor.stopWatching();
}
Toast.makeText(this, "Theia: Realtime Scanning Stopped", Toast.LENGTH_SHORT).show();
//Toast.makeText(this, "Theia: Realtime Scanning Stopped", Toast.LENGTH_SHORT).show();
}
private void setForeground() {