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 <tad@spotco.us>
This commit is contained in:
Tad 2023-12-25 16:43:33 -05:00
parent 71cc9157a7
commit 72d1f97a96
No known key found for this signature in database
GPG key ID: B286E9F57A07424B
8 changed files with 43 additions and 7 deletions

View file

@ -6,8 +6,8 @@ android {
applicationId "us.spotco.malwarescanner" applicationId "us.spotco.malwarescanner"
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 32 targetSdkVersion 32
versionCode 120 versionCode 121
versionName "2.40" versionName "3.0"
resConfigs 'en', 'af', 'de', 'el', 'es', 'fi', 'fr', 'it', 'pl', 'pt', 'ru', 'tr', 'zh-rCN' resConfigs 'en', 'af', 'de', 'el', 'es', 'fi', 'fr', 'it', 'pl', 'pt', 'ru', 'tr', 'zh-rCN'
} }
buildTypes { buildTypes {

View file

@ -244,9 +244,12 @@ class Database {
public static boolean selfTest() { public static boolean selfTest() {
if (signaturesMD5 != null && signaturesSHA1 != null && signaturesSHA256 != null) { if (signaturesMD5 != null && signaturesSHA1 != null && signaturesSHA256 != null) {
return signaturesMD5.mightContain("903616d0dbe074aa363d2d49c03f7362") return signaturesMD5.mightContain("903616d0dbe074aa363d2d49c03f7362") //HypatiaHypatiaHypatia
&& signaturesSHA1.mightContain("fc4a3e802894cc2229be77ec6f082d1aab744e54") && signaturesMD5.mightContain("faf325d9d4b2a6c9457405eb31870b22") //HypatiaHypatiaHypatia-MD5
&& signaturesSHA256.mightContain("df44844a0e99ddd935e8419257440a2ca7ef3243435a67416fcbb6cd3ae560c3"); && signaturesSHA1.mightContain("fc4a3e802894cc2229be77ec6f082d1aab744e54") //HypatiaHypatiaHypatia
&& signaturesSHA1.mightContain("04445ab9332cdca0031184165eb88a0a9dcec4ed") //HypatiaHypatiaHypatia-SHA1
&& signaturesSHA256.mightContain("df44844a0e99ddd935e8419257440a2ca7ef3243435a67416fcbb6cd3ae560c3") //HypatiaHypatiaHypatia
&& signaturesSHA256.mightContain("3be403a831795482e82e2f9bc3e57ca34744aca3756e297b056b9f9c41830eaf"); //HypatiaHypatiaHypatia-SHA256
} }
return false; return false;
} }

View file

@ -228,6 +228,9 @@ public class MainActivity extends Activity {
scanExternal = !item.isChecked(); scanExternal = !item.isChecked();
item.setChecked(scanExternal); item.setChecked(scanExternal);
break; break;
case R.id.mnuSelfTestReal:
Utils.writeSelfTestFiles();
break;
case R.id.mnuFullCredits: case R.id.mnuFullCredits:
showCredits(); showCredits();
break; break;

View file

@ -88,7 +88,8 @@ class MalwareScanner extends AsyncTask<HashSet<File>, Object, String> {
new Notification.Builder(context.getApplicationContext()) new Notification.Builder(context.getApplicationContext())
.setSmallIcon(R.drawable.ic_notification) .setSmallIcon(R.drawable.ic_notification)
.setContentTitle(context.getText(R.string.lblNotificationRealtimeDetection) + " " + malwareDetect[0]) .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) .setOngoing(true)
.setPriority(Notification.PRIORITY_MAX) .setPriority(Notification.PRIORITY_MAX)
.setDefaults(Notification.DEFAULT_VIBRATE); .setDefaults(Notification.DEFAULT_VIBRATE);
@ -314,7 +315,7 @@ class MalwareScanner extends AsyncTask<HashSet<File>, Object, String> {
fis.close(); fis.close();
fileHashesMD5.put(file, String.format("%032x", new BigInteger(1, digestMD5.digest())).toLowerCase()); 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()); fileHashesSHA256.put(file, String.format("%064x", new BigInteger(1, digestSHA256.digest())).toLowerCase());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -25,10 +25,13 @@ import android.content.pm.PackageManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.os.Build; import android.os.Build;
import android.os.Environment;
import java.io.File; import java.io.File;
import java.io.PrintWriter;
import java.net.Socket; import java.net.Socket;
import java.util.HashSet; import java.util.HashSet;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
@ -188,4 +191,22 @@ class Utils {
public static void setContext(Context context) { public static void setContext(Context context) {
Utils.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();
}
}
} }

View file

@ -44,6 +44,9 @@
android:title="@string/lblScanExternal" android:title="@string/lblScanExternal"
android:checkable="true" android:checkable="true"
android:checked="false" /> android:checked="false" />
<item
android:id="@+id/mnuSelfTestReal"
android:title="@string/lblSelfTest" />
<item <item
android:id="@+id/mnuFullCredits" android:id="@+id/mnuFullCredits"
android:title="@string/lblFullCredits" /> android:title="@string/lblFullCredits" />

View file

@ -82,4 +82,5 @@
<string name="confirm_uninstall_title">Confirm uninstall</string> <string name="confirm_uninstall_title">Confirm uninstall</string>
<string name="confirm_uninstall_summary">Are you sure you want to uninstall the following app?</string> <string name="confirm_uninstall_summary">Are you sure you want to uninstall the following app?</string>
<string name="uninstallApp">Uninstall</string> <string name="uninstallApp">Uninstall</string>
<string name="lblSelfTest">Write self test files</string>
</resources> </resources>

View file

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