Open-source multiplayer game server compatible with the RuneScape client
https://www.openrs2.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
4.0 KiB
107 lines
4.0 KiB
package dev.openrs2.deob.ast
|
|
|
|
import com.github.javaparser.ParserConfiguration
|
|
import com.github.javaparser.ast.CompilationUnit
|
|
import com.github.javaparser.printer.PrettyPrinter
|
|
import com.github.javaparser.printer.PrettyPrinterConfiguration
|
|
import com.github.javaparser.symbolsolver.JavaSymbolSolver
|
|
import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver
|
|
import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver
|
|
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver
|
|
import com.github.javaparser.utils.SourceRoot
|
|
import dev.openrs2.deob.ast.transform.AddSubTransformer
|
|
import dev.openrs2.deob.ast.transform.BinaryExprOrderTransformer
|
|
import dev.openrs2.deob.ast.transform.BitMaskTransformer
|
|
import dev.openrs2.deob.ast.transform.ComplementTransformer
|
|
import dev.openrs2.deob.ast.transform.EncloseTransformer
|
|
import dev.openrs2.deob.ast.transform.ForLoopConditionTransformer
|
|
import dev.openrs2.deob.ast.transform.GlConstantTransformer
|
|
import dev.openrs2.deob.ast.transform.IdentityTransformer
|
|
import dev.openrs2.deob.ast.transform.IfElseTransformer
|
|
import dev.openrs2.deob.ast.transform.IncrementTransformer
|
|
import dev.openrs2.deob.ast.transform.NegativeLiteralTransformer
|
|
import dev.openrs2.deob.ast.transform.NewInstanceTransformer
|
|
import dev.openrs2.deob.ast.transform.TernaryTransformer
|
|
import dev.openrs2.deob.ast.transform.UnencloseTransformer
|
|
import dev.openrs2.deob.ast.transform.ValueOfTransformer
|
|
import java.nio.file.Path
|
|
import java.nio.file.Paths
|
|
import java.util.function.Function
|
|
|
|
fun main() {
|
|
val deobfuscator = AstDeobfuscator(
|
|
listOf(
|
|
Paths.get("nonfree/client/src/main/java"),
|
|
Paths.get("nonfree/gl/src/main/java"),
|
|
Paths.get("nonfree/gl-dri/src/main/java"),
|
|
Paths.get("nonfree/loader/src/main/java"),
|
|
Paths.get("nonfree/signlink/src/main/java"),
|
|
Paths.get("nonfree/unpack/src/main/java"),
|
|
Paths.get("nonfree/unpacker/src/main/java")
|
|
)
|
|
)
|
|
deobfuscator.run()
|
|
}
|
|
|
|
class AstDeobfuscator(private val modules: List<Path>) {
|
|
fun run() {
|
|
val solver = CombinedTypeSolver(ReflectionTypeSolver(true))
|
|
for (module in modules) {
|
|
solver.add(JavaParserTypeSolver(module))
|
|
}
|
|
|
|
val config = ParserConfiguration()
|
|
.setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8)
|
|
.setSymbolResolver(JavaSymbolSolver(solver))
|
|
|
|
val printerConfig = PrettyPrinterConfiguration()
|
|
.setIndentType(PrettyPrinterConfiguration.IndentType.TABS_WITH_SPACE_ALIGN)
|
|
.setIndentSize(1)
|
|
|
|
val printer = PrettyPrinter(printerConfig)
|
|
|
|
val roots = modules.map { SourceRoot(it, config) }
|
|
val units = mutableMapOf<String, CompilationUnit>()
|
|
|
|
for (root in roots) {
|
|
val results = root.tryToParseParallelized()
|
|
for (result in results) {
|
|
require(result.isSuccessful) { result }
|
|
}
|
|
|
|
for (unit in root.compilationUnits) {
|
|
val name = unit.primaryType.get().fullyQualifiedName.get()
|
|
units[name] = unit
|
|
}
|
|
}
|
|
|
|
for (transformer in TRANSFORMERS) {
|
|
transformer.transform(units)
|
|
}
|
|
|
|
for (root in roots) {
|
|
root.printer = Function(printer::print)
|
|
root.saveAll()
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
private val TRANSFORMERS = listOf(
|
|
UnencloseTransformer(),
|
|
NegativeLiteralTransformer(),
|
|
ComplementTransformer(),
|
|
IfElseTransformer(),
|
|
TernaryTransformer(),
|
|
BinaryExprOrderTransformer(),
|
|
AddSubTransformer(),
|
|
IdentityTransformer(),
|
|
BitMaskTransformer(),
|
|
ValueOfTransformer(),
|
|
NewInstanceTransformer(),
|
|
IncrementTransformer(),
|
|
ForLoopConditionTransformer(),
|
|
GlConstantTransformer(),
|
|
EncloseTransformer()
|
|
)
|
|
}
|
|
}
|
|
|