Utilisation de EasyHook J'ai réussi à accrocher à la fois les fonctions exportées et les fonctions vtable connues pour diverses classes C++. Dans tous ces cas, les programmes cibles ont utilisé des DLL. Si je connais l'adresse du point d'entrée d'une fonction, est-il possible de faire la même chose quand une bibliothèque a été liée au programme cible plutôt que d'être une bibliothèque séparée?Puis-je accrocher des fonctions dans des bibliothèques liées?
4
A
Répondre
2
Il apparaît avec EasyHook que vous pouvez raccorder n'importe quel sous-programme dont l'adresse est calculable. Dans mon cas accrochage statique SSL_read et SSL_write dans OpenSSL était aussi simple que d'identifier les offsets avec mon débogueur préféré, puis en installant les crochets.
// delegate for EasyHook:
[UnmanagedFunctionPointer(CallingConvention.Cdecl,
SetLastError = true, CharSet = CharSet.Ansi)]
delegate Int32 SLL_readDelegate(IntPtr SSL_ptr, IntPtr buffer, Int32 length);
// import SSL_read (I actually did it manually, but this will work in most cases)
/* proto from ssl_lib.c -> int SSL_read(SSL *s,void *buf,int num) */
[DllImport("ssleay32.dll", SetLastError = true)]
public static extern Int32 SSL_read(IntPtr ssl, IntPtr buffer, Int32 len);
// the new routine
static Int32 SSL_readCallback(IntPtr SSL_ptr, IntPtr buffer, Int32 length)
{
/* call the imported SSL_read */
int ret = SSL_read(SSL_ptr, buffer, length);
/* TODO: your code here, e.g:
* string log_me = Marshal.PtrToString(buffer, ret);
*/
return ret;
}
Maintenant, tout ce qui reste est d'installer le crochet:
private LocalHook sslReadHook;
public void Run(RemoteHooking.IContext InContext, String InArg1)
{
// ... initialization code omitted for brevity
/* the value for ssl_read_addr is made up in this example
* you'll need to study your target and how it's loaded(?) to
* identify the addresses you want to hook
*/
int ssl_read_addr = 0x12345678; /* made up for examples sake */
sslReadHook = LocalHook.Create(new IntPtr(ssl_read_addr),
new SSL_readDelegate(SSL_readCallback), this);
// ...
}
Je dois mentionner que dans cet exemple, vous aurez besoin libeay32.dll et ssleay32.dll que celui-ci dépend de l'ancien.
Bonne accrochage!
Questions connexes
- 1. Traçage des bibliothèques liées
- 2. Ajouter des bibliothèques liées dans Xcode
- 3. Accrocher des problèmes extTextOut
- 4. Fonctions de substitution des bibliothèques dynamiques
- 5. Dépendances du projet Qmake (bibliothèques liées)
- 6. Qu'est-ce que les bibliothèques doivent être liées pour timer_create, timer_settime et d'autres fonctions liées à la minuterie
- 7. F #: un moyen d'utiliser les fonctions membres comme des fonctions non liées?
- 8. problème avec les bibliothèques ou classes liées?
- 9. Accrocher dans ma demande
- 10. Comment chaîner des tables liées dans Access?
- 11. Insérer des données dans 3 tables liées
- 12. Filtrage des données XML liées dans WPF
- 13. Drupal Liste des vues liées
- 14. Problème d'implémentation des listes liées
- 15. Gestion des performances liées à l'utilisation des attributs dans .NET
- 16. Shark n'affiche pas les noms des fonctions
- 17. Accrocher dans le Gestionnaire des services Terminal Server
- 18. Quelles bibliothèques doivent être liées avec des tampons de protocole générés code C++
- 19. liant des bibliothèques tierces
- 20. Gestion des bibliothèques tierces
- 21. Fonctions/bibliothèques de manipulation XML supplémentaires ColdFusion
- 22. des fonctions
- 23. modèle classes statiques à travers les bibliothèques liées dynamiques
- 24. stockage fonctions python non liées dans un objet de classe
- 25. Localisation des bibliothèques
- 26. Portage des bibliothèques Py3k
- 27. installation des bibliothèques python
- 28. ordre des fonctions dans opengl
- 29. Accrocher dans win32
- 30. des pointeurs vers des fonctions