Il ne s'agit pas strictement de «rétro-ingénierie», il est principalement lié à l'instrumentation dynamique.
Donc, de la même manière que strace
qui vous permet de voir les appels système effectués par un processus, ou ftrace
pour voir les appels de fonction, y a-t-il quelque chose de similaire pour Java?
Ce qui m'intéresse, c'est d'avoir un fichier .jar
qui est exécuter dans un javaVM.
Existe-t-il un moyen d'instrumenter ou de tracer tous les appels d'API Java effectués par le code de l'application?
Autrement dit, sans aucune analyse statique du contenu du .jar
ou sans aucune modification du contenu de .jar
(par exemple pour ajouter des hooks). Idéalement, une solution équivalente à strace
ou par ex. une javaVM manipulée
La même chose s'applique sur Android - Existe-t-il un moyen de retracer tous les appels d'API du framework Android (ou d'autres fonctions essentiellement DalvikVM) qu'une application effectue sans aucune modification du fichier APK? Toutes les autres modifications de l'environnement / système sont bien.
Dans mon monde idéal, l'analyste obtiendrait la sortie suivante, tout en exécutant une application UNEDITED ( .jar
ou .apk
):
timestamp1: java.security.SecureRandom.getSeed () appelé. Arguments: (Number) timestamp2: javax.security.cert.X509Certificate.checkValidity () appelé. Arguments: (null) ... timestamp3: java.sql.Connection.prepareStatement () appelé. Arguments: ("SELECT * FROM X WHERE Y = W")