Skip to content

Commit ea04ffd

Browse files
committed
assets files - obfuscation working
1 parent 8cce130 commit ea04ffd

File tree

10 files changed

+125
-159
lines changed

10 files changed

+125
-159
lines changed

src/main/kotlin/StringCare.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,11 @@ open class StringCare : Plugin<Project> {
9595
PrintUtils.print(module, "$variant:$key")
9696
PrintUtils.print(module, backupStringRes)
9797
moduleMap[module]?.let { configuration ->
98-
backupFiles(absoluteProjectPath, configuration)
98+
backupResourceFiles(absoluteProjectPath, configuration)
9999
}
100100

101101
moduleMap[module]?.let { configuration ->
102-
val files = locateFiles(absoluteProjectPath, configuration)
102+
val files = locateResourceFiles(absoluteProjectPath, configuration)
103103
files.forEach { file ->
104104
modifyXML(file.file, extension.main_module, key, extension.debug,
105105
variantOrFlavor?.applicationId ?: ""
@@ -114,9 +114,9 @@ open class StringCare : Plugin<Project> {
114114
}
115115
PrintUtils.print(module, "$variant:$key")
116116
PrintUtils.print(module, backupStringRes)
117-
backupFiles(absoluteProjectPath, defaultConfiguration)
117+
backupResourceFiles(absoluteProjectPath, defaultConfiguration)
118118
PrintUtils.print(module, obfuscateStringRes)
119-
val files = locateFiles(absoluteProjectPath, defaultConfiguration)
119+
val files = locateResourceFiles(absoluteProjectPath, defaultConfiguration)
120120
files.forEach { file ->
121121
modifyXML(file.file, extension.main_module, key, extension.debug)
122122
}
@@ -132,7 +132,7 @@ open class StringCare : Plugin<Project> {
132132
if (variantOrFlavor != null && variantOrFlavor.skip) {
133133
return@ExecutionListener
134134
}
135-
restoreFiles(absoluteProjectPath, module)
135+
restoreResourceFiles(absoluteProjectPath, module)
136136
}
137137
))
138138
}

src/main/kotlin/components/AParser.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package components
22

33
import StringCare.*
44
import models.AssetsFile
5+
import models.ResourceFile
56
import java.io.File
67

78
fun locateAssetsFiles(projectPath: String, configuration: Configuration): List<AssetsFile> {
@@ -15,3 +16,36 @@ fun locateAssetsFiles(projectPath: String, configuration: Configuration): List<A
1516
it.assetsFile(configuration.normalize())!!
1617
}.toList()
1718
}
19+
20+
fun backupAssetsFiles(projectPath: String, configuration: Configuration): List<AssetsFile> {
21+
val files = locateAssetsFiles(projectPath, configuration.normalize())
22+
files.forEach { resource ->
23+
resource.backup()
24+
}
25+
return files
26+
}
27+
28+
fun restoreAssetsFiles(projectPath: String, module: String): List<File> {
29+
val resourceFiles = File("${StringCare.tempFolder}${File.separator}$module")
30+
.walkTopDown().toList().filter { file ->
31+
!file.isDirectory
32+
}.map {
33+
it.restore(projectPath)
34+
}
35+
StringCare.resetFolder()
36+
return resourceFiles
37+
}
38+
39+
fun obfuscateFile(mainModule: String, key: String, file: File, mockId: String = "") {
40+
val obfuscation = Stark.obfuscate(
41+
mainModule,
42+
key,
43+
file.readBytes(),
44+
mockId
45+
)
46+
file.writeBytes(obfuscation)
47+
}
48+
49+
fun revealFile(mainModule: String, key: String, file: File, mockId: String = "") {
50+
file.writeBytes(Stark.reveal(mainModule, key, file.readBytes(), mockId))
51+
}

src/main/kotlin/components/Extensions.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,18 @@ fun ResourceFile.backup(): File {
295295
return backupFile
296296
}
297297

298+
fun AssetsFile.backup(): File {
299+
val cleanPath =
300+
"${StringCare.tempFolder}${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split(
301+
this.sourceFolder
302+
)[1]}"
303+
.replace("${File.separator}${File.separator}", File.separator)
304+
305+
val backupFile = File(cleanPath)
306+
this.file.copyTo(backupFile, true)
307+
return backupFile
308+
}
309+
298310
fun File.restore(projectPath: String): File {
299311
val cleanPath = "$projectPath${File.separator}${this.absolutePath.split(StringCare.tempFolder)[1]}"
300312
.replace("${File.separator}${File.separator}", File.separator)

src/main/kotlin/components/Stark.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ open class Stark {
6969
external fun obfuscate(mainModule: String, key: String, value: ByteArray, mockId: String): ByteArray
7070

7171
@JvmStatic
72-
external fun reveal(mainModule: String, key: String, value: ByteArray): ByteArray
72+
external fun reveal(mainModule: String, key: String, value: ByteArray, mockId: String): ByteArray
7373
}
7474

7575
}

src/main/kotlin/components/XParser.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import models.SAttribute
66
import models.StringEntity
77
import java.io.File
88

9-
fun locateFiles(projectPath: String, configuration: Configuration): List<ResourceFile> {
9+
fun locateResourceFiles(projectPath: String, configuration: Configuration): List<ResourceFile> {
1010
if (configuration.debug) {
1111
println("== RESOURCE FILES FOUND ======================================")
1212
}
@@ -18,15 +18,15 @@ fun locateFiles(projectPath: String, configuration: Configuration): List<Resourc
1818
}.toList()
1919
}
2020

21-
fun backupFiles(projectPath: String, configuration: Configuration): List<ResourceFile> {
22-
val files = locateFiles(projectPath, configuration.normalize())
21+
fun backupResourceFiles(projectPath: String, configuration: Configuration): List<ResourceFile> {
22+
val files = locateResourceFiles(projectPath, configuration.normalize())
2323
files.forEach { resource ->
2424
resource.backup()
2525
}
2626
return files
2727
}
2828

29-
fun restoreFiles(projectPath: String, module: String): List<File> {
29+
fun restoreResourceFiles(projectPath: String, module: String): List<File> {
3030
val resourceFiles = File("${StringCare.tempFolder}${File.separator}$module")
3131
.walkTopDown().toList().filter { file ->
3232
!file.isDirectory
@@ -94,7 +94,7 @@ fun modifyXML(file: File, mainModule: String, key: String, debug: Boolean, mockI
9494
it.tag == "string" && it.index == i
9595
}
9696
entity?.let {
97-
node.textContent = obfuscate(mainModule, key, it, mockId).value
97+
node.textContent = obfuscateStringEntity(mainModule, key, it, mockId).value
9898
}
9999
}
100100

@@ -105,7 +105,7 @@ fun modifyXML(file: File, mainModule: String, key: String, debug: Boolean, mockI
105105
}
106106
}
107107

108-
fun obfuscate(mainModule: String, key: String, entity: StringEntity, mockId: String = ""): StringEntity {
108+
fun obfuscateStringEntity(mainModule: String, key: String, entity: StringEntity, mockId: String = ""): StringEntity {
109109
val obfuscation = Stark.obfuscate(
110110
mainModule, key, when (entity.androidTreatment) {
111111
true -> entity.value.androidTreatment()
@@ -116,9 +116,9 @@ fun obfuscate(mainModule: String, key: String, entity: StringEntity, mockId: Str
116116
return StringEntity(entity.name, entity.attributes, obfuscation, entity.tag, entity.index, entity.androidTreatment)
117117
}
118118

119-
fun reveal(mainModule: String, key: String, entity: StringEntity): StringEntity {
119+
fun revealStringEntity(mainModule: String, key: String, entity: StringEntity, mockId: String = ""): StringEntity {
120120
val arr: ByteArray = entity.value.split(", ").map { it.toInt().toByte() }.toByteArray()
121-
val original = String(Stark.reveal(mainModule, key, arr))
121+
val original = String(Stark.reveal(mainModule, key, arr, mockId))
122122
return StringEntity(entity.name, entity.attributes, original, entity.tag, entity.index, entity.androidTreatment)
123123
}
124124

0 Bytes
Binary file not shown.

src/main/kotlin/task/SCPreview.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package task
33
import StringCare.Companion.absoluteProjectPath
44
import StringCare.Companion.moduleMap
55
import components.getContent
6-
import components.locateFiles
6+
import components.locateResourceFiles
77
import components.parseXML
88
import org.gradle.api.DefaultTask
99
import org.gradle.api.tasks.TaskAction
@@ -16,7 +16,7 @@ open class SCPreview : DefaultTask() {
1616
println("Modules (${moduleMap.size})")
1717

1818
moduleMap.forEach { entry ->
19-
val files = locateFiles(absoluteProjectPath, entry.value)
19+
val files = locateResourceFiles(absoluteProjectPath, entry.value)
2020
println("Located files(${files.size}) for obfuscating")
2121
files.forEach { file ->
2222
println("- ${file.file.name}")

src/main/kotlin/task/SCTestObfuscation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ open class SCTestObfuscation : DefaultTask() {
3030
}
3131
println("fingerprint: $key")
3232
println("variant: ${variant ?: "debug"}")
33-
val filesToObfuscate = backupFiles(absoluteProjectPath, entry.value)
33+
val filesToObfuscate = backupResourceFiles(absoluteProjectPath, entry.value)
3434
filesToObfuscate.forEach { file ->
3535
val originalEntities = parseXML(file.file)
3636
println("============================")
@@ -51,7 +51,7 @@ open class SCTestObfuscation : DefaultTask() {
5151
println(file.file.getContent())
5252
println("============================")
5353
}
54-
restoreFiles(absoluteProjectPath, entry.value.name)
54+
restoreResourceFiles(absoluteProjectPath, entry.value.name)
5555
}
5656
println("== END OBFUSCATION ==================================")
5757

0 commit comments

Comments
 (0)