Skip to content

Commit aaff183

Browse files
committed
Publish some transformers
1 parent 47d3327 commit aaff183

29 files changed

+1938
-174
lines changed

src/main/java/com/javadeobfuscator/deobfuscator/Deobfuscator.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ public Deobfuscator(Configuration configuration) {
7575
* Must enable for paramorphism obfuscated files.
7676
*/
7777
private static final boolean PARAMORPHISM = false;
78+
79+
public List<String> junkFiles = new ArrayList<>();
80+
81+
/**
82+
* Must enable for paramorphism v2 obfuscated files.
83+
*/
84+
private static final boolean PARAMORPHISM_V2 = false;
7885

7986
public ConstantPool getConstantPool(ClassNode classNode) {
8087
return this.constantPools.get(classNode);
@@ -168,7 +175,21 @@ private boolean isClassIgnored(ClassNode classNode) {
168175
}
169176

170177
private void loadInput() throws IOException {
171-
if(PARAMORPHISM)
178+
if(PARAMORPHISM_V2)
179+
{
180+
//Load folder "classes"
181+
try(ZipFile zipIn = new ZipFile(configuration.getInput())) {
182+
Enumeration<? extends ZipEntry> e = zipIn.entries();
183+
while(e.hasMoreElements()) {
184+
ZipEntry next = e.nextElement();
185+
if(next.isDirectory() && next.getName().endsWith(".class/")) {
186+
byte[] data = IOUtils.toByteArray(zipIn.getInputStream(next));
187+
loadInput(next.getName().substring(0, next.getName().length() - 1), data);
188+
}else if(!next.isDirectory() && next.getName().contains(".class/"))
189+
junkFiles.add(next.getName());
190+
}
191+
}
192+
}else if(PARAMORPHISM)
172193
{
173194
Map<String, String> classNameToName = new HashMap<>();
174195
Map<String, byte[]> entries = new HashMap<>();
@@ -255,13 +276,19 @@ public void loadInput(String name, byte[] data) {
255276
classpath.put(node.name, node);
256277
}
257278
} catch (IllegalArgumentException x) {
258-
logger.error("Could not parse {} (is it a class file?)", name, x);
279+
if(PARAMORPHISM_V2)
280+
invaildClasses.put(name, data);
281+
else
282+
logger.error("Could not parse {} (is it a class file?)", name, x);
259283
} catch (ArrayIndexOutOfBoundsException x) {
260-
logger.error("Could not parse {} (is it a class file?)", name, x);
284+
if(PARAMORPHISM_V2)
285+
invaildClasses.put(name, data);
286+
else
287+
logger.error("Could not parse {} (is it a class file?)", name, x);
261288
}
262289
}
263290

264-
if (passthrough) {
291+
if (passthrough && !junkFiles.contains(name)) {
265292
inputPassthrough.put(name, data);
266293
}
267294
}
@@ -316,11 +343,11 @@ public void start() throws Throwable {
316343
logger.info("\t{}", message);
317344
logger.info("Recommend transformers:");
318345

319-
Collection<Class<? extends Transformer>> recommended = rule.getRecommendTransformers();
346+
Collection<Class<? extends Transformer<?>>> recommended = rule.getRecommendTransformers();
320347
if (recommended == null) {
321348
logger.info("\tNone");
322349
} else {
323-
for (Class<? extends Transformer> transformer : recommended) {
350+
for (Class<? extends Transformer<?>> transformer : recommended) {
324351
logger.info("\t{}", transformer.getName());
325352
}
326353
}

src/main/java/com/javadeobfuscator/deobfuscator/executor/defined/types/JavaMethodHandle.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.javadeobfuscator.deobfuscator.executor.defined.types;
1818

19-
public class JavaMethodHandle {
19+
public class JavaMethodHandle extends JavaHandle {
2020
public final String clazz;
2121
public final String name;
2222
public final String desc;

src/main/java/com/javadeobfuscator/deobfuscator/executor/values/JavaValue.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,13 @@
2020

2121
import com.google.common.primitives.Primitives;
2222
import com.javadeobfuscator.deobfuscator.executor.MethodExecutor;
23-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaClass;
24-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaConstantPool;
25-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaConstructor;
26-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaField;
27-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaMethod;
28-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaMethodHandle;
29-
import com.javadeobfuscator.deobfuscator.executor.defined.types.JavaThread;
23+
import com.javadeobfuscator.deobfuscator.executor.defined.types.*;
3024
import com.javadeobfuscator.deobfuscator.executor.exceptions.ExecutionException;
3125

3226
public abstract class JavaValue {
33-
34-
public boolean booleanValue() {
35-
throw new ExecutionException(new UnsupportedOperationException());
27+
28+
public boolean booleanValue() {
29+
throw new ExecutionException(new UnsupportedOperationException());
3630
}
3731

3832
public int intValue() {
@@ -56,6 +50,9 @@ public Object value() {
5650
}
5751

5852
public <T> T as(Class<T> clazz) {
53+
//TODO: Fix this
54+
if(value() instanceof JavaValue)
55+
return ((JavaValue)value()).as(clazz);
5956
if (Primitives.unwrap(clazz) != clazz) {
6057
throw new ExecutionException("Cannot call as(Class<T> clazz) with a primitive class");
6158
}
@@ -88,7 +85,7 @@ else if(cst.getClass().isArray())
8885
return new JavaObject(cst, "java/lang/Object");
8986
else if(cst instanceof JavaThread)
9087
return new JavaObject(cst, "java/lang/Thread");
91-
else if(cst instanceof JavaMethodHandle)
88+
else if(cst instanceof JavaHandle)
9289
return new JavaObject(cst, "java/lang/invoke/MethodHandle");
9390
else if(cst instanceof JavaMethod)
9491
return new JavaObject(cst, "java/lang/reflect/Method");

src/main/java/com/javadeobfuscator/deobfuscator/rules/Rule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ public interface Rule extends Opcodes {
2727

2828
String test(Deobfuscator deobfuscator);
2929

30-
Collection<Class<? extends Transformer>> getRecommendTransformers();
30+
Collection<Class<? extends Transformer<?>>> getRecommendTransformers();
3131
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/classguard/RuleClassGuardPackage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public String test(Deobfuscator deobfuscator) {
4141
}
4242

4343
@Override
44-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
44+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
4545
return Collections.singletonList(EncryptionTransformer.class);
4646
}
4747
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/classguard/RuleEncryptedClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public String test(Deobfuscator deobfuscator) {
4141
}
4242

4343
@Override
44-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
44+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
4545
return Collections.singletonList(EncryptionTransformer.class);
4646
}
4747
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/dasho/RuleStringDecryptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public String test(Deobfuscator deobfuscator) {
5959
}
6060

6161
@Override
62-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
62+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6363
return Collections.singleton(StringEncryptionTransformer.class);
6464
}
6565
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/generic/RuleIllegalSignature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public String test(Deobfuscator deobfuscator) {
6464
}
6565

6666
@Override
67-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
67+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6868
return Collections.singletonList(IllegalSignatureRemover.class);
6969
}
7070
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/normalizer/RuleSourceFileAttribute.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public String test(Deobfuscator deobfuscator) {
6666
}
6767

6868
@Override
69-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
69+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
7070
return Collections.singletonList(SourceFileClassNormalizer.class);
7171
}
7272
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/stringer/RuleInvokedynamic1.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public String test(Deobfuscator deobfuscator) {
6363
}
6464

6565
@Override
66-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
66+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6767
return Collections.singletonList(Invokedynamic1Transformer.class);
6868
}
6969
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/stringer/RuleInvokedynamic2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public String test(Deobfuscator deobfuscator) {
6464
}
6565

6666
@Override
67-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
67+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6868
return Collections.singletonList(Invokedynamic2Transformer.class);
6969
}
7070
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/stringer/RuleStringDecryptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public String test(Deobfuscator deobfuscator) {
5959
}
6060

6161
@Override
62-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
62+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6363
return Collections.singletonList(StringEncryptionTransformer.class);
6464
}
6565
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/stringer/RuleStringDecryptorV3.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public String test(Deobfuscator deobfuscator) {
6060
}
6161

6262
@Override
63-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
63+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6464
return Collections.singleton(StringEncryptionTransformer.class);
6565
}
6666
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/stringer/RuleStringDecryptorWithThread.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public String test(Deobfuscator deobfuscator) {
6060
}
6161

6262
@Override
63-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
63+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6464
return Collections.singletonList(StringEncryptionTransformer.class);
6565
}
6666
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/zelix/RuleEnhancedStringEncryption.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public String test(Deobfuscator deobfuscator) {
7272
}
7373

7474
@Override
75-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
75+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
7676
return Collections.singletonList(EnhancedStringEncryptionTransformer.class);
7777
}
7878
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/zelix/RuleMethodParameterChangeStringEncryption.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public String test(Deobfuscator deobfuscator) {
7474
}
7575

7676
@Override
77-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
77+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
7878
return null;
7979
}
8080
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/zelix/RuleReflectionDecryptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public String test(Deobfuscator deobfuscator) {
5858
}
5959

6060
@Override
61-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
61+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6262
return Collections.singletonList(ReflectionObfuscationTransformer.class);
6363
}
6464
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/zelix/RuleSimpleStringEncryption.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public String test(Deobfuscator deobfuscator) {
4242
}
4343

4444
@Override
45-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
45+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
4646
return Collections.singletonList(SimpleStringEncryptionTransformer.class);
4747
}
4848
}

src/main/java/com/javadeobfuscator/deobfuscator/rules/zelix/RuleSuspiciousClinit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public String test(Deobfuscator deobfuscator) {
5757
}
5858

5959
@Override
60-
public Collection<Class<? extends Transformer>> getRecommendTransformers() {
60+
public Collection<Class<? extends Transformer<?>>> getRecommendTransformers() {
6161
return null;
6262
}
6363
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.javadeobfuscator.deobfuscator.transformers.dasho;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashSet;
5+
import java.util.List;
6+
import java.util.Set;
7+
import java.util.concurrent.atomic.AtomicInteger;
8+
9+
import org.objectweb.asm.tree.ClassNode;
10+
import org.objectweb.asm.tree.TryCatchBlockNode;
11+
12+
import com.javadeobfuscator.deobfuscator.config.TransformerConfig;
13+
import com.javadeobfuscator.deobfuscator.transformers.Transformer;
14+
import com.javadeobfuscator.deobfuscator.utils.Utils;
15+
16+
public class FakeExceptionTransformer extends Transformer<TransformerConfig>
17+
{
18+
@Override
19+
public boolean transform() throws Throwable {
20+
System.out.println("[DashO] [FakeExceptionTransformer] Starting");
21+
AtomicInteger counter = new AtomicInteger();
22+
Set<String> fakeExceptionClass = new HashSet<>();
23+
24+
classNodes().forEach(classNode -> {
25+
classNode.methods.stream().filter(Utils::notAbstractOrNative).forEach(methodNode -> {
26+
List<TryCatchBlockNode> remove = new ArrayList<>();
27+
for(TryCatchBlockNode tcbn : methodNode.tryCatchBlocks)
28+
{
29+
String handler = tcbn.type;
30+
if(handler != null && classes.containsKey(handler))
31+
{
32+
ClassNode handlerClass = classes.get(handler);
33+
if(handlerClass.methods.size() == 0 && handlerClass.superName.equals("java/lang/RuntimeException"))
34+
{
35+
remove.add(tcbn);
36+
fakeExceptionClass.add(handler);
37+
counter.incrementAndGet();
38+
}
39+
}
40+
}
41+
methodNode.tryCatchBlocks.removeIf(remove::contains);
42+
});
43+
});
44+
45+
fakeExceptionClass.forEach(str -> {
46+
classes.remove(str);
47+
classpath.remove(str);
48+
});
49+
50+
System.out.println("[DashO] [FakeExceptionTransformer] Removed " + counter.get() + " fake try-catch blocks");
51+
System.out.println("[DashO] [FakeExceptionTransformer] Removed " + fakeExceptionClass.size() + " fake exception classes");
52+
System.out.println("[DashO] [FakeExceptionTransformer] Done");
53+
return counter.get() > 0;
54+
}
55+
}

0 commit comments

Comments
 (0)