diff --git a/.idea/dictionaries/tad.xml b/.idea/dictionaries/tad.xml new file mode 100644 index 0000000..f51229c --- /dev/null +++ b/.idea/dictionaries/tad.xml @@ -0,0 +1,11 @@ + + + + autostart + eicar + hypatia + malware + realtime + + + \ No newline at end of file diff --git a/app/src/main/java/us/spotco/malwarescanner/DatabaseManager.java b/app/src/main/java/us/spotco/malwarescanner/DatabaseManager.java index d9eadbe..c9e0c0d 100644 --- a/app/src/main/java/us/spotco/malwarescanner/DatabaseManager.java +++ b/app/src/main/java/us/spotco/malwarescanner/DatabaseManager.java @@ -34,7 +34,7 @@ public class DatabaseManager { public static File databasePath = null; public final static HashSet signatureDatabases = new HashSet<>(); - private Context context; + private static Context context; public DatabaseManager(Context context) { this.context = context; @@ -50,14 +50,14 @@ public class DatabaseManager { return new File(databasePath + "/" + name).exists(); } - public static void deteleDatabase(String name) { + public static void deleteDatabase(String name) { new File(databasePath + "/" + name).delete(); } public static void loadRemoteDatabases() { try { signatureDatabases.clear(); - String api = Utils.prefs.getString("database_repo", "https://spotco.us/MalwareScannerSignatures/api.php"); + String api = Utils.getPrefs(context).getString("database_repo", "https://spotco.us/MalwareScannerSignatures/api.php"); HttpURLConnection connection = Utils.getConnection(api); connection.connect(); int res = connection.getResponseCode(); @@ -97,7 +97,7 @@ public class DatabaseManager { loadDatabase(dbLocation); } } - Signatures.MD5.put("44d88612fea8a8f36de82e1278abb02f".substring(0, Utils.prefs.getInt("database_hash_length", 12)), "Eicar-Test-Signature"); + Signatures.MD5.put("44d88612fea8a8f36de82e1278abb02f".substring(0, Utils.getPrefs(context).getInt("database_hash_length", 12)), "Eicar-Test-Signature"); System.gc(); } } @@ -112,8 +112,8 @@ public class DatabaseManager { reader = new BufferedReader(new FileReader(database)); } String line; - boolean trim = Utils.prefs.getBoolean("database_trim_variants", false); - int maxLength = Utils.prefs.getInt("database_hash_length", 12); + boolean trim = Utils.getPrefs(context).getBoolean("database_trim_variants", false); + int maxLength = Utils.getPrefs(context).getInt("database_hash_length", 12); if (database.getName().contains(".hdb")) {//.hdb format: md5, size, name while ((line = reader.readLine()) != null) { diff --git a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java index ea7ec2e..cab3718 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java +++ b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java @@ -44,7 +44,7 @@ public class MainActivity extends FragmentActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); + BottomNavigationView navigation = findViewById(R.id.navigation); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); navigation.setItemIconTintList(null); @@ -70,7 +70,7 @@ public class MainActivity extends FragmentActivity { } } - private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener + private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java index 2537a42..e8d112c 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package us.spotco.malwarescanner; +import android.content.Context; import android.os.AsyncTask; import android.os.Environment; import android.os.SystemClock; @@ -32,16 +33,16 @@ import java.util.Set; class MalwareScanner extends AsyncTask, Object, String> { - private boolean userFacing = false; + private boolean userFacing; private long scanTime = 0; - private int hashMaxLength = 0; + private int hashMaxLength; private final HashMap fileHashesMD5 = new HashMap<>(); private final HashMap fileHashesSHA1 = new HashMap<>(); private final HashMap fileHashesSHA256 = new HashMap<>(); - public MalwareScanner(boolean userFacing) { + public MalwareScanner(Context context, boolean userFacing) { this.userFacing = userFacing; - hashMaxLength = Utils.prefs.getInt("database_hash_length", 12); + hashMaxLength = Utils.getPrefs(context).getInt("database_hash_length", 12); } private void returnResult(String result, boolean userFacingOnly) { diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java index e384013..646fb47 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java @@ -49,13 +49,13 @@ public class MalwareScannerService extends Service { @Override public final int onStartCommand(Intent intent, int flags, int startId) { - maxScanSize = Utils.prefs.getInt("scanner_max_file_size", (1000 * 1000) * 80) * (1000 * 1000); + maxScanSize = Utils.getPrefs(getApplicationContext()).getInt("scanner_max_file_size", (1000 * 1000) * 80) * (1000 * 1000); malwareMonitors.clear(); - if(Utils.prefs.getBoolean("scanner_realtime_path_external", false)) { + if (Utils.getPrefs(getApplicationContext()).getBoolean("scanner_realtime_path_external", false)) { addMalwareMonitor("/storage"); - } else if(Utils.prefs.getBoolean("scanner_realtime_path_internal", true)) { + } else if (Utils.getPrefs(getApplicationContext()).getBoolean("scanner_realtime_path_internal", true)) { addMalwareMonitor(Environment.getExternalStorageDirectory().toString()); } @@ -98,7 +98,7 @@ public class MalwareScannerService extends Service { if (file.exists() && /*file.length() > 0 &&*/ file.length() <= maxScanSize) { HashSet filesToScan = new HashSet<>(); filesToScan.add(file); - new MalwareScanner(false).executeOnExecutor(threadPoolExecutor, filesToScan); + new MalwareScanner(getApplicationContext(), false).executeOnExecutor(threadPoolExecutor, filesToScan); } updateForegroundNotification(); break; diff --git a/app/src/main/java/us/spotco/malwarescanner/SettingsFragment.java b/app/src/main/java/us/spotco/malwarescanner/SettingsFragment.java index 9c0132a..7c9d1b9 100644 --- a/app/src/main/java/us/spotco/malwarescanner/SettingsFragment.java +++ b/app/src/main/java/us/spotco/malwarescanner/SettingsFragment.java @@ -23,6 +23,7 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.preference.PreferenceFragmentCompat; +import android.util.Log; import android.widget.Toast; /** @@ -30,11 +31,6 @@ import android.widget.Toast; */ public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.fragment_settings, rootKey); @@ -43,13 +39,13 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared @Override public void onResume() { super.onResume(); - Utils.prefs.registerOnSharedPreferenceChangeListener(this); + getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { - Utils.prefs.unregisterOnSharedPreferenceChangeListener(this); + getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); super.onPause(); } @@ -67,10 +63,14 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared if (key.equals("scanner_realtime_enabled")) { if (prefs.getBoolean("scanner_realtime_enabled", false)) { Utils.considerStartService(getContext()); + Log.d("settings", "scanner true"); } else { Intent realtimeScanner = new Intent(getContext(), MalwareScannerService.class); getContext().stopService(realtimeScanner); + Log.d("settings", "scanner false"); + } } + Log.d("settings", key + " " + System.currentTimeMillis()); } } diff --git a/app/src/main/java/us/spotco/malwarescanner/Signatures.java b/app/src/main/java/us/spotco/malwarescanner/Signatures.java index 9429801..fd3eb80 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Signatures.java +++ b/app/src/main/java/us/spotco/malwarescanner/Signatures.java @@ -41,9 +41,9 @@ public class Signatures { public static class SignatureDatabase { - private String name = null; - private String url = null; - private boolean available = false; + private String name; + private String url; + private boolean available; public SignatureDatabase(String name, String url, boolean available) { this.name = name; diff --git a/app/src/main/java/us/spotco/malwarescanner/Utils.java b/app/src/main/java/us/spotco/malwarescanner/Utils.java index c30db8a..66e556b 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Utils.java +++ b/app/src/main/java/us/spotco/malwarescanner/Utils.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Build; +import android.util.Log; import java.io.File; import java.net.HttpURLConnection; @@ -37,10 +38,14 @@ import java.util.concurrent.ThreadPoolExecutor; public class Utils { public static int amtFilesScanned = 0; - public static SharedPreferences prefs = null; + private static Context context = null; public Utils(Context context) { - prefs = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE); + this.context = context; + } + + public static SharedPreferences getPrefs(Context context) { + return context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE); } private static ThreadPoolExecutor threadPoolExecutor = null; @@ -53,22 +58,21 @@ public class Utils { } public static int getMaxThreads() { - int maxTheads = Runtime.getRuntime().availableProcessors(); - if (maxTheads >= 2) { - maxTheads /= 2; + int maxThreads = Runtime.getRuntime().availableProcessors(); + if (maxThreads >= 2) { + maxThreads /= 2; } - return maxTheads; + return maxThreads; } - public static HashSet getFilesRecursive(File root) { - int maxScanSize = prefs.getInt("scanner_max_file_size", (1000 * 1000) * 80) * (1000 * 1000); + public static HashSet getFilesRecursive(File root, int maxScanSize) { HashSet filesAll = new HashSet<>(); File[] files = root.listFiles(); if (files != null && files.length > 0) { for (File f : files) { if (f.isDirectory()) { - HashSet filesTmp = getFilesRecursive(f); + HashSet filesTmp = getFilesRecursive(f, maxScanSize); if (filesTmp != null) { filesAll.addAll(filesTmp); } @@ -96,7 +100,8 @@ public class Utils { public static void considerStartService(Context context) { if (!isServiceRunning(MalwareScannerService.class, context)) { - boolean autostart = prefs.getBoolean("scanner_realtime_enabled", false); + boolean autostart = getPrefs(context).getBoolean("scanner_realtime_enabled", false); + Log.d("Utils", autostart + ""); if (autostart) { Intent realtimeScanner = new Intent(context, MalwareScannerService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -143,7 +148,7 @@ public class Utils { if (s != null) { try { s.close(); - } catch (Exception e1) { + } catch (Exception ignored) { } } } @@ -156,15 +161,14 @@ public class Utils { tries++; try { Thread.sleep(1000); - } catch (Exception e) { - + } catch (Exception ignored) { } } return listening; } public static boolean useTor() { - return prefs.getBoolean("network_use_tor", false); + return getPrefs(context).getBoolean("network_use_tor", false); } public static HttpURLConnection getConnection(String url) { diff --git a/app/src/main/res/xml/fragment_settings.xml b/app/src/main/res/xml/fragment_settings.xml index 2b82455..4d1f4dd 100644 --- a/app/src/main/res/xml/fragment_settings.xml +++ b/app/src/main/res/xml/fragment_settings.xml @@ -8,11 +8,11 @@ android:title="@string/settings_pref_scanner_realtime_enabled" android:summary="@string/settings_pref_scanner_realtime_enabled_summary" android:defaultValue="false" /> - + - + @@ -64,12 +64,12 @@ android:defaultValue="false" /> - + \ No newline at end of file