The Bytecode Club

Full Version: ASM Save ArrayList ClassNode as Zip File
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Code:
    public static void saveAsJar(ArrayList<ClassNode> nodeList, String fileName) {
        try {
            JarOutputStream out = new JarOutputStream(new FileOutputStream(fileName));
            for (ClassNode cn : nodeList) {
                ClassWriter cw = new ClassWriter(0);
                cn.accept(cw);
                
                out.putNextEntry(new ZipEntry(cn.name + ".class"));
                out.write(cw.toByteArray());
                out.closeEntry();
            }
            
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
(10-12-2014, 09:28 AM)Bibl Wrote: [ -> ]https://bitbucket.org/0xJAVA/byte-engineer/src

Looks sexy, I'll have to take a better look at this later.

Is there any documentation on it?
(10-12-2014, 09:55 AM)konloch Wrote: [ -> ]
(10-12-2014, 09:28 AM)Bibl Wrote: [ -> ]https://bitbucket.org/0xJAVA/byte-engineer/src

Looks sexy, I'll have to take a better look at this later.

Is there any documentation on it?

not really its not even done but when I need stuff I just add
(10-12-2014, 09:58 AM)Bibl Wrote: [ -> ]
(10-12-2014, 09:55 AM)konloch Wrote: [ -> ]
(10-12-2014, 09:28 AM)Bibl Wrote: [ -> ]https://bitbucket.org/0xJAVA/byte-engineer/src

Looks sexy, I'll have to take a better look at this later.

Is there any documentation on it?

not really its not even done but when I need stuff I just add

Interesting project non-the-less, favorited it for later.

What tools does it feature atm?
load jars from file or url 
Code:
JarDownloader dl = new JarDownloader(new JarInfo(new File("jar.jar")));
boolean worked = dl.parse();
Map<String, ClassNode> nodes = dl.getContents();
Code:
JarDumper dumper = new JarDumper(contents);
dumper.dump(new File("out.jar"));


Add Analysers, store class, field and method data into HookMaps
A lot of filters

https://bitbucket.org/0xJAVA/byte-engine...?at=master

Code:
Refactorer refactorer = new Refactorer(hookMap, contents);
refactorer.run();
changes whole jars class, method and field names based on mapping data.

Code:
InstructionPrinter.consolePrint(methodName);
pretty prints

Code:
InstructionSearcher searcher = new InstructionSearcher(m.instructions, pattern);
boolean match = searcher.search();
List<AbstractInsnNode[]> matchedInsns = searched.getMatches();
find opcode/instruction patterns in code.
(10-12-2014, 10:21 AM)Bibl Wrote: [ -> ]load jars from file or url 

Code:
JarDownloader dl = new JarDownloader(new JarInfo(new File("jar.jar")));
boolean worked = dl.parse();
Map<String, ClassNode> nodes = dl.getContents();
Code:
JarDumper dumper = new JarDumper(contents);
dumper.dump(new File("out.jar"));


Add Analysers, store class, field and method data into HookMaps
A lot of filters

https://bitbucket.org/0xJAVA/byte-engine...?at=master


Code:
Refactorer refactorer = new Refactorer(hookMap, contents);
refactorer.run();
changes whole jars class, method and field names based on mapping data.


Code:
InstructionPrinter.consolePrint(methodName);
pretty prints


Code:
InstructionSearcher searcher = new InstructionSearcher(m.instructions, pattern);
boolean match = searcher.search();
List<AbstractInsnNode[]> matchedInsns = searched.getMatches();
find opcode/instruction patterns in code.

Sexy as fuck, I might start contributing to this once I'm done with Bytecode Viewer.
Nice, mine differs slightly:

Code:
public static void dumpJar(List<ClassNode> classes, Manifest manifest, String absolutePath) {
   try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(new File(absolutePath)), manifest)) {
       for (ClassNode cn : classes) {
           ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);

           jos.putNextEntry(new JarEntry(cn.name + ".class"));
           cn.accept(writer);
           jos.write(writer.toByteArray());
       }
   } catch (IOException e) {
       e.printStackTrace();
   }
}

Gotta have a manifest to make it runnable xD
(01-21-2015, 12:31 AM)Swizzbeat Wrote: [ -> ]Nice, mine differs slightly:

Code:
public static void dumpJar(List<ClassNode> classes, Manifest manifest, String absolutePath) {
   try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(new File(absolutePath)), manifest)) {
       for (ClassNode cn : classes) {
           ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);

           jos.putNextEntry(new JarEntry(cn.name + ".class"));
           cn.accept(writer);
           jos.write(writer.toByteArray());
       }
   } catch (IOException e) {
       e.printStackTrace();
   }
}

Gotta have a manifest to make it runnable xD

Very true! Haha