Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SystemCleaner: Additional trash left behind by not so tidy apps #1511

Merged
merged 2 commits into from
Jan 30, 2025
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ import eu.darken.sdmse.common.debug.logging.logTag
import eu.darken.sdmse.common.files.APathLookup
import eu.darken.sdmse.common.files.GatewaySwitch
import eu.darken.sdmse.common.files.segs
import eu.darken.sdmse.common.files.toSegs
import eu.darken.sdmse.systemcleaner.core.SystemCleanerSettings
import eu.darken.sdmse.systemcleaner.core.filter.BaseSystemCleanerFilter
import eu.darken.sdmse.systemcleaner.core.filter.SystemCleanerFilter
import eu.darken.sdmse.systemcleaner.core.filter.toDeletion
import eu.darken.sdmse.systemcleaner.core.sieve.BaseSieve
import eu.darken.sdmse.systemcleaner.core.sieve.BaseSieve.*
import eu.darken.sdmse.systemcleaner.core.sieve.SegmentCriterium
import eu.darken.sdmse.systemcleaner.core.sieve.SegmentCriterium.Mode
import java.io.File
import javax.inject.Inject
import javax.inject.Provider
Expand All @@ -47,10 +49,11 @@ class AnalyticsFilter @Inject constructor(
)

private lateinit var sieve: BaseSieve
private lateinit var antiTrackingSieve: BaseSieve

override suspend fun initialize() {
val pathContains = setOf(
SegmentCriterium(segs(".bugsense"), mode = SegmentCriterium.Mode.Contain())
SegmentCriterium(segs(".bugsense"), mode = Mode.Contain())
)
val regexes = setOf(
Regex("^(?:[\\W\\w]+/\\.(?:bugsense))$".replace("/", "\\" + File.separator))
Expand All @@ -64,11 +67,45 @@ class AnalyticsFilter @Inject constructor(
)
sieve = baseSieveFactory.create(config)
log(TAG) { "initialized() with $config" }

val antiTracking = Config(
areaTypes = setOf(DataArea.Type.SDCARD, DataArea.Type.PUBLIC_DATA),
pfpCriteria = setOf(
SegmentCriterium(segs(".tlocalcookieid"), Mode.Equal()),
SegmentCriterium(segs(".INSTALLATION"), Mode.Equal()),
SegmentCriterium(segs(".wps_preloaded_2.txt"), Mode.Equal()),
SegmentCriterium(".UTSystemConfig/Global/Alvin2.xml".toSegs(), Mode.Equal()),
SegmentCriterium(".DataStorage/ContextData.xml".toSegs(), Mode.Equal()),
SegmentCriterium("com.snssdk.api.embed/cache/clientudid.dat".toSegs(), Mode.Equal()),
SegmentCriterium("Tencent/ams/cache/meta.dat".toSegs(), Mode.Equal()),
SegmentCriterium("com.tencent.ams/cache/meta.dat".toSegs(), Mode.Equal()),
SegmentCriterium("backups/.SystemConfig/.cuid".toSegs(), Mode.Equal()),
SegmentCriterium("backups/.SystemConfig/.cuid2".toSegs(), Mode.Equal()),
SegmentCriterium("backups/.adiu".toSegs(), Mode.Equal()),
SegmentCriterium("Mob/comm/dbs/.duid".toSegs(), Mode.Equal()),
SegmentCriterium(segs(".mn_1006862472"), Mode.Equal()),
SegmentCriterium(segs(".imei.txt"), Mode.Equal()),
SegmentCriterium(segs(".DC4278477faeb9.txt"), Mode.Equal()),
SegmentCriterium("Android/obj/.um/sysid.dat".toSegs(), Mode.Equal()),
SegmentCriterium(".um/sysid.dat".toSegs(), Mode.Equal()),
SegmentCriterium(".pns/.uniqueId".toSegs(), Mode.Ancestor()),
SegmentCriterium(segs(".oukdtft"), Mode.Equal()),
SegmentCriterium("libs/com.igexin.sdk.deviceId.db".toSegs(), Mode.Equal()),
SegmentCriterium("data/.push_deviceid".toSegs(), Mode.Equal()),
SegmentCriterium("msc/.2F6E2C5B63F0F83B".toSegs(), Mode.Equal()),
SegmentCriterium(".lm_device/.lm_device_id".toSegs(), Mode.Equal()),
SegmentCriterium("LMDevice/lm_device_id".toSegs(), Mode.Equal()),
),
)
antiTrackingSieve = baseSieveFactory.create(antiTracking)
log(TAG) { "initialized() anti tracking sieve with $antiTracking" }
}


override suspend fun match(item: APathLookup<*>): SystemCleanerFilter.Match? {
return sieve.match(item).toDeletion()
var match = antiTrackingSieve.match(item)
if (!match.matches) match = sieve.match(item)
return match.toDeletion()
}

override suspend fun process(matches: Collection<SystemCleanerFilter.Match>) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package eu.darken.sdmse.systemcleaner.core.filter.stock

import eu.darken.sdmse.common.areas.DataArea.Type
import eu.darken.sdmse.common.areas.DataArea.Type.*
import eu.darken.sdmse.common.areas.currentAreas
import eu.darken.sdmse.systemcleaner.core.filter.SystemCleanerFilterTest
import eu.darken.sdmse.systemcleaner.core.sieve.BaseSieve
Expand Down Expand Up @@ -30,7 +30,7 @@ class AnalyticsFilterTest : SystemCleanerFilterTest() {

@Test fun testFilter() = runTest {
mockDefaults()
val areas = setOf(Type.SDCARD, Type.PUBLIC_DATA)
val areas = setOf(SDCARD, PUBLIC_DATA)
areaManager.currentAreas()
.filter { areas.contains(it.type) }
.distinctBy { it.type }
Expand All @@ -39,6 +39,86 @@ class AnalyticsFilterTest : SystemCleanerFilterTest() {
neg(it.type, ".bugsense", Flag.Dir)
pos(it.type, ".bugsense", Flag.File)
}

neg(SDCARD, "tlocalcookieid", Flag.File)
pos(SDCARD, ".tlocalcookieid", Flag.File)
neg(SDCARD, "INSTALLATION", Flag.File)
pos(SDCARD, ".INSTALLATION", Flag.File)
neg(SDCARD, "wps_preloaded_2.txt", Flag.File)
pos(SDCARD, ".wps_preloaded_2.txt", Flag.File)

// https://www.usenix.org/conference/usenixsecurity24/presentation/dong-zikan
neg(SDCARD, ".UTSystemConfig", Flag.Dir)
neg(SDCARD, ".UTSystemConfig/Global", Flag.Dir)
pos(SDCARD, ".UTSystemConfig/Global/Alvin2.xml", Flag.File)

neg(SDCARD, ".DataStorage", Flag.Dir)
pos(SDCARD, ".DataStorage/ContextData.xml", Flag.File)

neg(PUBLIC_DATA, "com.snssdk.api.embed", Flag.Dir)
neg(PUBLIC_DATA, "com.snssdk.api.embed/cache", Flag.Dir)
pos(PUBLIC_DATA, "com.snssdk.api.embed/cache/clientudid.dat", Flag.File)

neg(SDCARD, "Tencent", Flag.Dir)
neg(SDCARD, "Tencent/ams", Flag.Dir)
neg(SDCARD, "Tencent/ams/cache", Flag.Dir)
pos(SDCARD, "Tencent/ams/cache/meta.dat", Flag.File)

neg(PUBLIC_DATA, "com.tencent.ams", Flag.Dir)
neg(PUBLIC_DATA, "com.tencent.ams/cache", Flag.Dir)
pos(PUBLIC_DATA, "com.tencent.ams/cache/meta.dat", Flag.File)

neg(SDCARD, "backups", Flag.Dir)
neg(SDCARD, "backups/.SystemConfig", Flag.Dir)
pos(SDCARD, "backups/.SystemConfig/.cuid", Flag.File)
pos(SDCARD, "backups/.SystemConfig/.cuid2", Flag.File)

pos(SDCARD, "backups/.adiu", Flag.File)

neg(SDCARD, "Mob", Flag.Dir)
neg(SDCARD, "Mob/comm", Flag.Dir)
neg(SDCARD, "Mob/comm/dbs", Flag.Dir)
pos(SDCARD, "Mob/comm/dbs/.duid", Flag.File)

neg(PUBLIC_DATA, ".mn", Flag.Dir)
pos(PUBLIC_DATA, ".mn_1006862472", Flag.File)

neg(SDCARD, "imei.txt", Flag.File)
pos(SDCARD, ".imei.txt", Flag.File)

neg(SDCARD, "DC4278477faeb9.txt", Flag.File)
pos(SDCARD, ".DC4278477faeb9.txt", Flag.File)

neg(SDCARD, "Android/obj", Flag.Dir)
neg(SDCARD, "Android/obj/.um", Flag.Dir)
pos(SDCARD, "Android/obj/.um/sysid.dat", Flag.File)

neg(PUBLIC_DATA, ".um", Flag.Dir)
neg(PUBLIC_DATA, ".um/sysid", Flag.Dir)
pos(PUBLIC_DATA, ".um/sysid.dat", Flag.File)

neg(SDCARD, ".pns", Flag.Dir)
neg(SDCARD, ".pns/.uniqueId", Flag.Dir)
pos(SDCARD, ".pns/.uniqueId/file", Flag.File)

neg(SDCARD, "oukdtft", Flag.Dir)
pos(SDCARD, ".oukdtft", Flag.Dir)

neg(SDCARD, "libs", Flag.Dir)
pos(SDCARD, "libs/com.igexin.sdk.deviceId.db", Flag.Dir)

neg(SDCARD, "data", Flag.Dir)
pos(SDCARD, "data/.push_deviceid", Flag.File)

neg(SDCARD, "msc", Flag.Dir)
pos(SDCARD, "msc/.2F6E2C5B63F0F83B", Flag.File)

neg(SDCARD, ".lm_device", Flag.Dir)
pos(SDCARD, ".lm_device/.lm_device_id", Flag.File)

neg(SDCARD, "LMDevice", Flag.Dir)
pos(SDCARD, "LMDevice/lm_device_id", Flag.File)

confirm(create())
}

Expand Down