From 72d1f97a96dd357a7d13143d8f127094fe2424d6 Mon Sep 17 00:00:00 2001 From: Tad Date: Mon, 25 Dec 2023 16:43:33 -0500 Subject: [PATCH] More fixes - Fixup SHA1 hash calculation - Show full notification text when expanded - Make basic self test more robust - Add a self test option that actually writes files - Bump version to 3.0, since all previous versions are basically completely broken garbage Signed-off-by: Tad --- app/build.gradle | 4 ++-- .../us/spotco/malwarescanner/Database.java | 9 +++++--- .../spotco/malwarescanner/MainActivity.java | 3 +++ .../spotco/malwarescanner/MalwareScanner.java | 5 +++-- .../java/us/spotco/malwarescanner/Utils.java | 21 +++++++++++++++++++ app/src/main/res/menu/menu_main.xml | 3 +++ app/src/main/res/values/strings.xml | 1 + .../metadata/android/en-US/changelogs/121.txt | 4 ++++ 8 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/121.txt diff --git a/app/build.gradle b/app/build.gradle index 127ff2c..329b974 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "us.spotco.malwarescanner" minSdkVersion 19 targetSdkVersion 32 - versionCode 120 - versionName "2.40" + versionCode 121 + versionName "3.0" resConfigs 'en', 'af', 'de', 'el', 'es', 'fi', 'fr', 'it', 'pl', 'pt', 'ru', 'tr', 'zh-rCN' } buildTypes { diff --git a/app/src/main/java/us/spotco/malwarescanner/Database.java b/app/src/main/java/us/spotco/malwarescanner/Database.java index dd72bf3..ebab40a 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Database.java +++ b/app/src/main/java/us/spotco/malwarescanner/Database.java @@ -244,9 +244,12 @@ class Database { public static boolean selfTest() { if (signaturesMD5 != null && signaturesSHA1 != null && signaturesSHA256 != null) { - return signaturesMD5.mightContain("903616d0dbe074aa363d2d49c03f7362") - && signaturesSHA1.mightContain("fc4a3e802894cc2229be77ec6f082d1aab744e54") - && signaturesSHA256.mightContain("df44844a0e99ddd935e8419257440a2ca7ef3243435a67416fcbb6cd3ae560c3"); + return signaturesMD5.mightContain("903616d0dbe074aa363d2d49c03f7362") //HypatiaHypatiaHypatia + && signaturesMD5.mightContain("faf325d9d4b2a6c9457405eb31870b22") //HypatiaHypatiaHypatia-MD5 + && signaturesSHA1.mightContain("fc4a3e802894cc2229be77ec6f082d1aab744e54") //HypatiaHypatiaHypatia + && signaturesSHA1.mightContain("04445ab9332cdca0031184165eb88a0a9dcec4ed") //HypatiaHypatiaHypatia-SHA1 + && signaturesSHA256.mightContain("df44844a0e99ddd935e8419257440a2ca7ef3243435a67416fcbb6cd3ae560c3") //HypatiaHypatiaHypatia + && signaturesSHA256.mightContain("3be403a831795482e82e2f9bc3e57ca34744aca3756e297b056b9f9c41830eaf"); //HypatiaHypatiaHypatia-SHA256 } return false; } diff --git a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java index 20fd6cc..f2472f8 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java +++ b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java @@ -228,6 +228,9 @@ public class MainActivity extends Activity { scanExternal = !item.isChecked(); item.setChecked(scanExternal); break; + case R.id.mnuSelfTestReal: + Utils.writeSelfTestFiles(); + break; case R.id.mnuFullCredits: showCredits(); break; diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java index 3a34ab4..b4557f0 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java @@ -88,7 +88,8 @@ class MalwareScanner extends AsyncTask, Object, String> { new Notification.Builder(context.getApplicationContext()) .setSmallIcon(R.drawable.ic_notification) .setContentTitle(context.getText(R.string.lblNotificationRealtimeDetection) + " " + malwareDetect[0]) - .setContentText("File: >>>" + malwareDetect[1] + "<<<\nID: >>>" + hashsum.substring(0, 8) + "<<<") + .setContentText("File: >>>" + malwareDetect[1] + "<<<") + .setStyle(new Notification.BigTextStyle().bigText("File: >>>" + malwareDetect[1] + "<<<\nID: >>>" + hashsum.substring(0, 8) + "<<<")) .setOngoing(true) .setPriority(Notification.PRIORITY_MAX) .setDefaults(Notification.DEFAULT_VIBRATE); @@ -314,7 +315,7 @@ class MalwareScanner extends AsyncTask, Object, String> { fis.close(); fileHashesMD5.put(file, String.format("%032x", new BigInteger(1, digestMD5.digest())).toLowerCase()); - fileHashesSHA1.put(file, String.format("%032x", new BigInteger(1, digestSHA1.digest())).toLowerCase()); + fileHashesSHA1.put(file, String.format("%040x", new BigInteger(1, digestSHA1.digest())).toLowerCase()); fileHashesSHA256.put(file, String.format("%064x", new BigInteger(1, digestSHA256.digest())).toLowerCase()); } catch (Exception e) { e.printStackTrace(); diff --git a/app/src/main/java/us/spotco/malwarescanner/Utils.java b/app/src/main/java/us/spotco/malwarescanner/Utils.java index fa824da..4828844 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Utils.java +++ b/app/src/main/java/us/spotco/malwarescanner/Utils.java @@ -25,10 +25,13 @@ import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; +import android.os.Environment; import java.io.File; +import java.io.PrintWriter; import java.net.Socket; import java.util.HashSet; +import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -188,4 +191,22 @@ class Utils { public static void setContext(Context context) { Utils.context = context; } + + public static void writeSelfTestFiles() { + int rand = new Random().nextInt(); + writeStringToFile(new File(Environment.getExternalStorageDirectory() + "/Hypatia-MD5-Test-" + rand + ".txt"), "HypatiaHypatiaHypatia-MD5"); + writeStringToFile(new File(Environment.getExternalStorageDirectory() + "/Hypatia-SHA1-Test-" + rand + ".txt"), "HypatiaHypatiaHypatia-SHA1"); + writeStringToFile(new File(Environment.getExternalStorageDirectory() + "/Hypatia-SHA256-Test-" + rand + ".txt"), "HypatiaHypatiaHypatia-SHA256"); + } + + public static void writeStringToFile(File fileOut, String s) { + //Write the file + try { + PrintWriter writer = new PrintWriter(fileOut, "UTF-8"); + writer.print(s); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index d6768ad..5340992 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -44,6 +44,9 @@ android:title="@string/lblScanExternal" android:checkable="true" android:checked="false" /> + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index da9539e..6860d2c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,4 +82,5 @@ Confirm uninstall Are you sure you want to uninstall the following app? Uninstall + Write self test files diff --git a/fastlane/metadata/android/en-US/changelogs/121.txt b/fastlane/metadata/android/en-US/changelogs/121.txt new file mode 100644 index 0000000..23fe52f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/121.txt @@ -0,0 +1,4 @@ +* Fixup SHA1 hash calculation +* Show full notification text when expanded +* Make basic self test more robust +* Add a self test option that actually writes files