From fe49d06902fc8a09149c27174fb4b419b4bb2707 Mon Sep 17 00:00:00 2001 From: Tad Date: Fri, 10 Sep 2021 07:08:49 -0400 Subject: [PATCH] Invert the fileHashes* HashMaps This fixes scan detection of multiple files with the same hashes. Signed-off-by: Tad --- .idea/gradle.xml | 3 +-- .idea/misc.xml | 10 +++++++- .idea/runConfigurations.xml | 13 ----------- app/build.gradle | 2 +- .../spotco/malwarescanner/MalwareScanner.java | 23 +++++++++---------- 5 files changed, 22 insertions(+), 29 deletions(-) delete mode 100644 .idea/runConfigurations.xml diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 41871c2..4404972 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -5,7 +5,7 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 0401201..bf02b78 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,12 @@ + + + diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index e497da9..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 38c86c9..fab900c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { applicationId "us.spotco.malwarescanner" minSdkVersion 16 targetSdkVersion 29 - versionCode 74 + versionCode 75 versionName "2.21" resConfigs "en", "de", "es", "fr", "it", "pt", "ru" } diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java index b23d506..c60a39c 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java @@ -48,9 +48,9 @@ class MalwareScanner extends AsyncTask, Object, String> { private boolean userFacing = false; private NotificationManager notificationManager = null; private long scanStartTime = 0; - private final HashMap fileHashesMD5 = new HashMap<>(); - private final HashMap fileHashesSHA1 = new HashMap<>(); - private final HashMap fileHashesSHA256 = new HashMap<>(); + private final HashMap fileHashesMD5 = new HashMap<>(); + private final HashMap fileHashesSHA1 = new HashMap<>(); + private final HashMap fileHashesSHA256 = new HashMap<>(); public boolean running = false; public MalwareScanner(Activity activity, Context context, boolean userFacing) { @@ -191,13 +191,12 @@ class MalwareScanner extends AsyncTask, Object, String> { logResult((String) objects[0], (boolean) objects[1]); } - private void checkSignature(String hashType, HashMap signaturesToCheck, HashMap signatureDatabase) { - //XXX: TODO: This is a map with hash,file meaning multiple files with the same hashes will only match once! + private void checkSignature(String hashType, HashMap signaturesToCheck, HashMap signatureDatabase) { if (signatureDatabase.size() > 0) { - for (Map.Entry file : signaturesToCheck.entrySet()) { - if (signatureDatabase.containsKey(file.getKey())) { - String result = signatureDatabase.get(file.getKey()); - publishProgress(result + " in " + file.getValue().toString().replaceAll(Environment.getExternalStorageDirectory().toString(), "~"), false); + for (Map.Entry file : signaturesToCheck.entrySet()) { + if (signatureDatabase.containsKey(file.getValue())) { + String result = signatureDatabase.get(file.getValue()); + publishProgress(result + " in " + file.getKey().toString().replaceAll(Environment.getExternalStorageDirectory().toString(), "~"), false); } } publishProgress("\t" + context.getString(R.string.main_hash_scan_done, hashType) + "\n", true); @@ -228,9 +227,9 @@ class MalwareScanner extends AsyncTask, Object, String> { fis.close(); - fileHashesMD5.put(String.format("%032x", new BigInteger(1, digestMD5.digest())).substring(0, Utils.MAX_HASH_LENGTH), file); - fileHashesSHA1.put(String.format("%032x", new BigInteger(1, digestSHA1.digest())).substring(0, Utils.MAX_HASH_LENGTH), file); - fileHashesSHA256.put(String.format("%064x", new BigInteger(1, digestSHA256.digest())).substring(0, Utils.MAX_HASH_LENGTH), file); + fileHashesMD5.put(file, String.format("%032x", new BigInteger(1, digestMD5.digest())).substring(0, Utils.MAX_HASH_LENGTH)); + fileHashesSHA1.put(file, String.format("%032x", new BigInteger(1, digestSHA1.digest())).substring(0, Utils.MAX_HASH_LENGTH)); + fileHashesSHA256.put(file, String.format("%064x", new BigInteger(1, digestSHA256.digest())).substring(0, Utils.MAX_HASH_LENGTH)); } catch (Exception e) { e.printStackTrace(); }