Use gzip databases instead for download and storage savings

This commit is contained in:
Tad 2018-10-21 15:36:36 -04:00
parent 6d01c4934d
commit 272a51304c
3 changed files with 66 additions and 36 deletions

BIN
.idea/caches/build_file_checksums.ser generated Normal file

Binary file not shown.

29
.idea/codeStyles/Project.xml generated Normal file
View file

@ -0,0 +1,29 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
</code_scheme>
</component>

View file

@ -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();
}
}
}