refactor: split and simplify deobfuscator

This commit is contained in:
Skylot
2022-07-31 16:16:10 +01:00
parent bc7300bd01
commit d4927db52b
38 changed files with 899 additions and 1074 deletions
@@ -1,6 +1,8 @@
package jadx.plugins.script.runtime.data
import jadx.api.core.nodes.IRootNode
import jadx.core.dex.attributes.AFlag
import jadx.core.dex.attributes.IAttributeNode
import jadx.core.dex.nodes.IDexNode
import jadx.core.dex.nodes.RootNode
import jadx.plugins.script.runtime.JadxScriptInstance
@@ -20,29 +22,33 @@ class RenamePass(private val jadx: JadxScriptInstance) {
override fun init(root: IRootNode) {
val rootNode = root as RootNode
for (pkgNode in rootNode.packages) {
makeNewName.invoke(pkgNode.pkgInfo.name, pkgNode)?.let {
pkgNode.rename(it)
}
rename(makeNewName, pkgNode, pkgNode.pkgInfo.name)
}
for (cls in rootNode.classes) {
makeNewName.invoke(cls.classInfo.shortName, cls)?.let {
cls.classInfo.changeShortName(it)
}
rename(makeNewName, cls, cls.name)
for (mth in cls.methods) {
if (mth.isConstructor) {
continue
}
makeNewName.invoke(mth.name, mth)?.let {
mth.rename(it)
if (!mth.isConstructor) {
rename(makeNewName, mth, mth.name)
}
}
for (fld in cls.fields) {
makeNewName.invoke(fld.name, fld)?.let {
fld.fieldInfo.alias = it
}
rename(makeNewName, fld, fld.name)
}
}
}
private inline fun <T : IDexNode> rename(
makeNewName: (String, IDexNode) -> String?,
node: T,
name: String
) {
if (node is IAttributeNode && node.contains(AFlag.DONT_RENAME)) {
return
}
makeNewName.invoke(name, node)?.let {
node.rename(it)
}
}
})
}
}