Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/src/main/java/us/spotco/malwarescanner/Database.kt
Original file line number Diff line number Diff line change
Expand Up @@ -420,13 +420,13 @@ internal class Database(log: TextView?) {
databaseLoading.close()
} else {
log(
"Failed to validate database, please double check signing key",
context.getString(R.string.main_database_validate_error),
LogType.WARNING
)
}
} catch (e: Exception) {
log(
"There was an error while checking database validation, please double check signing key",
context.getString(R.string.main_database_validate_error),
LogType.WARNING
)
e.printStackTrace()
Expand Down
21 changes: 9 additions & 12 deletions app/src/main/java/us/spotco/malwarescanner/LinkScannerService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import android.view.accessibility.AccessibilityNodeInfo
import android.widget.Toast
import androidx.core.app.NotificationCompat
import us.spotco.malwarescanner.HypatiaLogger.Companion.log
import us.spotco.malwarescanner.Utils.context
import java.util.Locale
import java.util.Random
import java.util.concurrent.ConcurrentSkipListMap
Expand All @@ -43,7 +42,7 @@ class LinkScannerService : AccessibilityService() {
private var foregroundNotification: NotificationCompat.Builder? = null

public override fun onServiceConnected() {
prefs = context?.getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE)
prefs = applicationContext?.getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE)
notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create Detection Channel
Expand Down Expand Up @@ -94,19 +93,20 @@ class LinkScannerService : AccessibilityService() {
}
}
if (shouldScanView) {
scannedPackages.put(packageName, System.currentTimeMillis())
scannedPackages[packageName] = System.currentTimeMillis()
val sourceCopy = event.source?.let {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
AccessibilityNodeInfo(it)
else
AccessibilityNodeInfo.obtain(it)
}
val thread = Thread { scanViews(sourceCopy) }
scannerThreads.put(packageName, thread)
scannerThreads[packageName] = thread
thread.start()
}
} else if (Database.domains != null) {
stopForegroundNotification()
}
stopForegroundNotification()
}

override fun onInterrupt() {
Expand All @@ -119,7 +119,6 @@ class LinkScannerService : AccessibilityService() {
getString(R.string.database_not_loaded_link_scanner),
Toast.LENGTH_LONG
).show()
log(getString(R.string.database_not_loaded_link_scanner) + "\n")
setForegroundNotification(getString(R.string.database_not_loaded_link_scanner))
}
}
Expand All @@ -132,10 +131,10 @@ class LinkScannerService : AccessibilityService() {
}

//Get and check the text
val text = mNodeInfo.getText() as String?
val text = mNodeInfo.text as String?
if (text != null && text.contains(".") && text.length < 10000) {
//Don't scan text if we already did
val hashDomain = mNodeInfo.getText().hashCode()
val hashDomain = mNodeInfo.text.hashCode()
if (scannedText.contains(hashDomain)) {
return
} else {
Expand Down Expand Up @@ -219,15 +218,13 @@ class LinkScannerService : AccessibilityService() {
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_MIN)
.setOngoing(true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
foregroundNotification?.setShowWhen(false)
}
foregroundNotification?.setShowWhen(false)

startForeground(-1, foregroundNotification?.build())
}

private fun stopForegroundNotification() {
if (!prefs!!.getBoolean("DOMAINS", false) && foregroundNotification != null) {
if (prefs?.getBoolean("DOMAINS", false) != true && foregroundNotification != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
stopForeground(STOP_FOREGROUND_REMOVE)
} else {
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/us/spotco/malwarescanner/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -224,13 +224,13 @@ class MainActivity : AppCompatActivity() {
val builderServerOverride = AlertDialog.Builder(this)
builderServerOverride.setTitle(getString(R.string.lblDatabaseServer))
val inputServerOverride = EditText(this)
inputServerOverride.setInputType(InputType.TYPE_CLASS_TEXT)
inputServerOverride.inputType = InputType.TYPE_CLASS_TEXT
inputServerOverride.setText(Utils.getDatabaseURL(this))
builderServerOverride.setView(inputServerOverride)
builderServerOverride.setPositiveButton(
getString(R.string.lblOverride)
) { dialog: DialogInterface?, which: Int ->
var newServer = inputServerOverride.getText().toString()
var newServer = inputServerOverride.text.toString()
if (!newServer.endsWith("/")) {
newServer += "/"
}
Expand Down Expand Up @@ -265,13 +265,13 @@ class MainActivity : AppCompatActivity() {
val builderKey = AlertDialog.Builder(this)
builderKey.setTitle(getString(R.string.lblSigningKey))
val inputKey = EditText(this)
inputKey.setInputType(InputType.TYPE_CLASS_TEXT)
inputKey.inputType = InputType.TYPE_CLASS_TEXT
inputKey.setText(Utils.getSigningKey(this))
builderKey.setView(inputKey)
builderKey.setPositiveButton(
getString(R.string.lblOverride)
) { dialog: DialogInterface?, which: Int ->
prefs!!.edit().putString("SIGNING_KEY", inputKey.getText().toString())
prefs!!.edit().putString("SIGNING_KEY", inputKey.text.toString())
.apply()
log(Utils.checkOldDatabase(this) + "\n")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ class NotificationPromptActivity : AppCompatActivity() {
"us.spotco.malwarescanner.DELETE_FILE" -> if (intent.getPackage() == null || intent.getPackage() == BuildConfig.APPLICATION_ID) {
val matched =
File(Objects.requireNonNull<String>(intent.getStringExtra("FILE_PATH")))
if (matched.exists() && matched.isFile()) {
if (matched.exists() && matched.isFile) {
val deleteDialog = AlertDialog.Builder(this)
.setTitle(R.string.confirm_delete_title)
.setMessage(getString(R.string.confirm_delete_summary) + "\n>>>" + matched.getName() + "<<<")
.setMessage(getString(R.string.confirm_delete_summary) + "\n>>>" + matched.name + "<<<")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(
android.R.string.yes
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/us/spotco/malwarescanner/ShareScanner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class ShareScanner : AppCompatActivity() {

log("Scanning file at: " + file.absolutePath, LogType.DEBUG)
malwareScanner!!.executeOnExecutor(Utils.threadPoolExecutor, filesToScan)
return "Scan started for: " + file.getName()
return "Scan started for: " + file.name
} catch (e: RuntimeException) {
Log.e("Hypatia", "Scan error: " + e.message)
return "Scanner Error: " + e.message
Expand Down
12 changes: 6 additions & 6 deletions app/src/main/java/us/spotco/malwarescanner/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,10 @@ internal object Utils {
var root = root
val filesAll = HashSet<File?>()
try {
root = root.getCanonicalFile()
root = root.canonicalFile
} catch (_: Exception) {
}
if (root.isFile()) {
if (root.isFile) {
if (root.canRead() && root.length() <= MAX_SCAN_SIZE) {
filesAll.add(root)
}
Expand All @@ -105,10 +105,10 @@ internal object Utils {
val files = root.listFiles()
if (files != null) {
for (f in files) {
if (f.isDirectory()) {
if (f.isDirectory) {
filesAll.addAll(getFilesRecursive(f))
} else {
if (f.isFile() && f.canRead() && f.length() <= MAX_SCAN_SIZE) { //Exclude files larger than limit for performance
if (f.isFile && f.canRead() && f.length() <= MAX_SCAN_SIZE) { //Exclude files larger than limit for performance
filesAll.add(f)
}
}
Expand All @@ -121,8 +121,8 @@ internal object Utils {
//Credit (CC BY-SA 3.0): https://stackoverflow.com/a/5921190
fun isServiceRunning(serviceClass: Class<*>, context: Context): Boolean {
val manager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
for (service in manager.getRunningServices(Int.Companion.MAX_VALUE)) {
if (serviceClass.getName() == service.service.className) {
for (service in manager.getRunningServices(Int.MAX_VALUE)) {
if (serviceClass.name == service.service.className) {
return true
}
}
Expand Down
16 changes: 12 additions & 4 deletions app/src/main/res/values-bg/strings.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_copyright">Copyright 2017–2024 Divested Computing Group</string>
<string name="app_copyright">Авторско право 2017–2024 Divested Computing Group\nАвторско право 2025 MaintainTeam Organization</string>
<string name="lblFullCredits">Кредити</string>
<string name="lblScanRemovable">Scan Removable Storage</string>
<string name="lblScanRemovable">Сканиране на сменяеми носители</string>
<string name="lblNotificationMalwareDetectionTitle">Откриване на зловреден софтуер</string>
<string name="lblNotificationRealtimeDetection">Открит зловреден софтуер:</string>
<string name="main_database_override">Използва се сървър %s</string>
<string name="main_hash_scan_done">Всички %s хешове бяха проверени спрямо бази данни със сигнатури</string>
<string name="main_scanning_done">Сканирането завърши за %s секунди @ %sMB/s!</string>
<string name="main_scanning_done">Сканирането завърши за %1$s секунди @ %2$sMB/s!</string>
<string name="main_files_scanned_count">Сканирани са %s файла</string>
<string name="self_test_result_success">Успешен самотест.</string>
<string name="lookupVT">Търсене</string>
Expand Down Expand Up @@ -59,7 +59,7 @@
<string name="lblDatabaseLoading">Пропускане на действие, базата данни се зарежда!</string>
<string name="accessibility_service_description">Извлича домейни от цялото текстово съдържание на екрана и ги проверява в списък за блокиране</string>
<string name="lblNoNetwork">Няма свързана мрежа!</string>
<string name="app_license">License: GPL-3.0</string>
<string name="app_license">Лиценз: GPL-3.0</string>
<string name="confirm_link_scanner_title">Активирай скенер на връзки?</string>
<string name="lblWroteTestFiles">Написах тестови файлове!</string>
<string name="confirm_lookup_title">Потвърди търсенето</string>
Expand All @@ -79,4 +79,12 @@
<string name="confirm_update_summary">Изглежда, че сте на ограничена връзка. Сигурни ли сте, че искате да актуализирате базите данни?\nМоже да изтегли до %s мегабайта данни.</string>
<string name="lblResetPrimary">Основни сървъри</string>
<string name="confirm_link_scanner_summary">[ЕКСПЕРИМЕНТАЛНО]\nТова ще изтегли допълнителна база данни с домейни.\nВсички домейни, намерени в съдържанието на екрана, ще бъдат проверени спрямо базата данни.\nТова изисква ръчно предоставяне на разрешение за услугата за достъпност.\nТова може да има значително въздействие върху производителността на екрани с големи количества текст.</string>
<string name="app_disclaimer">Това е само скенер за зловреден софтуер, който сравнява файлове с предварително открити хешове. Не е магическа пръчка, която да пази целия ви Android супер сигурен. Трябва да внимавате какво изтегляте/кликвате!</string>
<string name="lblResetGitHub">Огледало на GitHub</string>
<string name="cache_scan_result_deletion_warning">Тъй като това беше сканиране за споделяне, трябва ръчно да премахнете или поставите файла под карантина!</string>
<string name="see_notifications">Моля, вижте „Известия“ за управление на заразения файл.</string>
<string name="database_not_loaded_link_scanner">Няма заредена база данни. Моля, актуализирайте базите данни, за да използвате скенера за връзки.</string>
<string name="link_scanner_notification_text">Екранът ще бъде сканиран и злонамерени връзки ще бъдат открити в реално време</string>
<string name="link_scanner_notification_description">Използва се за показване на информация за сканиране на връзки.</string>
<string name="main_database_validate_error">Възникна грешка при валидирането на базата данни. Моля, проверете отново ключа за подписване и изтеглете отново</string>
</resources>
Loading