mirror of
https://github.com/MaintainTeam/Hypatia.git
synced 2025-03-01 13:58:21 +03:00
Fixes
This commit is contained in:
parent
e889bbce4a
commit
9d040c8b5b
4 changed files with 56 additions and 47 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,27 +75,31 @@ 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);
|
||||||
publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true);
|
if(Database.getSignatureCount() >= 0) {
|
||||||
|
publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true);
|
||||||
|
|
||||||
//Get file hashes
|
//Get file hashes
|
||||||
publishProgress("Hashing files...", true);
|
publishProgress("Hashing files...", true);
|
||||||
for (File file : filesToScan[0]) {
|
for (File file : filesToScan[0]) {
|
||||||
getFileHashes(file);
|
getFileHashes(file);
|
||||||
|
}
|
||||||
|
publishProgress("Calculated MD5/SHA-1/SHA-256 hashes for all files\n", true);
|
||||||
|
|
||||||
|
//Check the hashes
|
||||||
|
checkSignature("MD5", fileHashesMD5, Database.signaturesMD5);
|
||||||
|
checkSignature("SHA-1", fileHashesSHA1, Database.signaturesSHA1);
|
||||||
|
checkSignature("SHA-256", fileHashesSHA256, Database.signaturesSHA256);
|
||||||
|
|
||||||
|
//Post
|
||||||
|
fileHashesMD5.clear();
|
||||||
|
fileHashesSHA1.clear();
|
||||||
|
fileHashesSHA256.clear();
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
publishProgress("Calculated MD5/SHA-1/SHA-256 hashes for all files\n", true);
|
|
||||||
|
|
||||||
//Check the hashes
|
|
||||||
checkSignature("MD5", fileHashesMD5, Database.signaturesMD5);
|
|
||||||
checkSignature("SHA-1", fileHashesSHA1, Database.signaturesSHA1);
|
|
||||||
checkSignature("SHA-256", fileHashesSHA256, Database.signaturesSHA256);
|
|
||||||
|
|
||||||
//Post
|
|
||||||
fileHashesMD5.clear();
|
|
||||||
fileHashesSHA1.clear();
|
|
||||||
fileHashesSHA256.clear();
|
|
||||||
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);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue