This commit is contained in:
Tad 2017-12-17 10:09:30 -05:00
parent e889bbce4a
commit 9d040c8b5b
4 changed files with 56 additions and 47 deletions

View file

@ -6,7 +6,7 @@ android {
applicationId "us.spotco.malwarescanner"
minSdkVersion 21
targetSdkVersion 26
versionCode 18
versionCode 19
versionName "1.9"
}
buildTypes {

View file

@ -40,13 +40,14 @@ class Database {
return signaturesMD5.size() + signaturesSHA1.size() + signaturesSHA256.size();
}
public static void updateDatabase(ArrayList<SignatureDatabase> signatureDatabases) {
public static void updateDatabase(Context context, ArrayList<SignatureDatabase> signatureDatabases) {
initDatabase(context);
for (SignatureDatabase signatureDatabase : signatureDatabases) {
new Downloader().execute(signatureDatabase.getUrl(), databasePath + "/" + signatureDatabase.getName());
}
}
public static void initDatabase(Context context) {
private static void initDatabase(Context context) {
databasePath = new File(context.getFilesDir() + "/signatures/");
databasePath.mkdir();

View file

@ -53,7 +53,6 @@ public class MainActivity extends AppCompatActivity {
logView.append("Powered by ClamAV signatures\n");
logView.append("\nDisclaimer: This is an extremely basic signature scanner\n\n");
final Database database = new Database(logView);
malwareScanner = new MalwareScanner(this, this, true);
prefs = getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
@ -73,26 +72,6 @@ public class MainActivity extends AppCompatActivity {
requestPermissions();
}
private void startScanner() {
malwareScanner = new MalwareScanner(this, this, true);
Set<File> filesToScan = new HashSet<>();
if (scanSystem) {
filesToScan.addAll(Utils.getFilesRecursive(Environment.getRootDirectory()));
}
if (scanApps) {
for (ApplicationInfo packageInfo : getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA)) {
filesToScan.add(new File(packageInfo.sourceDir));
}
}
if (scanInternal) {
filesToScan.addAll(Utils.getFilesRecursive(Environment.getExternalStorageDirectory()));
}
if (scanExternal) {
filesToScan.addAll(Utils.getFilesRecursive(new File("/storage")));
}
malwareScanner.execute(filesToScan);
}
@Override
public final boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
@ -110,10 +89,7 @@ public class MainActivity extends AppCompatActivity {
public final boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mnuUpdateDatabase:
Database.updateDatabase(Database.signatureDatabases);
if (Database.isDatabaseLoaded()) {
Database.loadDatabase(getApplicationContext(), false, Database.signatureDatabases);
}
updateDatabase();
break;
case R.id.toggleRealtime:
Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class);
@ -146,4 +122,32 @@ public class MainActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
private void startScanner() {
malwareScanner = new MalwareScanner(this, this, true);
Set<File> filesToScan = new HashSet<>();
if (scanSystem) {
filesToScan.addAll(Utils.getFilesRecursive(Environment.getRootDirectory()));
}
if (scanApps) {
for (ApplicationInfo packageInfo : getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA)) {
filesToScan.add(new File(packageInfo.sourceDir));
}
}
if (scanInternal) {
filesToScan.addAll(Utils.getFilesRecursive(Environment.getExternalStorageDirectory()));
}
if (scanExternal) {
filesToScan.addAll(Utils.getFilesRecursive(new File("/storage")));
}
malwareScanner.execute(filesToScan);
}
private void updateDatabase() {
new Database((TextView) findViewById(R.id.txtLogOutput));
Database.updateDatabase(this, Database.signatureDatabases);
if (Database.isDatabaseLoaded()) {
Database.loadDatabase(this, false, Database.signatureDatabases);
}
}
}

View file

@ -75,6 +75,7 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
publishProgress(filesToScan[0].size() + " files pending scan\n", true);
Database.loadDatabase(context, true, Database.signatureDatabases);
if(Database.getSignatureCount() >= 0) {
publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true);
//Get file hashes
@ -96,6 +97,9 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
System.gc();
Log.d("Thiea", "Scan completed in " + (SystemClock.elapsedRealtime() - scanTime) + " ms!");
publishProgress("Scan completed in " + ((SystemClock.elapsedRealtime() - scanTime) / 1000) + " seconds!\n\n\n\n", true);
} else {
publishProgress("No database available, not scanning...", true);
}
return null;
}