All Projects → java-deobfuscator → Retroindy

java-deobfuscator / Retroindy

Licence: Apache-2.0 license
No description or website provided.

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Retroindy

Reverse-Engineering
Tools I have Reverse Engineered !!
Stars: ✭ 46 (+130%)
Mutual labels:  decompile, deobfuscate
eBPF-for-Ghidra
eBPF Processor for Ghidra
Stars: ✭ 157 (+685%)
Mutual labels:  decompile
Tr2main
Tomb Raider II Injector Dynamic Library
Stars: ✭ 46 (+130%)
Mutual labels:  decompile
Ttdedroid
一键反编译工具(不需要手动安装Python) One key for quickly decompile apk/aar/dex/jar, support by jadx/dex2jar/enjarify.
Stars: ✭ 218 (+990%)
Mutual labels:  decompile
Jremapper
Remapping tool for compiled java programs.
Stars: ✭ 97 (+385%)
Mutual labels:  decompile
Apkmod
Apkmod can decompile, recompile, sign APK, and bind the payload with any legit APP
Stars: ✭ 235 (+1075%)
Mutual labels:  decompile
Reko
Reko is a binary decompiler.
Stars: ✭ 942 (+4610%)
Mutual labels:  decompile
android-decompile
📱 Decompile android apps with a single command
Stars: ✭ 17 (-15%)
Mutual labels:  decompile
Deobfuscator
Some deobfuscator for java lol
Stars: ✭ 225 (+1025%)
Mutual labels:  deobfuscate
Ida Batch decompile
*Decompile All the Things* - IDA Batch Decompile plugin and script for Hex-Ray's IDA Pro that adds the ability to batch decompile multiple files and their imports with additional annotations (xref, stack var size) to the pseudocode .c file
Stars: ✭ 198 (+890%)
Mutual labels:  decompile
Holodec
Decompiler for x86 and x86-64 ELF binaries
Stars: ✭ 195 (+875%)
Mutual labels:  decompile
Among Us Protocol
A writeup of the network protocol used in Among Us, a game by Innersloth.
Stars: ✭ 99 (+395%)
Mutual labels:  decompile
Recaf
The modern Java bytecode editor
Stars: ✭ 3,374 (+16770%)
Mutual labels:  decompile
Felix Search Webconsole Plugin
Search Web Console Plugin for Apache Felix
Stars: ✭ 79 (+295%)
Mutual labels:  decompile
Ilspy
.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
Stars: ✭ 14,011 (+69955%)
Mutual labels:  decompile
Apk Dependency Graph Plugin
Displays dependencies between classes as fancy graph.
Stars: ✭ 36 (+80%)
Mutual labels:  decompile
Android Crack Tool
🐞Android crack tool For Mac
Stars: ✭ 2,666 (+13230%)
Mutual labels:  decompile
react-native-decompiler
Decompile React Native Android/IOS Bundle.
Stars: ✭ 78 (+290%)
Mutual labels:  decompile
javabeanutil-benchmark
No description or website provided.
Stars: ✭ 42 (+110%)
Mutual labels:  invokedynamic
TML.Patcher
Console application for decompiling, recompiling, packaging, and patching tModLoader's .tmod files at blazing-fast speeds.
Stars: ✭ 38 (+90%)
Mutual labels:  decompile

Retroindy

Build Status

Some All decompilers have some trouble with Java 8 features, like invokedynamic and ldc-ing MethodType and MethodHandle. It's makes it a huge pain when trying to decompile something because you have to go through the disassembly and whatever. Instead, run it through this Retroindy first and see if the program is actually as hard to read as you thought it was.

Note that the resulting program is not semantically equivalent to the original code. For one, the call stack during bootstrapping will be different. Do not attempt to use the resulting program in production!

Download

Builds can be downloaded from the CI

Usage

java -jar retroindy.jar [input.jar]

Saves to input-retro.jar

Example

Before

    public class Test {
        private static final MethodHandle[] a = new MethodHandle[4];
        
        static {
            a[0] = /* methodhandle */ null;    
            a[1] = /* methodhandle */ null;    
            a[2] = /* methodhandle */ null;    
            a[3] = /* methodhandle */ null;    
        }
        
        public static void main(String[] args) {
            System.out.<invokedynamic>a(1750247380, "Hello world");
        }
    }

After

   public class Test { 
       private static final MethodHandle[] a = new MethodHandle[4];
       private static AtomicReferenceArray CALLSITE_CACHE = new AtomicReferenceArray(new Object[1]);
    
       static {
          a[0] = MethodHandles.lookup().findVirtual(Thread.class, "getStackTrace", asMethodType("()[Ljava/lang/StackTraceElement;"));
          a[1] = MethodHandles.lookup().findVirtual(String.class, "getBytes", asMethodType("()[B"));
          a[2] = MethodHandles.lookup().findStaticGetter(System.class, "out", PrintStream.class);
          a[3] = MethodHandles.lookup().findStaticGetter(System.class, "out", PrintStream.class);
       }
       
       public static void INDY_0(PrintStream stream, String message) {
          if(CALLSITE_CACHE.get(0) == null) {
             CALLSITE_CACHE.compareAndSet(0, (Object)null, bootstrapMethod(MethodHandles.lookup(), "a", asMethodType("(Ljava/lang/String;)V"), 1750247380));
          }
    
          return (PrintStream)((CallSite)CALLSITE_CACHE.get(0)).getTarget().invokeExact(stream, message);
       }
       
       public static void main(String[] args) {
           INDY_0(System.out, "Hello world");
       }
   }
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].