Skip to content

Commit 4f28211

Browse files
committed
Added phantom generation for automatic dependency complementation
1 parent b5164ab commit 4f28211

17 files changed

+1637
-10
lines changed

dev.skidfuscator.obfuscator/dependency-reduced-pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
</plugin>
3434
</plugins>
3535
</build>
36+
<repositories>
37+
<repository>
38+
<id>jitpack.io</id>
39+
<url>https://jitpack.io</url>
40+
</repository>
41+
</repositories>
3642
<dependencies>
3743
<dependency>
3844
<groupId>org.projectlombok</groupId>

dev.skidfuscator.obfuscator/pom.xml

+17-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@
4747
</plugins>
4848
</build>
4949

50+
<repositories>
51+
<repository>
52+
<id>jitpack.io</id>
53+
<url>https://jitpack.io</url>
54+
</repository>
55+
</repositories>
56+
5057
<dependencies>
5158
<dependency>
5259
<groupId>org.mapleir</groupId>
@@ -70,7 +77,16 @@
7077
<artifactId>progressbar</artifactId>
7178
<version>0.9.2</version>
7279
</dependency>
73-
80+
<dependency>
81+
<groupId>com.github.Col-E</groupId>
82+
<artifactId>jphantom</artifactId>
83+
<version>1.4.3</version>
84+
</dependency>
85+
<dependency>
86+
<groupId>dev.dirs</groupId>
87+
<artifactId>directories</artifactId>
88+
<version>26</version>
89+
</dependency>
7490
</dependencies>
7591

7692
</project>

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/SkidMethodRenderer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public void render(final SkidSession skidSession) {
205205

206206
try (ProgressBar progressBar = ProgressUtil.progress(skidMethods.size())){
207207
skidMethods.parallelStream().forEach(e -> {
208-
e.getMethodNodes().stream().parallel().forEach(methodNode -> {
208+
e.getMethodNodes().forEach(methodNode -> {
209209
if (methodNode.getNode().isAbstract())
210210
return;
211211
final ControlFlowGraph cfg = skidSession.getCxt().getIRCache().get(methodNode.getNode());

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/Skidfuscator.java

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.skidfuscator.obf;
22

3+
import dev.skidfuscator.obf.directory.SkiddedDirectory;
34
import dev.skidfuscator.obf.init.DefaultInitHandler;
45
import dev.skidfuscator.obf.init.SkidSession;
56
import dev.skidfuscator.obf.utils.MapleJarUtil;
@@ -40,6 +41,8 @@ public void init() {
4041
return;
4142
}
4243

44+
final SkiddedDirectory directory = new SkiddedDirectory(null);
45+
directory.init();
4346
final File file = new File(args[0]);
4447

4548
final SkidSession session = new DefaultInitHandler().init(file, new File(file.getPath() + "-out.jar"));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package dev.skidfuscator.obf.directory;
2+
3+
import dev.dirs.BaseDirectories;
4+
import lombok.Getter;
5+
6+
import java.io.File;
7+
import java.net.URI;
8+
import java.nio.file.Path;
9+
import java.nio.file.Paths;
10+
import java.util.Locale;
11+
12+
public class SkiddedDirectory {
13+
@Getter
14+
private static Path directory;
15+
16+
private final String path;
17+
18+
public SkiddedDirectory(String path) {
19+
this.path = path;
20+
}
21+
22+
public static File getCache() {
23+
final File file = directory.resolve("cache").toFile();
24+
25+
if (!file.exists()) {
26+
file.getParentFile().mkdirs();
27+
file.mkdir();
28+
}
29+
30+
return file;
31+
}
32+
33+
public void init() {
34+
if (path == null) {
35+
try {
36+
directory = Paths.get(BaseDirectories.get().configDir)
37+
.resolve("Skidfuscator");
38+
} catch (Throwable e) {
39+
40+
/*
41+
* All credit to Recaf by ColeE for this bit. It seems Powershell is
42+
* not very nice with us fella path users
43+
*/
44+
if (System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("win")) {
45+
directory = Paths.get(System.getenv("APPDATA"), "Skidfuscator");
46+
} else {
47+
throw new IllegalStateException("Failed to initialize Skidded directory", e);
48+
}
49+
}
50+
} else {
51+
try {
52+
directory = Paths.get(new URI(path.toLowerCase(Locale.ROOT)));
53+
} catch (Throwable e) {
54+
throw new IllegalStateException("Failed to initialize Skidded directory", e);
55+
}
56+
}
57+
}
58+
}

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/init/DefaultInitHandler.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.skidfuscator.obf.init;
22

33
import dev.skidfuscator.obf.SkidMethodRenderer;
4+
import dev.skidfuscator.obf.phantom.PhantomJarDownloader;
45
import dev.skidfuscator.obf.utils.MapleJarUtil;
56
import dev.skidfuscator.obf.yggdrasil.EntryPoint;
67
import dev.skidfuscator.obf.yggdrasil.app.MapleEntryPoint;
@@ -28,11 +29,16 @@ public class DefaultInitHandler implements InitHandler {
2829
@SneakyThrows
2930
public SkidSession init(final File jar, final File output) {
3031
System.out.println("Starting download of jar " + jar.getName() + "...");
31-
final SingleJarDownloader<ClassNode> downloader = MapleJarUtil.importJar(jar);
32+
final PhantomJarDownloader<ClassNode> downloader = MapleJarUtil.importPhantomJar(jar);
3233
ApplicationClassSource classSource = new ApplicationClassSource(
3334
jar.getName(), downloader.getJarContents().getClassContents()
3435
);
3536

37+
classSource.addLibraries(new LibraryClassSource(
38+
classSource,
39+
downloader.getPhantomContents().getClassContents()
40+
));
41+
3642
System.out.println("Starting download of runtime jar...");
3743
final SingleJarDownloader<ClassNode> libs = MapleJarUtil.importJar(new File(System.getProperty("java.home"), "lib/rt.jar"));
3844

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/init/SkidSession.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.mapleir.deob.PassGroup;
1818
import org.mapleir.deob.dataflow.LiveDataFlowAnalysisImpl;
1919
import org.mapleir.ir.cfg.builder.ControlFlowGraphBuilder;
20+
import org.topdank.byteio.in.AbstractJarDownloader;
2021
import org.topdank.byteio.in.SingleJarDownloader;
2122

2223
import java.io.File;
@@ -36,7 +37,7 @@
3637
public class SkidSession {
3738
private static final Logger LOGGER = Logger.getLogger(SkidSession.class);
3839
private final ApplicationClassSource classSource;
39-
private final SingleJarDownloader<ClassNode> jarDownloader;
40+
private final AbstractJarDownloader<ClassNode> jarDownloader;
4041
private final IRCache irFactory;
4142
private final AnalysisContext cxt;
4243
//private final MethodInvokerResolver methodInvokerResolver;
@@ -48,7 +49,7 @@ public class SkidSession {
4849

4950
private final Counter counter = new Counter();
5051

51-
public SkidSession(ApplicationClassSource classSource, SingleJarDownloader<ClassNode> jarDownloader, File outputFile) {
52+
public SkidSession(ApplicationClassSource classSource, AbstractJarDownloader<ClassNode> jarDownloader, File outputFile) {
5253
this.classSource = classSource;
5354
this.jarDownloader = jarDownloader;
5455
this.outputFile = outputFile;

0 commit comments

Comments
 (0)