Invert the fileHashes* HashMaps

This fixes scan detection of multiple files with the same hashes.

Signed-off-by: Tad <tad@spotco.us>
This commit is contained in:
Tad 2021-09-10 07:08:49 -04:00
parent b90dbf1579
commit fe49d06902
5 changed files with 22 additions and 29 deletions

3
.idea/gradle.xml generated
View file

@ -5,7 +5,7 @@
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="delegatedBuild" value="false" />
<option name="testRunner" value="PLATFORM" />
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
@ -15,7 +15,6 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>

10
.idea/misc.xml generated
View file

@ -1,5 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="app/src/main/res/layout/activity_main.xml" value="0.9348958333333334" />
</map>
</option>
</component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
@ -26,7 +33,7 @@
</option>
<option name="myNotNulls">
<value>
<list size="14">
<list size="15">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
@ -41,6 +48,7 @@
<item index="11" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
<item index="12" class="java.lang.String" itemvalue="io.reactivex.annotations.NonNull" />
<item index="13" class="java.lang.String" itemvalue="io.reactivex.rxjava3.annotations.NonNull" />
<item index="14" class="java.lang.String" itemvalue="lombok.NonNull" />
</list>
</value>
</option>

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>

View file

@ -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"
}

View file

@ -48,9 +48,9 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
private boolean userFacing = false;
private NotificationManager notificationManager = null;
private long scanStartTime = 0;
private final HashMap<String, File> fileHashesMD5 = new HashMap<>();
private final HashMap<String, File> fileHashesSHA1 = new HashMap<>();
private final HashMap<String, File> fileHashesSHA256 = new HashMap<>();
private final HashMap<File, String> fileHashesMD5 = new HashMap<>();
private final HashMap<File, String> fileHashesSHA1 = new HashMap<>();
private final HashMap<File, String> fileHashesSHA256 = new HashMap<>();
public boolean running = false;
public MalwareScanner(Activity activity, Context context, boolean userFacing) {
@ -191,13 +191,12 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
logResult((String) objects[0], (boolean) objects[1]);
}
private void checkSignature(String hashType, HashMap<String, File> signaturesToCheck, HashMap<String, String> 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<File, String> signaturesToCheck, HashMap<String, String> signatureDatabase) {
if (signatureDatabase.size() > 0) {
for (Map.Entry<String, File> 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, String> 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<Set<File>, 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();
}