├── LICENSE ├── README.md ├── bench ├── bin │ └── TEST.jar └── src │ └── pack │ ├── Clazz.java │ ├── Main.java │ └── tests │ ├── basics │ ├── accu │ │ └── Digi.java │ ├── cross │ │ ├── Abst1.java │ │ ├── Inte.java │ │ └── Top.java │ ├── ctrl │ │ └── Ctrl.java │ ├── inner │ │ ├── Exec.java │ │ └── Test.java │ ├── overwirte │ │ ├── Face.java │ │ ├── Sub.java │ │ └── Super.java │ ├── runable │ │ ├── Exec.java │ │ ├── Pool.java │ │ └── Task.java │ └── sub │ │ ├── SolAdd.java │ │ └── Solver.java │ ├── bench │ └── Calc.java │ ├── reflects │ ├── annot │ │ ├── anno.java │ │ ├── annoe.java │ │ └── annot.java │ ├── counter │ │ ├── Count.java │ │ └── Countee.java │ ├── field │ │ ├── FObject.java │ │ └── FTest.java │ ├── loader │ │ ├── LRun.java │ │ ├── LTest.java │ │ ├── Loader.java │ │ └── TEST │ ├── res │ │ ├── Accesor.java │ │ ├── file │ │ ├── file2 │ │ └── file3 │ └── retrace │ │ ├── Tracee.java │ │ └── Tracer.java │ └── security │ ├── SecExec.java │ ├── SecTest.java │ └── Sman.java └── sample ├── Allatori.jar ├── Ambien.jar ├── Bozar.jar ├── Branchlock.jar ├── Caesium.jar ├── ClassGuard.jar ├── Grunt.zip ├── JNIC-3.5.1.jar ├── Neon.jar ├── OpenJNIC.jar ├── ProGuard.jar ├── Radon.jar ├── Scuti.jar ├── Skidfuscator.jar ├── SkidfuscatorEnterprise.jar ├── SkidfuscatorEnterpriseLeak.jar ├── Stringer.jar ├── ZKM.jar ├── ZKM20.0.3 NOREFOBF.jar ├── branchlock.jar ├── dProtect.jar ├── eskid.jar ├── j2cc_compiled_only.jar ├── j2cc_with_obfuscation.jar ├── native-obfuscator-win-cmake.jar ├── qProtect.jar ├── safenet.zip └── superblaubeere27.jar /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JavaObfuscatorTest 2 | 3 | A list of Java obfuscators, obfuscated samples and benchmarks. 4 | 5 | ## File structure 6 | 7 | ```` 8 | . 9 | ├───bench 10 | │ ├───src 11 | │ │ └───... (source files) 12 | │ └───bin 13 | │ └───TEST.jar (compiled benchmark) 14 | └───samples 15 | └───... (obfuscated samples) 16 | ```` 17 | 18 | ## Obfuscators 19 | 20 | ( Pass, Fail, Error, Unknown[No output,etc.] ) 21 | 22 | ~~You may find something more in the source view~~ 23 | | Obfuscator | Test#1 | Test#2 | Performance | Size | 24 | |-----------------------------------------------------------------------------------|---------|----------|-------------|---------| 25 | | [None](https://www.java.com/#LOL) | PPPPPPP | PPPPPPPP | 27ms | 29KB | Some of my personal views :P (You find it!) 26 | | [Grunt](https://github.com/SpartanB312/Grunt) | PPPPPPP | FPFPEPPE | 160ms | 843KB | Bigger is better. 27 | | [dProtect](https://github.com/open-obfuscator/dProtect) | PPPPPPP | FPFEEEUP | 31ms | 21KB | Good fork of ↓, fair obf for a ProGuard fork 28 | | [ProGuard](https://github.com/Guardsquare/proguard/) | PPPPPPP | FPPEEEUP | 26ms | 15KB | Rather an optimizer than an obfuscator. 29 | | [Radon3](https://github.com/ItzSomebody/radon) | EEPPEFE | FPFEEPEF | E | 269KB | Crappy indeed. 30 | | [Bozar](https://github.com/vimasig/Bozar) | PPPPPPP | FPFEEPPF | 201ms | 513KB | Nothing special. 31 | | [Caesium](https://github.com/sim0n/Caesium/) | PPPPPFP | FFPPPPPP | 50ms | 174KB | Interesting with zip bomb. But patchable with Recaf. 32 | | [Scuti](https://github.com/netindev/scuti) | EEPPPPP | FPFEEPEF | 867ms | 151KB | Interesting with throw exploit. Painful 2 configure. 33 | | [BranchLock](https://branchlock.net/) | PPPPPPP | FPFEEPFF | 65ms | 66KB | What if it's FOSS... 34 | | [Neon](https://github.com/MoofMonkey/NeonObf) | PPPPPPP | PPFPPPEP | 7439ms | 53KB | Maybe tooooo slow. Not recommended. 35 | | [Ambien](https://github.com/iiiiiiiris/Ambien) | EEPPPEP | FPPEEPUF | 28ms | 56KB | Zip crasher crashes Recaf. Impressive. 36 | | [qProtect-Lite](https://mdma.dev/) | PPPPPPP | FPPPEPPP | 69ms | 139KB | It's like ZKM but worse 37 | | [zelix KlassMaster20.0.3](https://zelix.com/) | PPPPPPP | FPPPEPPP | 54ms | 83KB | Heavy 38 | | [BranchLock Pro](https://branchlock.net/) | PPPPPPP | FPPPEPFF | E | 256KB | Maybe it is Perfect protection i think as a obfuscator 39 | | [Eskid](https://baidu.com/deadth) | PPPPEPP | FPPPEPEP | 530ms | 166KB | Maybe it is cool.For fun. 40 | | [ClassGuard](https://zenofx.com/classguard) | PPPPPPP | PPPPEPPP | 36ms | 2820KB | Interesting AES Encryption class. 41 | | [JNIC-3.5.1](https://jnic.dev/) | PPPPPPP | FPPPEPPP | 481ms | 89KB | JNIC 3.5.1 with build-in flowObf and StringObf enabled. 42 | | [OpenJNIC](https://www.blackspigot.com/threads/openjnic.173922/) | PPPPPPP | FPPPEPPP | 28ms | 304KB | Too good to be actually used. 43 | | [native-obfuscator(win cmake)](https://github.com/radioegor146/native-obfuscator) | PPPPPPP | PPPPPPPP | 1597ms | 120KB | Very compatible, but has a relatively broken running speed. 44 | | [j2cc](https://java2cc.github.io/) | PPPPPPP | PPPPPPPP | 172ms | 304KB | Easily cracked with proper bps. Even weaker 45 | | [Allatori](https://www.allatori.com/) | PPPPPPP | FPFEEPPF | 54ms | 27KB | Best for lazy people. Nearly no configuration required. 46 | | [Stringer](https://jfxstore.com/stringer/) | PPPPPPP | PPPPEPPP | 92ms | 306KB | Neat compability. Good for Spring & Android. 47 | | [ZKM](https://zelix.com/klassmaster/index.html) | PPPPPPP | FPPEEEUP | 51ms | 79KB | = ProGuardPlusObf 48 | | [Skidfuscator](https://github.com/skidfuscatordev) | PPPPPPP | FPPPPFPP | 734ms | 118KB | Good for skidders. Hard to reverse. Too slow. 49 | | [SkidfuscatorEnterprise](https://skidfuscator.dev) | PPPPPPP | FPPPPEPP | 4274ms | 158KB | Tooooo slow. 50 | | [SkidfuscatorEnterpriseLeak](https://github.com/Sk1dfuscator/skidfuscator-src) | PPPPPPP | FPFPEEEF | 10055ms | 138KB | More and more slow 51 | | [superblaubeere27](https://github.com/superblaubeere27/obfuscator) | PPPPPPP | FPPPEPPP | 47ms | 223KB | Tradition never dies. 52 | | [SafeNet](https://cpl.thalesgroup.com/software-monetization) | PPEPPPP | FPPEFEPE | 239ms | 21865KB | Require add jvm args `-noverify` to run. 53 | 54 | Obfuscators that meets one of the following conditions goes here: 55 | 56 | - We don't have a copy of, and haven't yet answered (or refused) our request to provide us with an example. 57 | - Requested a DMCA takedown. 58 | - Unmaintained or don't have an email in their intro page, and we are unable to run. 59 | 60 | ``` 61 | DashO, nProtect 62 | ``` 63 | 64 | ## Tests 65 | 66 | ~~RTFSC~~ 67 | 68 | ```` 69 | Test 1.1: Inheritance 70 | Test 1.2: Cross 71 | Test 1.3: Throw 72 | Test 1.4: Accuracy 73 | Test 1.5: SubClass 74 | Test 1.6: Pool 75 | Test 1.7: InnerClass 76 | 77 | Test 2.1: Counter 78 | Test 2.2: Chinese 79 | Test 2.3: Resource 80 | Test 2.4: Field 81 | Test 2.5: Loader 82 | Test 2.6: ReTrace 83 | Test 2.7: Annotation 84 | Test 2.8: Sec 85 | ```` 86 | 87 | ## Contributing 88 | 89 | Please feel free to contribute to this repository by opening a pull request. 90 | Do not forget to add the obfuscator to the list above. 91 | 92 | ## DMCA 93 | 94 | If you are the owner of one of the obfuscators and you want me to remove it from this repository, please contact me by 95 | opening an issue. 96 | 97 | ## Disclaimer 98 | 99 | This repository is for educational purposes only. The author of this repository is not responsible for any damage caused 100 | by the code in this repository. The code in this repository is not intended to be used for malicious purposes. 101 | The benchmarks in this repository are not intended to be used for comparing the performance of the obfuscators. The 102 | benchmarks are only intended to show the obfuscators' capabilities. 103 | The efficiency is evaluated through the time it takes the obfuscated program to perform a certain set of computations. 104 | This may vary depending on the machine used to run the benchmarks, and the results may not be accurate. 105 | Only compatibility and efficiency are tested here. But you should choose wisely among strength, compatibility, 106 | efficiency, size, and price. 107 | The samples in this repository may be malicious. Do not run them on your machine. 108 | -------------------------------------------------------------------------------- /bench/bin/TEST.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/bench/bin/TEST.jar -------------------------------------------------------------------------------- /bench/src/pack/Clazz.java: -------------------------------------------------------------------------------- 1 | package pack; 2 | 3 | public class Clazz { 4 | } 5 | -------------------------------------------------------------------------------- /bench/src/pack/Main.java: -------------------------------------------------------------------------------- 1 | package pack; 2 | 3 | import pack.tests.basics.accu.Digi; 4 | import pack.tests.basics.ctrl.Ctrl; 5 | import pack.tests.basics.inner.Test; 6 | import pack.tests.basics.overwirte.Sub; 7 | import pack.tests.basics.runable.Task; 8 | import pack.tests.basics.sub.Solver; 9 | import pack.tests.bench.Calc; 10 | import pack.tests.reflects.annot.annot; 11 | import pack.tests.reflects.counter.Count; 12 | import pack.tests.reflects.field.FTest; 13 | import pack.tests.reflects.loader.LRun; 14 | import pack.tests.reflects.res.Accesor; 15 | import pack.tests.reflects.retrace.Tracer; 16 | import pack.tests.security.SecTest; 17 | 18 | import java.io.File; 19 | 20 | public class Main { 21 | public static void main(String[] args) throws Exception { 22 | System.out.println("Obfuscator Test Program"); 23 | System.out.println("Author: huzpsb"); 24 | System.out.println("Version: 1.0r"); 25 | System.out.println("Link: https://github.com/huzpsb/JavaObfuscatorTest"); 26 | File file = new File("IK"); 27 | if (!file.exists()) { 28 | file.createNewFile(); 29 | System.out.println(); 30 | System.out.println("[HINT]"); 31 | System.out.println("Only compatibility and efficiency are tested here!"); 32 | System.out.println("For most users, pass all of the basics means the obfuscator is good enough."); 33 | System.out.println("The Test #2 is for SpringBoot and Android like environment."); 34 | System.out.println("Choose wisely among strength, compatibility, efficiency, size, and price."); 35 | System.out.println("[HINT]"); 36 | System.out.println(); 37 | } 38 | System.out.println("-------------Test #1: Basics-------------"); 39 | System.out.print("Test 1.1: Inheritance "); 40 | try { 41 | new Sub().run(); 42 | } catch (Throwable t) { 43 | System.out.println("ERROR"); 44 | } 45 | System.out.print("Test 1.2: Cross "); 46 | try { 47 | new Top().run(); 48 | } catch (Throwable t) { 49 | System.out.println("ERROR"); 50 | } 51 | System.out.print("Test 1.3: Throw "); 52 | try { 53 | new Ctrl().run(); 54 | } catch (Throwable t) { 55 | System.out.println("ERROR"); 56 | } 57 | System.out.print("Test 1.4: Accuracy "); 58 | try { 59 | new Digi().run(); 60 | } catch (Throwable t) { 61 | System.out.println("ERROR"); 62 | } 63 | System.out.print("Test 1.5: SubClass "); 64 | try { 65 | new Solver(); 66 | } catch (Throwable t) { 67 | System.out.println("ERROR"); 68 | } 69 | System.out.print("Test 1.6: Pool "); 70 | try { 71 | new Task().run(); 72 | } catch (Throwable t) { 73 | System.out.println("ERROR"); 74 | } 75 | System.out.print("Test 1.7: InnerClass "); 76 | try { 77 | new Test().run(); 78 | } catch (Throwable t) { 79 | System.out.println("ERROR"); 80 | } 81 | System.out.println("-------------Test #2: Reflects-------------"); 82 | System.out.print("Test 2.1: Counter "); 83 | try { 84 | new Count().run(); 85 | } catch (Throwable t) { 86 | System.out.println("ERROR"); 87 | } 88 | System.out.print("Test 2.2: Chinese 通过LMAO\b\b\b\b \n"); 89 | System.out.print("Test 2.3: Resource "); 90 | try { 91 | new Accesor().run(); 92 | } catch (Throwable t) { 93 | System.out.println("ERROR"); 94 | } 95 | System.out.print("Test 2.4: Field "); 96 | try { 97 | new FTest().run(); 98 | } catch (Throwable t) { 99 | System.out.println("ERROR"); 100 | } 101 | System.out.print("Test 2.5: Loader "); 102 | try { 103 | new LRun().run(); 104 | } catch (Throwable t) { 105 | System.out.println("ERROR"); 106 | } 107 | System.out.print("Test 2.6: ReTrace "); 108 | try { 109 | new Tracer().run(); 110 | } catch (Throwable t) { 111 | System.out.println("ERROR"); 112 | } 113 | System.out.print("Test 2.7: Annotation "); 114 | try { 115 | new annot().run(); 116 | } catch (Throwable t) { 117 | System.out.println("ERROR"); 118 | } 119 | System.out.print("Test 2.8: Sec "); 120 | try { 121 | new SecTest().run(); 122 | } catch (Throwable t) { 123 | System.out.println("ERROR"); 124 | } 125 | System.out.println("-------------Test #3: Efficiency-------------"); 126 | Calc.runAll(); 127 | System.out.println("-------------Tests r Finished-------------"); 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/accu/Digi.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.accu; 2 | 3 | public class Digi { 4 | public void run() { 5 | double fl = 0d; 6 | int co = 0; 7 | float fx = 1.1f; 8 | while (true) { 9 | fl += 0.000000000000000001d; 10 | co++; 11 | if (co > 100 || (float) fl == 0.00000000000000002f) 12 | break; 13 | } 14 | if (co == 20) { 15 | fx += 1.3f; 16 | if (fx == 2.4f) { 17 | System.out.println("PASS"); 18 | return; 19 | } 20 | System.out.println("FAIL"); 21 | } else { 22 | System.out.println("FAIL"); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/cross/Abst1.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.cross; 2 | 3 | public abstract class Abst1 { 4 | public abstract int add(int a, int b); 5 | 6 | public int mul(int a, int b) { 7 | return a * b; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/cross/Inte.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.cross; 2 | 3 | public interface Inte { 4 | public int mul(int a, int b); 5 | } 6 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/cross/Top.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.cross; 2 | 3 | public class Top extends Abst1 implements Inte { 4 | 5 | public void run() { 6 | if (add(1, 2) == 3) { 7 | if (mul(2, 3) == 6) { 8 | System.out.println("PASS"); 9 | return; 10 | } 11 | } 12 | System.out.println("FAIL"); 13 | } 14 | 15 | @Override 16 | public int add(int a, int b) { 17 | return a + b; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/ctrl/Ctrl.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.ctrl; 2 | 3 | public class Ctrl { 4 | private String ret = "FAIL"; 5 | 6 | public void runt() { 7 | if ("a".equals("b")) { 8 | } else { 9 | throw new UnsupportedOperationException(); 10 | } 11 | } 12 | 13 | public void runf() { 14 | try { 15 | runt(); 16 | } catch (RuntimeException e) { 17 | ret = "PASS"; 18 | } 19 | try { 20 | runt(); 21 | ret = "FAIL"; 22 | } catch (Exception e) { 23 | 24 | } 25 | } 26 | 27 | public void run() { 28 | runf(); 29 | System.out.println(ret); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/inner/Exec.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.inner; 2 | 3 | public class Exec { 4 | public int fuss = 1; 5 | 6 | public void addF() { 7 | fuss += 2; 8 | } 9 | 10 | public class Inner { 11 | int i; 12 | 13 | public Inner(int p) { 14 | i = p; 15 | } 16 | 17 | public void doAdd() { 18 | addF(); 19 | fuss += i; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/inner/Test.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.inner; 2 | 3 | public class Test { 4 | public void run() { 5 | Exec exec = new Exec(); 6 | Exec.Inner inner1 = exec.new Inner(3); 7 | inner1.doAdd(); 8 | Exec.Inner inner2 = exec.new Inner(100); 9 | inner2.doAdd(); 10 | if (exec.fuss == 108) 11 | System.out.println("PASS"); 12 | else 13 | System.out.println("ERROR"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/overwirte/Face.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.overwirte; 2 | 3 | public interface Face { 4 | String face(int i); 5 | } 6 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/overwirte/Sub.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.overwirte; 2 | 3 | public class Sub extends Super { 4 | public void run() { 5 | Object o = this; 6 | System.out.println(((Face) o).face(1)); 7 | } 8 | 9 | @Override 10 | public String face(int i) { 11 | if (i == 1) { 12 | return "PASS"; 13 | } else { 14 | return "FAIL"; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/overwirte/Super.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.overwirte; 2 | 3 | public abstract class Super implements Face { 4 | public void run() { 5 | System.out.println("FAIL"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/runable/Exec.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.runable; 2 | 3 | public class Exec { 4 | public static int i = 1; 5 | private int d; 6 | 7 | public Exec(int delta) { 8 | d = delta; 9 | } 10 | 11 | void doAdd() { 12 | try { 13 | Thread.sleep(200L); 14 | } catch (Exception ignored) { 15 | 16 | } 17 | i += d; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/runable/Pool.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.runable; 2 | 3 | import java.util.concurrent.LinkedBlockingQueue; 4 | import java.util.concurrent.ThreadPoolExecutor; 5 | import java.util.concurrent.TimeUnit; 6 | 7 | public class Pool { 8 | public static ThreadPoolExecutor tpe = new ThreadPoolExecutor(0, 1, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1)); 9 | } 10 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/runable/Task.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.runable; 2 | 3 | import java.util.concurrent.RejectedExecutionException; 4 | 5 | public class Task { 6 | public void run() throws Exception { 7 | Exec e1 = new Exec(2); 8 | Exec e2 = new Exec(3); 9 | Exec e3 = new Exec(100); 10 | try { 11 | Pool.tpe.submit(e2::doAdd); 12 | try { 13 | Thread.sleep(50L); 14 | } catch (InterruptedException e) { 15 | } 16 | Pool.tpe.submit(() -> { 17 | int ix = Exec.i; 18 | e1.doAdd(); 19 | Exec.i += ix; 20 | }); 21 | try { 22 | Thread.sleep(50L); 23 | } catch (InterruptedException e) { 24 | } 25 | Pool.tpe.submit(e3::doAdd); 26 | } catch (RejectedExecutionException e) { 27 | Exec.i += 10; 28 | } 29 | Thread.sleep(300L); 30 | if (Exec.i == 30) { 31 | // 1->4(+3,e2)->14(+10,catch)->16(+2,e1)->30(+14,ix) 32 | System.out.println("PASS"); 33 | } else { 34 | System.out.println("FAIL"); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/sub/SolAdd.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.sub; 2 | 3 | public class SolAdd { 4 | public static int get() { 5 | return new med(1, 2).result; 6 | } 7 | } 8 | 9 | class med { 10 | int result; 11 | 12 | med(int a, int b) { 13 | result = new flo().solve(a, b); 14 | } 15 | } 16 | 17 | class flo { 18 | int solve(int a, int b) { 19 | return a + b; 20 | } 21 | } -------------------------------------------------------------------------------- /bench/src/pack/tests/basics/sub/Solver.java: -------------------------------------------------------------------------------- 1 | package pack.tests.basics.sub; 2 | 3 | public class Solver { 4 | public Solver() { 5 | if (SolAdd.get() == 3) { 6 | System.out.println("PASS"); 7 | } else { 8 | System.out.println("FAIL"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /bench/src/pack/tests/bench/Calc.java: -------------------------------------------------------------------------------- 1 | package pack.tests.bench; 2 | 3 | public class Calc { 4 | public static int count = 0; 5 | 6 | public static void runAll() { 7 | long start = System.currentTimeMillis(); 8 | for (int i = 0; i < 10000; i++) { 9 | call(100); 10 | runAdd(); 11 | runStr(); 12 | } 13 | System.out.println("Calc: " + (System.currentTimeMillis() - start) + "ms"); 14 | if (count != 30000) 15 | throw new RuntimeException("[ERROR]: Errors occurred in calc!"); 16 | } 17 | 18 | private static void call(int i) { 19 | if (i == 0) 20 | count++; 21 | else 22 | call(i - 1); 23 | } 24 | 25 | private static void runAdd() { 26 | double i = 0d; 27 | while (i < 100.1d) { 28 | i += 0.99d; 29 | } 30 | count++; 31 | } 32 | 33 | private static void runStr() { 34 | String str = ""; 35 | while (str.length() < 101) { 36 | str += "ax"; 37 | } 38 | count++; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/annot/anno.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.annot; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface anno { 8 | String val() default "yes"; 9 | 10 | String val2() default "yes"; 11 | } 12 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/annot/annoe.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.annot; 2 | 3 | import java.lang.reflect.Field; 4 | 5 | public class annoe { 6 | @anno(val = "PASS") 7 | private static final String fail = "WHAT"; 8 | 9 | @anno 10 | public void dox() throws Exception { 11 | String toGet = "FAIL"; 12 | for (Field f : annoe.class.getDeclaredFields()) { 13 | f.setAccessible(true); 14 | anno obj = f.getAnnotation(anno.class); 15 | if (obj != null) { 16 | toGet = obj.val(); 17 | } 18 | } 19 | System.out.println(toGet); 20 | } 21 | 22 | @anno(val = "no") 23 | public void dov() { 24 | System.out.println("FAIL"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/annot/annot.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.annot; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | public class annot { 6 | public void run() throws Exception { 7 | annoe a = new annoe(); 8 | for (Method m : annoe.class.getDeclaredMethods()) { 9 | m.setAccessible(true); 10 | anno an = m.getAnnotation(anno.class); 11 | if (an != null) { 12 | if (an.val().equals("yes")) { 13 | m.invoke(a); 14 | } 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/counter/Count.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.counter; 2 | 3 | public class Count { 4 | public void run() throws Throwable { 5 | if (Countee.class.getFields().length == 1 && Countee.class.getDeclaredFields().length == 4 && Countee.class.getMethods().length > 4 && Countee.class.getDeclaredMethods().length == 4) 6 | System.out.println("PASS"); 7 | else 8 | System.out.println("FAIL"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/counter/Countee.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.counter; 2 | 3 | public class Countee { 4 | public int cpuli = 0; 5 | protected int cprot = 0; 6 | int cpackp = 1; 7 | private int cpriv = 0; 8 | 9 | public void mpuli() { 10 | } 11 | 12 | public void mprot() { 13 | } 14 | 15 | public void mpackp() { 16 | } 17 | 18 | public void mpriv() { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/field/FObject.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.field; 2 | 3 | public class FObject { 4 | private int i; 5 | 6 | private FObject(int i) { 7 | this.i = i; 8 | } 9 | 10 | private void add() { 11 | i += 3; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/field/FTest.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.field; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.Field; 5 | import java.lang.reflect.Method; 6 | 7 | public class FTest { 8 | public void run() throws Exception { 9 | Constructor con = FObject.class.getDeclaredConstructor(int.class); 10 | if (con.isAccessible()) { 11 | System.out.println("FAIL"); 12 | return; 13 | } 14 | con.setAccessible(true); 15 | FObject obj = (FObject) con.newInstance(1); 16 | Method m = FObject.class.getDeclaredMethod("add", null); 17 | if (m.isAccessible()) { 18 | System.out.println("FAIL"); 19 | return; 20 | } 21 | m.setAccessible(true); 22 | m.invoke(obj); 23 | Field f = FObject.class.getDeclaredField("i"); 24 | if (f.isAccessible()) { 25 | System.out.println("FAIL"); 26 | return; 27 | } 28 | f.setAccessible(true); 29 | if (f.getInt(obj) != 4) { 30 | System.out.println("FAIL"); 31 | return; 32 | } 33 | System.out.println("PASS"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/loader/LRun.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.loader; 2 | 3 | public class LRun { 4 | public void run() throws Exception { 5 | Loader l = new Loader(); 6 | Class c = l.findClass("pack.tests.reflects.loader.LTest"); 7 | Object o = c.newInstance(); 8 | c.getMethod("run").invoke(o); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/loader/LTest.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.loader; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | 7 | public class LTest { 8 | public static byte[] readAllBytes(InputStream is) throws IOException { 9 | ByteArrayOutputStream baos = new ByteArrayOutputStream(); 10 | byte[] buffer = new byte[1024]; 11 | int bytesRead; 12 | while ((bytesRead = is.read(buffer)) != -1) { 13 | baos.write(buffer, 0, bytesRead); 14 | } 15 | return baos.toByteArray(); 16 | } 17 | 18 | public void run() throws Exception { 19 | System.out.println(new String(readAllBytes(LTest.class.getResourceAsStream("TEST")))); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/loader/Loader.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.loader; 2 | 3 | import java.io.ByteArrayInputStream; 4 | import java.io.ByteArrayOutputStream; 5 | import java.io.InputStream; 6 | 7 | public class Loader extends ClassLoader { 8 | public static byte[] readAllBytes(InputStream is) { 9 | try { 10 | ByteArrayOutputStream baos = new ByteArrayOutputStream(); 11 | byte[] buffer = new byte[1024]; 12 | int bytesRead; 13 | while ((bytesRead = is.read(buffer)) != -1) { 14 | baos.write(buffer, 0, bytesRead); 15 | } 16 | return baos.toByteArray(); 17 | } catch (Exception e) { 18 | return null; 19 | } 20 | } 21 | 22 | @Override 23 | public InputStream getResourceAsStream(String name) { 24 | if (name.contains("TEST")) { 25 | return new ByteArrayInputStream("PASS".getBytes()); 26 | } 27 | return super.getResourceAsStream(name); 28 | } 29 | 30 | @Override 31 | public Class findClass(String name) throws ClassNotFoundException { 32 | byte[] data = readAllBytes(Loader.class.getClassLoader().getResourceAsStream("pack/tests/reflects/loader/LTest.class")); 33 | return defineClass(name, data, 0, data.length); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/loader/TEST: -------------------------------------------------------------------------------- 1 | FAIL -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/res/Accesor.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.res; 2 | 3 | public class Accesor { 4 | public void run() { 5 | try { 6 | if (Accesor.class.getResourceAsStream("/pack/tests/reflects/res/file").read() != 'a') { 7 | throw new RuntimeException(); 8 | } 9 | if (Accesor.class.getResourceAsStream("file2").read() != 'r') { 10 | throw new RuntimeException(); 11 | } 12 | if (Accesor.class.getClassLoader().getResourceAsStream("pack/tests/reflects/res/file3").read() != 'c') { 13 | throw new RuntimeException(); 14 | } 15 | System.out.println("PASS"); 16 | } catch (Exception e) { 17 | System.out.println("FAIL"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/res/file: -------------------------------------------------------------------------------- 1 | a -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/res/file2: -------------------------------------------------------------------------------- 1 | r -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/res/file3: -------------------------------------------------------------------------------- 1 | c -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/retrace/Tracee.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.retrace; 2 | 3 | public class Tracee { 4 | public static int p = 0; 5 | 6 | private void doTrace(int i) throws Exception { 7 | p++; 8 | StackTraceElement ste = new Throwable().getStackTrace()[1]; 9 | Tracee.class.getDeclaredMethod(ste.getMethodName(), int.class).invoke(this, i - 1); 10 | } 11 | 12 | public void toTrace(int i) throws Exception { 13 | if (i == 0) return; 14 | doTrace(i); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /bench/src/pack/tests/reflects/retrace/Tracer.java: -------------------------------------------------------------------------------- 1 | package pack.tests.reflects.retrace; 2 | 3 | public class Tracer { 4 | public void run() throws Exception { 5 | new Tracee().toTrace(5); 6 | if (Tracee.p == 5) { 7 | System.out.println("PASS"); 8 | } else { 9 | System.out.println("FAIL"); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /bench/src/pack/tests/security/SecExec.java: -------------------------------------------------------------------------------- 1 | package pack.tests.security; 2 | 3 | public class SecExec { 4 | private static void doShutdown() { 5 | System.exit(-1); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /bench/src/pack/tests/security/SecTest.java: -------------------------------------------------------------------------------- 1 | package pack.tests.security; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | public class SecTest { 6 | public void run() { 7 | System.setSecurityManager(new Sman()); 8 | System.out.print("FAIL"); 9 | try { 10 | Method m = SecExec.class.getDeclaredMethod("doShutdown"); 11 | m.setAccessible(true); 12 | m.invoke(null); 13 | } catch (Throwable t) { 14 | Throwable r, f = t; 15 | while (true) { 16 | r = f.getCause(); 17 | if (r != null) { 18 | f = r; 19 | continue; 20 | } 21 | break; 22 | } 23 | String str = f.getMessage(); 24 | if (str == null) { 25 | return; 26 | } 27 | if (str.contains("HOOK")) { 28 | System.out.println("\b\b\b\bPASS"); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /bench/src/pack/tests/security/Sman.java: -------------------------------------------------------------------------------- 1 | package pack.tests.security; 2 | 3 | import java.security.Permission; 4 | 5 | public class Sman extends SecurityManager { 6 | public void checkPermission(Permission perm) { 7 | if (perm.getName().contains("exitVM")) 8 | throw new SecurityException("HOOKED"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /sample/Allatori.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Allatori.jar -------------------------------------------------------------------------------- /sample/Ambien.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Ambien.jar -------------------------------------------------------------------------------- /sample/Bozar.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Bozar.jar -------------------------------------------------------------------------------- /sample/Branchlock.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Branchlock.jar -------------------------------------------------------------------------------- /sample/Caesium.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Caesium.jar -------------------------------------------------------------------------------- /sample/ClassGuard.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/ClassGuard.jar -------------------------------------------------------------------------------- /sample/Grunt.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Grunt.zip -------------------------------------------------------------------------------- /sample/JNIC-3.5.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/JNIC-3.5.1.jar -------------------------------------------------------------------------------- /sample/Neon.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Neon.jar -------------------------------------------------------------------------------- /sample/OpenJNIC.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/OpenJNIC.jar -------------------------------------------------------------------------------- /sample/ProGuard.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/ProGuard.jar -------------------------------------------------------------------------------- /sample/Radon.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Radon.jar -------------------------------------------------------------------------------- /sample/Scuti.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Scuti.jar -------------------------------------------------------------------------------- /sample/Skidfuscator.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Skidfuscator.jar -------------------------------------------------------------------------------- /sample/SkidfuscatorEnterprise.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/SkidfuscatorEnterprise.jar -------------------------------------------------------------------------------- /sample/SkidfuscatorEnterpriseLeak.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/SkidfuscatorEnterpriseLeak.jar -------------------------------------------------------------------------------- /sample/Stringer.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/Stringer.jar -------------------------------------------------------------------------------- /sample/ZKM.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/ZKM.jar -------------------------------------------------------------------------------- /sample/ZKM20.0.3 NOREFOBF.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/ZKM20.0.3 NOREFOBF.jar -------------------------------------------------------------------------------- /sample/branchlock.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/branchlock.jar -------------------------------------------------------------------------------- /sample/dProtect.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/dProtect.jar -------------------------------------------------------------------------------- /sample/eskid.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/eskid.jar -------------------------------------------------------------------------------- /sample/j2cc_compiled_only.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/j2cc_compiled_only.jar -------------------------------------------------------------------------------- /sample/j2cc_with_obfuscation.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/j2cc_with_obfuscation.jar -------------------------------------------------------------------------------- /sample/native-obfuscator-win-cmake.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/native-obfuscator-win-cmake.jar -------------------------------------------------------------------------------- /sample/qProtect.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/qProtect.jar -------------------------------------------------------------------------------- /sample/safenet.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/safenet.zip -------------------------------------------------------------------------------- /sample/superblaubeere27.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzpsb/JavaObfuscatorTest/7b94d1a325a27601fe96c7b9c5ac676ed2e178e5/sample/superblaubeere27.jar --------------------------------------------------------------------------------