2010-12-09 28 views
0

D'accord, je suis tellement en train d'écrire une DeObfuscator chaîne générique (similaire à ce que .NET a avec Simple Explorateur Assemblée)dynamique bytecode exécution

Ce que je veux faire est de saisir les instructions d'une méthode par BCEL et les exécuter avec arguments que je fournis et ont accès à la sortie de cette méthode. Est-ce possible avec toutes les bibliothèques existantes? Si oui, puis-je obtenir de l'aide?

Merci

+0

Qu'est-ce qu'un DeObfuscator string? –

+0

Thorbjørn: Comme il ira et trouver chaque LDC avec un INVOKESTATIC après (Un appel à une méthode pour déchiffrer la chaîne) et décrypter/remplacer la chaîne avec le contenu de cette méthode AKA deobfuscating les chaînes dans une classe – Contra

Répondre

1

Une combinaison de BCEL et de réflexion/appel pourrait faire le travail. Utilisez BCEL pour obtenir les noms des classes et des méthodes (votre tour LDC, invokestatic ou quelque chose de similaire) et invoquez la méthode juste après. Vous pouvez le faire si vous mettez vos "classes de test" sur le chemin de classe. Pour moi, il n'y a pas besoin d'exécuter du code octet.


Si vous avez une classe et un nom de méthode, il va comme ceci:

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

Je peux exécuter la méthode avec mes arguments et accéder au résultat par réflexion? – Contra