Format with ktlint

master
Graham 5 years ago
parent 10052a7a08
commit e9a9a8f962
  1. 6
      asm/src/main/java/dev/openrs2/asm/MemberRef.kt
  2. 6
      asm/src/main/java/dev/openrs2/asm/MethodNodeUtils.kt
  3. 7
      asm/src/main/java/dev/openrs2/asm/StackMetadata.kt
  4. 3
      asm/src/main/java/dev/openrs2/asm/classpath/Library.kt
  5. 6
      asm/src/main/java/dev/openrs2/asm/remap/ClassForNameRemapper.kt
  6. 7
      bundler/src/main/java/dev/openrs2/bundler/Bundler.kt
  7. 6
      bundler/src/main/java/dev/openrs2/bundler/transform/HostCheckTransformer.kt
  8. 19
      bundler/src/main/java/dev/openrs2/bundler/transform/MacResizeTransformer.kt
  9. 7
      bundler/src/main/java/dev/openrs2/bundler/transform/RightClickTransformer.kt
  10. 3
      common/src/main/java/dev/openrs2/common/collect/ForestDisjointSet.kt
  11. 12
      deob-ast/src/main/java/dev/openrs2/deob/ast/AstDeobfuscator.kt
  12. 7
      deob-ast/src/main/java/dev/openrs2/deob/ast/util/ExprUtils.kt
  13. 15
      deob/src/main/java/dev/openrs2/deob/Deobfuscator.kt
  14. 6
      deob/src/main/java/dev/openrs2/deob/transform/BitwiseOpTransformer.kt
  15. 34
      deob/src/main/java/dev/openrs2/deob/transform/DummyArgTransformer.kt
  16. 15
      deob/src/main/java/dev/openrs2/deob/transform/ExceptionTracingTransformer.kt
  17. 17
      deob/src/main/java/dev/openrs2/deob/transform/OpaquePredicateTransformer.kt
  18. 8
      deob/src/main/java/dev/openrs2/deob/transform/ResetTransformer.kt
  19. 6
      deob/src/main/java/dev/openrs2/deob/transform/UnusedArgTransformer.kt

@ -1,6 +1,10 @@
package dev.openrs2.asm package dev.openrs2.asm
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.FieldInsnNode
import org.objectweb.asm.tree.FieldNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
data class MemberRef(val owner: String, val name: String, val desc: String) { data class MemberRef(val owner: String, val name: String, val desc: String) {
constructor(clazz: ClassNode, field: FieldNode) : this(clazz.name, field.name, field.desc) constructor(clazz: ClassNode, field: FieldNode) : this(clazz.name, field.name, field.desc)

@ -2,7 +2,11 @@ package dev.openrs2.asm
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.Type import org.objectweb.asm.Type
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.FrameNode
import org.objectweb.asm.tree.IincInsnNode
import org.objectweb.asm.tree.LabelNode
import org.objectweb.asm.tree.MethodNode
import org.objectweb.asm.tree.VarInsnNode
import org.objectweb.asm.tree.analysis.Analyzer import org.objectweb.asm.tree.analysis.Analyzer
import org.objectweb.asm.tree.analysis.BasicInterpreter import org.objectweb.asm.tree.analysis.BasicInterpreter
import org.objectweb.asm.tree.analysis.BasicValue import org.objectweb.asm.tree.analysis.BasicValue

@ -2,7 +2,12 @@ package dev.openrs2.asm
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.Type import org.objectweb.asm.Type
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.FieldInsnNode
import org.objectweb.asm.tree.InvokeDynamicInsnNode
import org.objectweb.asm.tree.LdcInsnNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MultiANewArrayInsnNode
data class StackMetadata(val pops: Int, val pushes: Int) data class StackMetadata(val pops: Int, val pushes: Int)

@ -16,7 +16,8 @@ import java.io.ByteArrayInputStream
import java.io.SequenceInputStream import java.io.SequenceInputStream
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import java.util.* import java.util.HashSet
import java.util.TreeMap
import java.util.jar.JarEntry import java.util.jar.JarEntry
import java.util.jar.JarInputStream import java.util.jar.JarInputStream
import java.util.jar.JarOutputStream import java.util.jar.JarOutputStream

@ -17,9 +17,9 @@ object ClassForNameRemapper {
} }
val invokestatic = match[1] as MethodInsnNode val invokestatic = match[1] as MethodInsnNode
return invokestatic.owner == "java/lang/Class" return invokestatic.owner == "java/lang/Class" &&
&& invokestatic.name == "forName" invokestatic.name == "forName" &&
&& invokestatic.desc == "(Ljava/lang/String;)Ljava/lang/Class;" invokestatic.desc == "(Ljava/lang/String;)Ljava/lang/Class;"
} }
fun remap(remapper: Remapper, method: MethodNode) { fun remap(remapper: Remapper, method: MethodNode) {

@ -1,6 +1,11 @@
package dev.openrs2.bundler package dev.openrs2.bundler
import dev.openrs2.bundler.transform.* import dev.openrs2.bundler.transform.BufferSizeTransformer
import dev.openrs2.bundler.transform.CachePathTransformer
import dev.openrs2.bundler.transform.HostCheckTransformer
import dev.openrs2.bundler.transform.LoadLibraryTransformer
import dev.openrs2.bundler.transform.MacResizeTransformer
import dev.openrs2.bundler.transform.RightClickTransformer
class Bundler { class Bundler {
companion object { companion object {

@ -36,7 +36,11 @@ class HostCheckTransformer : Transformer() {
} }
val insn3 = it[2] as MethodInsnNode val insn3 = it[2] as MethodInsnNode
if (insn3.owner != "java/lang/String" || insn3.name != "toLowerCase" || insn3.desc != "()Ljava/lang/String;") { if (
insn3.owner != "java/lang/String" ||
insn3.name != "toLowerCase" ||
insn3.desc != "()Ljava/lang/String;"
) {
return@forEach return@forEach
} }

@ -6,7 +6,12 @@ import dev.openrs2.asm.classpath.ClassPath
import dev.openrs2.asm.classpath.Library import dev.openrs2.asm.classpath.Library
import dev.openrs2.asm.transform.Transformer import dev.openrs2.asm.transform.Transformer
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.FieldInsnNode
import org.objectweb.asm.tree.JumpInsnNode
import org.objectweb.asm.tree.LdcInsnNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
class MacResizeTransformer : Transformer() { class MacResizeTransformer : Transformer() {
private var branchesRemoved = 0 private var branchesRemoved = 0
@ -18,7 +23,11 @@ class MacResizeTransformer : Transformer() {
override fun transformCode(classPath: ClassPath, library: Library, clazz: ClassNode, method: MethodNode): Boolean { override fun transformCode(classPath: ClassPath, library: Library, clazz: ClassNode, method: MethodNode): Boolean {
DETECT_MAC_MATCHER.match(method).forEach { DETECT_MAC_MATCHER.match(method).forEach {
val getstatic = it[0] as FieldInsnNode val getstatic = it[0] as FieldInsnNode
if (getstatic.owner == "loader" || getstatic.owner == clazz.name || getstatic.desc != "Ljava/lang/String;") { if (
getstatic.owner == "loader" ||
getstatic.owner == clazz.name ||
getstatic.desc != "Ljava/lang/String;"
) {
return@forEach return@forEach
} }
@ -28,7 +37,11 @@ class MacResizeTransformer : Transformer() {
} }
val invokevirtual = it[2] as MethodInsnNode val invokevirtual = it[2] as MethodInsnNode
if (invokevirtual.owner != "java/lang/String" || invokevirtual.name != "startsWith" || invokevirtual.desc != "(Ljava/lang/String;)Z") { if (
invokevirtual.owner != "java/lang/String" ||
invokevirtual.name != "startsWith" ||
invokevirtual.desc != "(Ljava/lang/String;)Z"
) {
return@forEach return@forEach
} }

@ -5,7 +5,12 @@ import dev.openrs2.asm.classpath.ClassPath
import dev.openrs2.asm.classpath.Library import dev.openrs2.asm.classpath.Library
import dev.openrs2.asm.transform.Transformer import dev.openrs2.asm.transform.Transformer
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.FieldInsnNode
import org.objectweb.asm.tree.InsnList
import org.objectweb.asm.tree.InsnNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
class RightClickTransformer : Transformer() { class RightClickTransformer : Transformer() {
private var metaDownCalls = 0 private var metaDownCalls = 0

@ -1,7 +1,6 @@
package dev.openrs2.common.collect package dev.openrs2.common.collect
import java.util.* import java.util.ArrayDeque
import kotlin.NoSuchElementException
class ForestDisjointSet<T> : DisjointSet<T> { class ForestDisjointSet<T> : DisjointSet<T> {
private class Node<T>(val value: T) : DisjointSet.Partition<T> { private class Node<T>(val value: T) : DisjointSet.Partition<T> {

@ -9,7 +9,17 @@ import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSol
import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver
import com.github.javaparser.utils.SourceRoot import com.github.javaparser.utils.SourceRoot
import dev.openrs2.deob.ast.transform.* 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.UnencloseTransformer
import dev.openrs2.deob.ast.transform.ValueOfTransformer
import java.nio.file.Path import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths
import java.util.function.Function import java.util.function.Function

@ -1,6 +1,11 @@
package dev.openrs2.deob.ast.util package dev.openrs2.deob.ast.util
import com.github.javaparser.ast.expr.* import com.github.javaparser.ast.expr.BinaryExpr
import com.github.javaparser.ast.expr.BooleanLiteralExpr
import com.github.javaparser.ast.expr.Expression
import com.github.javaparser.ast.expr.IntegerLiteralExpr
import com.github.javaparser.ast.expr.LongLiteralExpr
import com.github.javaparser.ast.expr.UnaryExpr
fun Expression.isIntegerOrLongLiteral(): Boolean { fun Expression.isIntegerOrLongLiteral(): Boolean {
return isIntegerLiteralExpr || isLongLiteralExpr return isIntegerLiteralExpr || isLongLiteralExpr

@ -8,7 +8,20 @@ import dev.openrs2.asm.classpath.Library.Companion.readPack
import dev.openrs2.bundler.Bundler import dev.openrs2.bundler.Bundler
import dev.openrs2.deob.SignedClassUtils.move import dev.openrs2.deob.SignedClassUtils.move
import dev.openrs2.deob.remap.PrefixRemapper.create import dev.openrs2.deob.remap.PrefixRemapper.create
import dev.openrs2.deob.transform.* import dev.openrs2.deob.transform.AccessTransformer
import dev.openrs2.deob.transform.BitShiftTransformer
import dev.openrs2.deob.transform.BitwiseOpTransformer
import dev.openrs2.deob.transform.CanvasTransformer
import dev.openrs2.deob.transform.CounterTransformer
import dev.openrs2.deob.transform.DummyArgTransformer
import dev.openrs2.deob.transform.DummyLocalTransformer
import dev.openrs2.deob.transform.ExceptionTracingTransformer
import dev.openrs2.deob.transform.FieldOrderTransformer
import dev.openrs2.deob.transform.OpaquePredicateTransformer
import dev.openrs2.deob.transform.OriginalNameTransformer
import dev.openrs2.deob.transform.RemapTransformer
import dev.openrs2.deob.transform.ResetTransformer
import dev.openrs2.deob.transform.UnusedArgTransformer
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths

@ -8,7 +8,11 @@ import dev.openrs2.asm.classpath.Library
import dev.openrs2.asm.hasCode import dev.openrs2.asm.hasCode
import dev.openrs2.asm.transform.Transformer import dev.openrs2.asm.transform.Transformer
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.InsnNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
import org.objectweb.asm.tree.VarInsnNode
import kotlin.streams.asSequence import kotlin.streams.asSequence
class BitwiseOpTransformer : Transformer() { class BitwiseOpTransformer : Transformer() {

@ -3,9 +3,17 @@ package dev.openrs2.deob.transform
import com.github.michaelbull.logging.InlineLogger import com.github.michaelbull.logging.InlineLogger
import com.google.common.collect.HashMultimap import com.google.common.collect.HashMultimap
import com.google.common.collect.Multimap import com.google.common.collect.Multimap
import dev.openrs2.asm.* import dev.openrs2.asm.InsnMatcher
import dev.openrs2.asm.MemberRef
import dev.openrs2.asm.classpath.ClassPath import dev.openrs2.asm.classpath.ClassPath
import dev.openrs2.asm.classpath.Library import dev.openrs2.asm.classpath.Library
import dev.openrs2.asm.createIntConstant
import dev.openrs2.asm.deleteSimpleExpression
import dev.openrs2.asm.intConstant
import dev.openrs2.asm.nextReal
import dev.openrs2.asm.pure
import dev.openrs2.asm.replaceSimpleExpression
import dev.openrs2.asm.stackMetadata
import dev.openrs2.asm.transform.Transformer import dev.openrs2.asm.transform.Transformer
import dev.openrs2.common.collect.DisjointSet import dev.openrs2.common.collect.DisjointSet
import dev.openrs2.deob.ArgRef import dev.openrs2.deob.ArgRef
@ -14,7 +22,12 @@ import dev.openrs2.deob.analysis.IntValue
import dev.openrs2.deob.analysis.SourcedIntValue import dev.openrs2.deob.analysis.SourcedIntValue
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.Type import org.objectweb.asm.Type
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.JumpInsnNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
import org.objectweb.asm.tree.VarInsnNode
import org.objectweb.asm.tree.analysis.Analyzer import org.objectweb.asm.tree.analysis.Analyzer
class DummyArgTransformer : Transformer() { class DummyArgTransformer : Transformer() {
@ -247,7 +260,8 @@ class DummyArgTransformer : Transformer() {
BranchResult.NEVER_TAKEN -> neverTakenBranches.add(insn as JumpInsnNode) BranchResult.NEVER_TAKEN -> neverTakenBranches.add(insn as JumpInsnNode)
} }
} }
Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE, Opcodes.IF_ICMPLT, Opcodes.IF_ICMPGE, Opcodes.IF_ICMPGT, Opcodes.IF_ICMPLE -> { Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE, Opcodes.IF_ICMPLT, Opcodes.IF_ICMPGE, Opcodes.IF_ICMPGT,
Opcodes.IF_ICMPLE -> {
val value1 = frame.getStack(stackSize - 2) val value1 = frame.getStack(stackSize - 2)
val value2 = frame.getStack(stackSize - 1) val value2 = frame.getStack(stackSize - 1)
if (value1 !is IntValue.Constant || value2 !is IntValue.Constant) { if (value1 !is IntValue.Constant || value2 !is IntValue.Constant) {
@ -340,8 +354,18 @@ class DummyArgTransformer : Transformer() {
companion object { companion object {
private val logger = InlineLogger() private val logger = InlineLogger()
private val CONDITIONAL_CALL_MATCHER = private val CONDITIONAL_CALL_MATCHER = InsnMatcher.compile(
InsnMatcher.compile("ILOAD (IFEQ | IFNE | (ICONST | BIPUSH | SIPUSH | LDC) (IF_ICMPEQ | IF_ICMPNE | IF_ICMPLT | IF_ICMPGE | IF_ICMPGT | IF_ICMPLE)) ALOAD? (ICONST | FCONST | DCONST | BIPUSH | SIPUSH | LDC | ACONST_NULL CHECKCAST)+ (INVOKEVIRTUAL | INVOKESTATIC | INVOKEINTERFACE)") """
ILOAD
(IFEQ | IFNE |
(ICONST | BIPUSH | SIPUSH | LDC)
(IF_ICMPEQ | IF_ICMPNE | IF_ICMPLT | IF_ICMPGE | IF_ICMPGT | IF_ICMPLE)
)
ALOAD?
(ICONST | FCONST | DCONST | BIPUSH | SIPUSH | LDC | ACONST_NULL CHECKCAST)+
(INVOKEVIRTUAL | INVOKESTATIC | INVOKEINTERFACE)
"""
)
private fun evaluateUnaryBranch(opcode: Int, values: Set<Int>): BranchResult { private fun evaluateUnaryBranch(opcode: Int, values: Set<Int>): BranchResult {
require(values.isNotEmpty()) require(values.isNotEmpty())

@ -41,7 +41,18 @@ class ExceptionTracingTransformer : Transformer() {
companion object { companion object {
private val logger = InlineLogger() private val logger = InlineLogger()
private val CATCH_MATCHER = private val CATCH_MATCHER = InsnMatcher.compile(
InsnMatcher.compile("ASTORE ALOAD (| LDC INVOKESTATIC | NEW DUP (LDC INVOKESPECIAL | INVOKESPECIAL LDC INVOKEVIRTUAL) ((ILOAD | LLOAD | FLOAD | DLOAD | (ALOAD IFNULL LDC GOTO LDC) | BIPUSH) INVOKEVIRTUAL)* INVOKEVIRTUAL INVOKESTATIC) ATHROW") """
ASTORE
ALOAD
(| LDC INVOKESTATIC |
NEW DUP
(LDC INVOKESPECIAL | INVOKESPECIAL LDC INVOKEVIRTUAL)
((ILOAD | LLOAD | FLOAD | DLOAD | (ALOAD IFNULL LDC GOTO LDC) | BIPUSH) INVOKEVIRTUAL)*
INVOKEVIRTUAL INVOKESTATIC
)
ATHROW
"""
)
} }
} }

@ -8,7 +8,12 @@ import dev.openrs2.asm.classpath.Library
import dev.openrs2.asm.hasCode import dev.openrs2.asm.hasCode
import dev.openrs2.asm.transform.Transformer import dev.openrs2.asm.transform.Transformer
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.FieldInsnNode
import org.objectweb.asm.tree.JumpInsnNode
import org.objectweb.asm.tree.MethodNode
import org.objectweb.asm.tree.VarInsnNode
class OpaquePredicateTransformer : Transformer() { class OpaquePredicateTransformer : Transformer() {
private val flowObstructors = mutableSetOf<MemberRef>() private val flowObstructors = mutableSetOf<MemberRef>()
@ -105,8 +110,14 @@ class OpaquePredicateTransformer : Transformer() {
companion object { companion object {
private val logger = InlineLogger() private val logger = InlineLogger()
private val FLOW_OBSTRUCTOR_INITIALIZER_MATCHER = private val FLOW_OBSTRUCTOR_INITIALIZER_MATCHER = InsnMatcher.compile(
InsnMatcher.compile("(GETSTATIC | ILOAD) IFEQ (((GETSTATIC ISTORE)? IINC ILOAD) | ((GETSTATIC | ILOAD) IFEQ ICONST GOTO ICONST)) PUTSTATIC") """
(GETSTATIC | ILOAD)
IFEQ
(((GETSTATIC ISTORE)? IINC ILOAD) | ((GETSTATIC | ILOAD) IFEQ ICONST GOTO ICONST))
PUTSTATIC
"""
)
private val OPAQUE_PREDICATE_MATCHER = InsnMatcher.compile("(GETSTATIC | ILOAD) (IFEQ | IFNE)") private val OPAQUE_PREDICATE_MATCHER = InsnMatcher.compile("(GETSTATIC | ILOAD) (IFEQ | IFNE)")
private val STORE_MATCHER = InsnMatcher.compile("GETSTATIC ISTORE") private val STORE_MATCHER = InsnMatcher.compile("GETSTATIC ISTORE")
} }

@ -9,7 +9,13 @@ import dev.openrs2.asm.nextReal
import dev.openrs2.asm.removeDeadCode import dev.openrs2.asm.removeDeadCode
import dev.openrs2.asm.transform.Transformer import dev.openrs2.asm.transform.Transformer
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.InsnNode
import org.objectweb.asm.tree.LdcInsnNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
import org.objectweb.asm.tree.VarInsnNode
class ResetTransformer : Transformer() { class ResetTransformer : Transformer() {
private val resetMethods = mutableSetOf<MemberRef>() private val resetMethods = mutableSetOf<MemberRef>()

@ -14,7 +14,11 @@ import dev.openrs2.deob.analysis.ConstSourceValue
import dev.openrs2.deob.remap.TypedRemapper import dev.openrs2.deob.remap.TypedRemapper
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.Type import org.objectweb.asm.Type
import org.objectweb.asm.tree.* import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.MethodInsnNode
import org.objectweb.asm.tree.MethodNode
import org.objectweb.asm.tree.VarInsnNode
import org.objectweb.asm.tree.analysis.Analyzer import org.objectweb.asm.tree.analysis.Analyzer
class UnusedArgTransformer : Transformer() { class UnusedArgTransformer : Transformer() {

Loading…
Cancel
Save