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.
96 lines
3.3 KiB
96 lines
3.3 KiB
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.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 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();
|
|
}
|
|
}
|
|
}
|
|
|