Skip to content

Commit dd11c88

Browse files
authored
Merge pull request #65 from skidfuscatordev/terminalsin-patch-2
Update README.md
2 parents 4726a46 + d0b6c2e commit dd11c88

1 file changed

Lines changed: 14 additions & 44 deletions

File tree

README.md

Lines changed: 14 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,25 @@ code flow. This is done via intra-procedural passes each designed to mingle the
2525
neither the space complexity suffers from a great loss. To achieve the such, we have modeled a couple of well known tricks to
2626
add a significant strength to the obfuscation whilst at the same time retaining a stable enough execution time.
2727

28-
This project is **___not completed___**. This is a proof of concept I've been working on for a while. As far as I could tell, there are
29-
some serious flaws with parameter injection.
28+
Skidfuscator is now feature-complete and continues to be actively maintained with several new obfuscation techniques aimed at hardening your code against reverse engineering.
3029

3130
![Classic Landscape 1 (3) (1)](https://github.com/skidfuscatordev/skidfuscator-java-obfuscator/assets/30368557/9ab9a2ab-8df7-4e62-a711-4df5f3042947)
3231

3332
# ✨ Features
3433

34+
### 1. Automatic Dependency Downloading
35+
Skidfuscator intelligently identifies and downloads missing dependencies needed for your project, minimizing manual configuration. Known frameworks such as Bukkit are automatically handled, streamlining setup.
36+
### 2. Smart Recovery
37+
In the event of errors or failed obfuscation, Skidfuscator implements a recovery system that intelligently resolves conflicts and provides suggestions to fix issues. This ensures minimal disruption in your development workflow.
38+
### 3. Auto Configuration
39+
Skidfuscator comes with built-in presets for common configurations, allowing quick setup without needing to manually tweak every aspect of the obfuscation process. For advanced users, all settings remain fully customizable.
40+
### 4. Flow Obfuscation (GEN3)
41+
Skidfuscator introduces third-generation control flow obfuscation (Flow GEN3), which scrambles method logic and makes the control flow harder to understand. This method introduces opaque predicates and complex flow redirections, hindering static and dynamic analysis.
42+
### 5. Advanced Obfuscation Methods
43+
Comes with all sorts of advanced obfuscation methodologies only seen in modern obfuscators, such as Zelix KlassMaster. Skidfuscator is designed to be hyper-resilient and best of its field, for free.
44+
### 6. Optimization Out-of-the-Box
45+
Skidfuscator is built to ensure that obfuscation does not degrade your application’s runtime performance. By leveraging SSA and CFG-based transformations, it provides obfuscation that’s highly optimized to maintain both time and space complexity.
46+
3547
Here are all the cool features I've been adding to Skidfuscator. It's a fun project hence don't expect too much from it. It's purpose is
3648
not to be commercial but to inspire some more clever approaches to code flow obfuscation, especially ones which make use of SSA and CFGs
3749

@@ -72,48 +84,6 @@ Here are the features:
7284
| `String Encryption` | String | Encrypt the strings using the opaque predicate ||
7385
| `Reference Encryption` | Reference | Encrypt the reference calls using InvokeDynamic using the opaque predicate ||
7486
| `Reference Proxying` | Reference | Proxy references using a builder pattern OR dispatcher classes (mostly for initialisation) ||
75-
76-
### ***NEW*** Number Mutation
77-
![Graph](https://i.imgur.com/XjUFdRU.png)
78-
79-
### Switch Mutation
80-
![Graph](https://i.imgur.com/yPjFC8k.png)
81-
82-
### Fake exceptions
83-
![Graph](https://i.imgur.com/bJcTNHm.png)
84-
85-
### Fake jumps
86-
![Graph](https://i.imgur.com/780UIIc.png)
87-
88-
89-
### Todo
90-
- [x] Converting block creation to a factory style to give us more leniency to play around with stmts and stuff without having to wrap em
91-
- [x] Convert method nodes and modasm to factory style too for that same reason
92-
- [ ] Create a proper util which allows for easy addition, editing and so and forth of the IR. For example, a proper util which can find edges. Perhaps also add a reference to the apropriate jump edge linked in the stmt and vice versa? For the util I envision doing something such as Build.new().Integer(<params>).create() or Build.new().IllegalStateException(<params>).create() or Build.invokevirtual(method).build() or Build.jump(target) or Build.if(<condition>).jump(<target>).build() or Build.if(<condition>).invokevirtual(method).store().build(). Depending on what we want it to return, we give it multiple choices, making it easier to create obfuscation and stuff
93-
- [ ] Begin implementation of LLVM compiler using the sorta-LLVM style stmt structure we got. We need to override them all and add a LLVM compile method to compile them to LLVM bytecode. Once that's done in the future we'll be able to create a website which runs that shit in LLVM-clang to cross compile on our backend, making it a smooth experience for customers
94-
- [x] Add proper parameter obfuscation with a properly done seeding system. My idea is that seeds should vary in type instead of being consistent eg one seed will be passed as a double then will be transformed using it's hashcode and stuff.
95-
- [x] Add a proper invocation resolver which caches everything pre-emptively. Make sure to make it support exclusions and stuff
96-
- [x] Optimize MapleIR's class heredity construction. Pretty weak sauce rn
97-
98-
## Examples
99-
100-
### Builder example
101-
102-
```java
103-
Builder
104-
.invokevirtual(method) // Invokes the method and adds it to the stack. We have to use the stack value before exiting the builder for a stmt
105-
.asImplicitInt() // Converts the builder into an integer builder, allowing us to use arithmetic operations. We could also just make this refer
106-
// to the hashcode function instead if it isn't an integer
107-
.add() // Adds the next value, switches to an Addition builder
108-
.invokevirtual(method2) // Pops back a value, switches back to the expression builder
109-
.condition() // Adds a condition, switches to the condition builder
110-
.ifEqual(target)
111-
.ifSmaller(5, target2)
112-
.ifBigger(6, target3)
113-
.else(target4)
114-
.buildStmt() // Creates a statement (or statement list) based on the previous instructions
115-
```
116-
11787
# Credits
11888

11989
## Libraries used

0 commit comments

Comments
 (0)