From 272a51304c9a9b935f57503a9c85f9e18f333555 Mon Sep 17 00:00:00 2001 From: Tad Date: Sun, 21 Oct 2018 15:36:36 -0400 Subject: [PATCH] Use gzip databases instead for download and storage savings --- .idea/caches/build_file_checksums.ser | Bin 0 -> 644 bytes .idea/codeStyles/Project.xml | 29 +++++++ .../us/spotco/malwarescanner/Database.java | 73 +++++++++--------- 3 files changed, 66 insertions(+), 36 deletions(-) create mode 100644 .idea/caches/build_file_checksums.ser create mode 100644 .idea/codeStyles/Project.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000000000000000000000000000000000000..f9d3c4e136a859a4d45b981b39163f0d3e1fdadb GIT binary patch literal 644 zcmZ4UmVvdnh`~NNKUXg?FQq6yGexf?KR>5fFEb@IQ7^qHF(oHeub?PDD>b=9F91S2 zm1gFoxMk*~I%lLNXBU^|7Q2L-Ts|(GuF1r}nf0c10SfS*j=>Qz@ozPGTSN!DcFGPQ)k zLq9jKMBk+-vn*BDP~RoBEHx*;AU72#<^^)OBP7`3!}E)>iwhEyQ}x4Ai!w_Ri}e!= z3iOjeVFk0XkfDx&4P?oq6k%S`?spzcj?t4JOuhJ`gh3!DKRGc66w(E$MJ1W3#iek? zo0i3L3-0~6WJ2@=vFlnU3riSW$aN8R*EIeQ6kKdBv!!tJsmO*)I{YOJf{2L6aL$(A zIN@twJ08WJ2!7ytBXwN~gR*``er~FMNn(mV)TjD*^k0$fx!KRKiREPj=ZrT$oa!n7 DJV@h> literal 0 HcmV?d00001 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(); } } }