2010-12-09 10 views
0

Ordnung so versuche ich, einen generischen String Deobfuscator (ähnlich wie .NET hat mit einfacher Montage Explorer) zu schreibenDynamische Bytecode Execution

Was ich will ist tun, um eine Methode Anweisungen über BCEL greifen und führen sie mit Argumente, die ich anbiete und habe Zugriff auf die Ausgabe dieser Methode. Ist dies mit vorhandenen Bibliotheken möglich? Wenn ja, kann ich Hilfe bekommen?

Dank

+0

Was ist ein String Deobfuscator? –

+0

Thorbjørn: Da wird es gehen und jeden LDC mit einer INVOKESTATIC danach finden (Ein Aufruf einer Methode, um die Zeichenfolge zu entschlüsseln) und entschlüsseln/ersetzen Sie die Zeichenfolge mit dem Inhalt dieser Methode AKA entblößt die Zeichenfolgen in einer Klasse – Contra

Antwort

1

Eine Kombination aus BCEL und Reflexion/Aufruf könnte die Arbeit machen. Verwenden Sie BCEL, um die Namen der Klassen und Methoden zu erhalten (Ihr LDC, invokestatic Trick oder etwas Ähnliches), und rufen Sie die Methode danach auf. Sie können dies tun, wenn Sie Ihre "Testklassen" auf den Klassenpfad setzen. Für mich ist es nicht notwendig, Bytecode auszuführen.


Wenn Sie eine Klasse und einen Methodennamen haben, geht es wie folgt aus:

Class clazz = Class.forName(yourClassName); 
// either (for public methods) 
Method method = clazz.getMethod(yourMethodName); 
// or for protected/private methods: 
Method method = clazz.getDeclaredMethod(yourMethodName, yourArgumentTypes); 
method.setAccessible(true); 

// assuming the method is static 
Object result = method.invoke(null, yourMethodArgs); 
// otherwise: pass a object reference instead of null 
// to call the method "on" that object 
+0

kann ich die Methode mit meinen Argumenten ausführen und über Reflektion auf das Ergebnis zugreifen? – Contra