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" applicationId "us.spotco.malwarescanner"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 26 targetSdkVersion 26
versionCode 18 versionCode 19
versionName "1.9" versionName "1.9"
} }
buildTypes { buildTypes {

View file

@ -40,13 +40,14 @@ class Database {
return signaturesMD5.size() + signaturesSHA1.size() + signaturesSHA256.size(); 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) { for (SignatureDatabase signatureDatabase : signatureDatabases) {
new Downloader().execute(signatureDatabase.getUrl(), databasePath + "/" + signatureDatabase.getName()); 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 = new File(context.getFilesDir() + "/signatures/");
databasePath.mkdir(); databasePath.mkdir();

View file

@ -53,7 +53,6 @@ public class MainActivity extends AppCompatActivity {
logView.append("Powered by ClamAV signatures\n"); logView.append("Powered by ClamAV signatures\n");
logView.append("\nDisclaimer: This is an extremely basic signature scanner\n\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); malwareScanner = new MalwareScanner(this, this, true);
prefs = getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE); prefs = getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
@ -73,26 +72,6 @@ public class MainActivity extends AppCompatActivity {
requestPermissions(); 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 @Override
public final boolean onCreateOptionsMenu(Menu menu) { public final boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu); getMenuInflater().inflate(R.menu.menu_main, menu);
@ -110,10 +89,7 @@ public class MainActivity extends AppCompatActivity {
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:
Database.updateDatabase(Database.signatureDatabases); updateDatabase();
if (Database.isDatabaseLoaded()) {
Database.loadDatabase(getApplicationContext(), false, Database.signatureDatabases);
}
break; break;
case R.id.toggleRealtime: case R.id.toggleRealtime:
Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class); Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class);
@ -146,4 +122,32 @@ public class MainActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item); 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); publishProgress(filesToScan[0].size() + " files pending scan\n", true);
Database.loadDatabase(context, true, Database.signatureDatabases); Database.loadDatabase(context, true, Database.signatureDatabases);
if(Database.getSignatureCount() >= 0) {
publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true); publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true);
//Get file hashes //Get file hashes
@ -96,6 +97,9 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
System.gc(); System.gc();
Log.d("Thiea", "Scan completed in " + (SystemClock.elapsedRealtime() - scanTime) + " ms!"); Log.d("Thiea", "Scan completed in " + (SystemClock.elapsedRealtime() - scanTime) + " ms!");
publishProgress("Scan completed in " + ((SystemClock.elapsedRealtime() - scanTime) / 1000) + " seconds!\n\n\n\n", true); publishProgress("Scan completed in " + ((SystemClock.elapsedRealtime() - scanTime) / 1000) + " seconds!\n\n\n\n", true);
} else {
publishProgress("No database available, not scanning...", true);
}
return null; return null;
} }