Convert AstDeobfuscator to Kotlin

pull/48/head
Graham 4 years ago
parent 6425a874fd
commit 9b81c813dd
  1. 98
      deob-ast/src/main/java/dev/openrs2/deob/ast/AstDeobfuscator.java
  2. 83
      deob-ast/src/main/java/dev/openrs2/deob/ast/AstDeobfuscator.kt

@ -1,98 +0,0 @@
package dev.openrs2.deob.ast;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.github.javaparser.ParserConfiguration;
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 com.google.common.collect.ImmutableList;
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.IfElseTransformer;
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.Transformer;
import dev.openrs2.deob.ast.transform.UnencloseTransformer;
import dev.openrs2.deob.ast.transform.ValueOfTransformer;
public final class AstDeobfuscator {
private static final ImmutableList<Transformer> TRANSFORMERS = ImmutableList.of(
new UnencloseTransformer(),
new NegativeLiteralTransformer(),
new ComplementTransformer(),
new IfElseTransformer(),
new TernaryTransformer(),
new BinaryExprOrderTransformer(),
new AddSubTransformer(),
new BitMaskTransformer(),
new ValueOfTransformer(),
new NewInstanceTransformer(),
new EncloseTransformer()
);
public static void main(String[] args) {
var deobfuscator = new AstDeobfuscator(ImmutableList.of(
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();
}
private final ImmutableList<Path> modules;
public AstDeobfuscator(ImmutableList<Path> modules) {
this.modules = modules;
}
public void run() {
var solver = new CombinedTypeSolver(new ReflectionTypeSolver(true));
for (var module : modules) {
solver.add(new JavaParserTypeSolver(module));
}
var config = new ParserConfiguration()
.setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8)
.setSymbolResolver(new JavaSymbolSolver(solver));
var printerConfig = new PrettyPrinterConfiguration()
.setIndentType(PrettyPrinterConfiguration.IndentType.TABS_WITH_SPACE_ALIGN)
.setIndentSize(1);
var printer = new PrettyPrinter(printerConfig);
for (var module : modules) {
var root = new SourceRoot(module, config);
var results = root.tryToParseParallelized();
for (var result : results) {
if (!result.isSuccessful()) {
throw new IllegalArgumentException(result.toString());
}
}
root.getCompilationUnits().forEach(unit -> {
TRANSFORMERS.forEach(transformer -> {
transformer.transform(unit);
});
});
root.setPrinter(printer::print);
root.saveAll();
}
}
}

@ -0,0 +1,83 @@
package dev.openrs2.deob.ast
import com.github.javaparser.ParserConfiguration
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.*
import java.nio.file.Path
import java.nio.file.Paths
import java.util.function.Function
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)
for (module in modules) {
val root = SourceRoot(module, config)
val results = root.tryToParseParallelized()
for (result in results) {
require(result.isSuccessful) { result }
}
root.compilationUnits.forEach { unit ->
TRANSFORMERS.forEach { transformer ->
transformer.transform(unit)
}
}
root.printer = Function(printer::print)
root.saveAll()
}
}
companion object {
private val TRANSFORMERS = listOf(
UnencloseTransformer(),
NegativeLiteralTransformer(),
ComplementTransformer(),
IfElseTransformer(),
TernaryTransformer(),
BinaryExprOrderTransformer(),
AddSubTransformer(),
BitMaskTransformer(),
ValueOfTransformer(),
NewInstanceTransformer(),
EncloseTransformer()
)
@JvmStatic
fun main(args: Array<String>) {
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()
}
}
}
Loading…
Cancel
Save