Allow selection of enabled databases

This commit is contained in:
Tad 2017-12-26 16:03:00 -05:00
parent 58eaa3d7ab
commit 71883023e6
5 changed files with 78 additions and 20 deletions

View file

@ -6,8 +6,8 @@ android {
applicationId "us.spotco.malwarescanner" applicationId "us.spotco.malwarescanner"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 26 targetSdkVersion 26
versionCode 20 versionCode 21
versionName "1.9" versionName "2.0"
} }
buildTypes { buildTypes {
debug { debug {

View file

@ -1,6 +1,7 @@
package us.spotco.malwarescanner; package us.spotco.malwarescanner;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.widget.TextView; import android.widget.TextView;
@ -54,12 +55,12 @@ class Database {
signatureDatabases.clear(); signatureDatabases.clear();
SharedPreferences prefs = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
if (prefs.getBoolean("SIGNATURES_EXTENDED", false)) {
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/bofhland_malware_attach.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/bofhland_malware_attach.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/crdfam.clamav.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/crdfam.clamav.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/doppelstern.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/doppelstern.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/hackingteam.hsb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/hackingteam.hsb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/main.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/main.hsb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/malware.expert.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/malware.expert.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/malwarehash.hsb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/malwarehash.hsb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/porcupine.hsb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/porcupine.hsb"));
@ -72,6 +73,19 @@ class Database {
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/winnow_extended_malware.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/winnow_extended_malware.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/winnow_malware.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/winnow_malware.hdb"));
} }
if (prefs.getBoolean("SIGNATURES_CLAMAV-MAIN", false)) {
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/main.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/main.hsb"));
}
if (prefs.getBoolean("SIGNATURES_CLAMAV-DAILY", false)) {
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/daily.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/daily.hsb"));
}
if (prefs.getBoolean("SIGNATURES_CLAMAV-ANDROID", true)) {
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/Android.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/Android.hsb"));
}
}
public static void loadDatabase(Context context, boolean ignoreifLoaded, THashSet<SignatureDatabase> signatureDatabases) { public static void loadDatabase(Context context, boolean ignoreifLoaded, THashSet<SignatureDatabase> signatureDatabases) {
if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) { if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) {

View file

@ -1,7 +1,10 @@
package us.spotco.malwarescanner; package us.spotco.malwarescanner;
import android.Manifest; import android.Manifest;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
@ -85,12 +88,48 @@ public class MainActivity extends AppCompatActivity {
} }
} }
private void selectDatabases() {
final String[] databases = {"ClamAV: Android Only", "ClamAV: Main", "ClamAV: Daily (NOT RECOMMENDED)", "3rd Parties: Extended"};
final boolean[] databaseDefaults = {
prefs.getBoolean("SIGNATURES_CLAMAV-ANDROID", true),
prefs.getBoolean("SIGNATURES_CLAMAV-MAIN", false),
prefs.getBoolean("SIGNATURES_CLAMAV-DAILY", false),
prefs.getBoolean("SIGNATURES_EXTENDED", false)};
Dialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.lblSelectDatabasesTitle);
builder.setMultiChoiceItems(databases, databaseDefaults, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean selected) {
databaseDefaults[i] = selected;
}
});
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
prefs.edit().putBoolean("SIGNATURES_CLAMAV-ANDROID", databaseDefaults[0]).apply();
prefs.edit().putBoolean("SIGNATURES_CLAMAV-MAIN", databaseDefaults[1]).apply();
prefs.edit().putBoolean("SIGNATURES_CLAMAV-DAILY", databaseDefaults[2]).apply();
prefs.edit().putBoolean("SIGNATURES_EXTENDED", databaseDefaults[3]).apply();
updateDatabase();
}
});
dialog = builder.create();
dialog.show();
}
@Override @Override
public final boolean onOptionsItemSelected(MenuItem item) { public final boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.mnuUpdateDatabase: case R.id.mnuUpdateDatabase:
updateDatabase(); updateDatabase();
break; break;
case R.id.mnuSelectDatabases:
selectDatabases();
break;
case R.id.toggleRealtime: case R.id.toggleRealtime:
Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class); Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class);
if (!item.isChecked()) { if (!item.isChecked()) {

View file

@ -5,6 +5,9 @@
<item <item
android:id="@+id/mnuUpdateDatabase" android:id="@+id/mnuUpdateDatabase"
android:title="@string/lblUpdateDatabase" /> android:title="@string/lblUpdateDatabase" />
<item
android:id="@+id/mnuSelectDatabases"
android:title="@string/lblSelectDatabases" />
<item <item
android:id="@+id/toggleRealtime" android:id="@+id/toggleRealtime"
android:title="@string/lblRealtimeScannerToggle" android:title="@string/lblRealtimeScannerToggle"

View file

@ -1,6 +1,8 @@
<resources> <resources>
<string name="app_name">Theia</string> <string name="app_name">Theia</string>
<string name="lblUpdateDatabase">Update database</string> <string name="lblUpdateDatabase">Update databases</string>
<string name="lblSelectDatabases">Select databases</string>
<string name="lblSelectDatabasesTitle">Select databases to enable</string>
<string name="lblStartRealtime">Start realtime scanner</string> <string name="lblStartRealtime">Start realtime scanner</string>
<string name="lblScanSystem">Scan /system</string> <string name="lblScanSystem">Scan /system</string>
<string name="lblScanApps">Scan App APKs</string> <string name="lblScanApps">Scan App APKs</string>