diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000..f9d3c4e Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/us/spotco/malwarescanner/Database.java b/app/src/main/java/us/spotco/malwarescanner/Database.java index dbb2514..1844da1 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Database.java +++ b/app/src/main/java/us/spotco/malwarescanner/Database.java @@ -24,14 +24,17 @@ import android.widget.TextView; import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; +import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.util.HashMap; import java.util.HashSet; +import java.util.zip.GZIPInputStream; class Database { @@ -79,33 +82,33 @@ class Database { prefs = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE); if (prefs.getBoolean("SIGNATURES_EXTENDED", false)) { - signatureDatabases.add(new SignatureDatabase(baseURL + "bofhland_malware_attach.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "crdfam.clamav.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "doppelstern.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "hackingteam.hsb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "malware.expert.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "malwarehash.hsb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "porcupine.hsb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "rfxn.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "rogue.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "spamattach.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "spamimg.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "winnow.attachments.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "winnow_bad_cw.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "winnow_extended_malware.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "winnow_malware.hdb")); + signatureDatabases.add(new SignatureDatabase(baseURL + "bofhland_malware_attach.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "crdfam.clamav.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "doppelstern.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "hackingteam.hsb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "malware.expert.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "malwarehash.hsb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "porcupine.hsb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "rfxn.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "rogue.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "spamattach.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "spamimg.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "winnow.attachments.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "winnow_bad_cw.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "winnow_extended_malware.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "winnow_malware.hdb.gz")); } if (prefs.getBoolean("SIGNATURES_CLAMAV-MAIN", false)) { - signatureDatabases.add(new SignatureDatabase(baseURL + "main.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "main.hsb")); + signatureDatabases.add(new SignatureDatabase(baseURL + "main.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "main.hsb.gz")); } if (prefs.getBoolean("SIGNATURES_CLAMAV-DAILY", false)) { - signatureDatabases.add(new SignatureDatabase(baseURL + "daily.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "daily.hsb")); + signatureDatabases.add(new SignatureDatabase(baseURL + "daily.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "daily.hsb.gz")); } if (prefs.getBoolean("SIGNATURES_CLAMAV-ANDROID", true)) { - signatureDatabases.add(new SignatureDatabase(baseURL + "Android.hdb")); - signatureDatabases.add(new SignatureDatabase(baseURL + "Android.hsb")); + signatureDatabases.add(new SignatureDatabase(baseURL + "Android.hdb.gz")); + signatureDatabases.add(new SignatureDatabase(baseURL + "Android.hsb.gz")); } } @@ -119,22 +122,20 @@ class Database { for (SignatureDatabase database : signatureDatabases) { File databaseLocation = new File(databasePath + "/" + database.getName()); if (databaseLocation.exists()) { - if (database.getName().contains(".hdb")) {//.hdb format: md5, size, name - try { - BufferedReader reader = new BufferedReader(new FileReader(databaseLocation)); - String line; + try { + BufferedReader reader; + if(databaseLocation.getName().endsWith(".gz")) { + reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(databaseLocation)))); + } else { + reader = new BufferedReader(new FileReader(databaseLocation)); + } + String line; + if (database.getName().contains(".hdb")) {//.hdb format: md5, size, name while ((line = reader.readLine()) != null) { String[] lineS = line.split(":"); signaturesMD5.put(lineS[0].substring(0, Utils.MAX_HASH_LENGTH), lineS[2]); } - reader.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } else if (database.getName().contains(".hsb")) {//.hsb format: sha256, size, name - try { - BufferedReader reader = new BufferedReader(new FileReader(databaseLocation)); - String line; + } else if (database.getName().contains(".hsb")) {//.hsb format: sha256, size, name while ((line = reader.readLine()) != null) { String[] lineS = line.split(":"); if (lineS[0].length() == 32) { @@ -143,10 +144,10 @@ class Database { signaturesSHA256.put(lineS[0].substring(0, Utils.MAX_HASH_LENGTH), lineS[2]); } } - reader.close(); - } catch (Exception e) { - e.printStackTrace(); } + reader.close(); + } catch(Exception e) { + e.printStackTrace(); } } }