2010-08-18 29 views
0

Pour un programme d'obfuscation que j'écris en Java, j'ai besoin de trouver un moyen d'obtenir une valeur à une adresse spécifique. Par exemple, dans un programme que j'ai ouvert dans un éditeur hexadécimal, à l'adresse 0000001F est la valeur hexadécimale "00". De plus, est-il possible d'écrire dans une adresse mémoire spécifique? Par exemple écrire à 0000001F et le changer de "00" à par exemple, "FF"Comment obtenir une valeur à partir d'une adresse utilisant Java?

+0

Lorsque vous dites écrire à une adresse mémoire spécifique, voulez-vous dire dans un processus en cours? Vous ne pourrez pas le faire en Java car votre code sera contraint à s'exécuter sous la machine virtuelle. Je suis sûr que vous le saviez déjà, alors j'ai peut-être mal compris la question. – Gangadhar

+4

Vous écrivez un obfuscator dans une langue que vous ne connaissez pas assez bien pour savoir que l'accès direct à la mémoire n'est pas disponible sans code natif? Intéressant. –

Répondre

1

Pour répondre à votre première question, vous pouvez ouvrir un fichier sous forme de flux binaire et lire ce que vous voulez. Cela ne fera pas beaucoup sur le classloader, mais si vous avez un classloader personnalisé qui manipule le fichier et le convertit à l'exécution en une classe valide et chargée par la JVM, cela est théoriquement possible. Je me demande cependant quel est le but, car le classloader lui-même ne serait pas obscurci de cette manière.

Pour répondre à votre deuxième question, non, vous ne pouvez pas écrire directement dans une adresse mémoire avec Java. Vous pouvez appeler une fonction via JNI qui peut le faire (en dehors de l'allocation de mémoire JVM).

Il me semble que vous utilisez la mauvaise langue pour ce que vous voulez faire.

1

Vous utilisez la mauvaise langue. C ou C++ seraient de meilleurs choix car vous pouvez facilement appeler les bibliothèques du système d'exploitation (sur la plupart des systèmes) et essayer d'accéder à la mémoire à un emplacement particulier.

La plupart des systèmes d'exploitation compatibles POSIX implémentent mmap qui vous permet de mapper la mémoire à un emplacement particulier dans l'espace d'adressage des processus en cours.