Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

WIN32 API Hooking

Diskussion: WIN32 API Hooking im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, dieses Thema interessiert mich brennend. Das will ich erreichen: ... die DrawText(Ex) Funktionen hooken. Nur bin ich noch ...

Antwort
Alt 21.01.12, 21:54   #1 (permalink)
 
Registriert seit: 21.01.12
manupulat0r Leistung: Facit NTK
Likes: 0
Standard WIN32 API Hooking

Anzeige

Hallo, dieses Thema interessiert mich brennend.
Das will ich erreichen:



... die DrawText(Ex) Funktionen hooken. Nur bin ich noch nicht ganz durchgestiegen. Ich habe dazu einige Fragen:

-Mauss ich dazu zwingend DLL-Injection beherrschen?
-Brauche ich Detours.h zwingend dazu? Oder bietet die Windows.h da etwas in der Richtung?
-Kennt ihr ein gutes Tutorial?
-Wenn nicht, ihr aber bescheid wisst wärt ihr bereit mich einzulernen?
-Hat jemand von euch sich schon mal damit beschäftigt und zufällig etwas Codegeschnipsel auf der Platte?

manupulat0r ist offline   Mit Zitat antworten
Alt 21.01.12, 23:42   #2 (permalink)
Member of Honour
 
Benutzerbild von xrayn
 
Registriert seit: 05.03.08
xrayn Leistung: Opteronxrayn Leistung: Opteronxrayn Leistung: Opteronxrayn Leistung: Opteronxrayn Leistung: Opteron
Likes: 246
Standard

Zitat:
Zitat von manupulat0r Beitrag anzeigen
-Mauss ich dazu zwingend DLL-Injection beherrschen?
Ja, im Userland hookt man, indem man jeden Prozess manipuliert.

Zitat:
Zitat von manupulat0r Beitrag anzeigen
-Brauche ich Detours.h zwingend dazu? Oder bietet die Windows.h da etwas in der Richtung?
Es geht auch manuell in dem man die IAT manipuliert oder den Detour-Hook manuell anbringt, also ein paar Bytes im Funktionsanfang mit einem Jump zum eigenen Code überschreibt.

Zitat:
Zitat von manupulat0r Beitrag anzeigen
-Kennt ihr ein gutes Tutorial?
Suche bei Google nach Stichwort wie DLL-Injection, IAT-Hook, Detour-Hook, Userland-Hook...

Zitat:
Zitat von manupulat0r Beitrag anzeigen
--Wenn nicht, ihr aber bescheid wisst wärt ihr bereit mich einzulernen?
Nein, das sind Grundlagen, die ausreichend im Internet dokumentiert sind und die sich jeder selbst beibringt.
xrayn ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 04.02.12, 22:43   #3 (permalink)
Themenstarter
 
Registriert seit: 21.01.12
manupulat0r Leistung: Facit NTK
Likes: 0
Standard

Grundlagen XD du bist gut.

Danke für deine Hilfe. Hör nexte Woche ein Seminar zu Codeinjection. Dann will ich mich mal ranwagen.

greets
manupulat0r ist offline   Mit Zitat antworten
Alt 03.03.12, 16:08   #4 (permalink)
Themenstarter
 
Registriert seit: 21.01.12
manupulat0r Leistung: Facit NTK
Likes: 0
Standard

Hi

also das Seminar ist leider komplett ausgefallen. Ich wollte das Thema, hab es leider nicht zugeteilt bekommen, und der Arsch, der es bekommen hat, ist abgesprungen.
Naja ich habe mich jetzt reingelesen und gleich das erste Problem:

Code:
#include "Windows.h"
#include <iostream>
#include <tchar.h>

#define TEST_DLL
#include "test_dll.h"
#include "detours.h"

#pragma comment(lib, "detours")

HANDLE _DllHandle;
HHOOK  _hInjectionHook; 
LRESULT CALLBACK WinHookCallBack(int nCode, WPARAM wParam, LPARAM lParam);


//=============================================================================
int (WINAPI *Real_DrawTextExA)(HDC hdc, LPSTR lpchText, int cchText, LPRECT lprc, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams) = DrawTextExA;
int  WINAPI  Mine_DrawTextExA (HDC hdc, LPSTR lpchText, int cchText, LPRECT lprc, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams){

  char   dllstrA[100] = "Mine_DrawTextExA";
  return Real_DrawTextExA(hdc, dllstrA, -1, lprc, dwDTFormat, NULL);

}
int (WINAPI *Real_DrawTextExW)(HDC hdc, LPWSTR lpchText, int cchText, LPRECT lprc, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams) = DrawTextExW;
int  WINAPI  Mine_DrawTextExW (HDC hdc, LPWSTR lpchText, int cchText, LPRECT lprc, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams){

  wchar_t dllstrW[100]=L"Mine_DrawTextExW";
  return  Real_DrawTextExW(hdc, dllstrW, -1, lprc, dwDTFormat, NULL);
}
//=============================================================================
BOOL (WINAPI *Real_ExtTextOutA)(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCSTR lpString, UINT cbCount, const INT *lpDx)= ExtTextOutA;
BOOL  WINAPI  Mine_ExtTextOutA (HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCSTR lpString, UINT cbCount, const INT *lpDx){

  char dllstrA[100] = "Mine_ExtTextOutA";
  int slen = strnlen(dllstrA,maxlinelen);
  return Real_ExtTextOutA( hdc, X, Y, fuOptions, lprc, dllstrA, slen, lpDx );
}
BOOL (WINAPI *Real_ExtTextOutW)(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cbCount, const INT *lpDx)= ExtTextOutW;
BOOL  WINAPI  Mine_ExtTextOutW (HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cbCount, const INT *lpDx){
  
  wchar_t dllstrW[100] = L"Mine_ExtTextOutW";
  int slen = wcsnlen(dllstrW,maxlinelen);
  return Real_ExtTextOutW( hdc, X, Y, fuOptions, lprc, dllstrW, slen, lpDx );
}
//=============================================================================
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved){
  switch (ul_reason_for_call){
    case DLL_PROCESS_ATTACH:
    {
      _DllHandle = hModule;
      DetourTransactionBegin();
      DetourUpdateThread(::GetCurrentThread());
      DetourAttach(&(PVOID&)Real_DrawTextExA, Mine_DrawTextExA);
      DetourAttach(&(PVOID&)Real_DrawTextExW, Mine_DrawTextExW);
      DetourAttach(&(PVOID&)Real_ExtTextOutA, Mine_ExtTextOutA);
      DetourAttach(&(PVOID&)Real_ExtTextOutW, Mine_ExtTextOutW);
      DetourTransactionCommit();
      break;
    }
    case DLL_THREAD_ATTACH:break;
    case DLL_THREAD_DETACH:break;
    case DLL_PROCESS_DETACH:
    {
      DetourTransactionBegin();
      DetourUpdateThread(::GetCurrentThread());
      DetourDetach(&(PVOID&)Real_DrawTextExA, Mine_DrawTextExA);
      DetourDetach(&(PVOID&)Real_DrawTextExW, Mine_DrawTextExW);
      DetourDetach(&(PVOID&)Real_ExtTextOutA, Mine_ExtTextOutA);
      DetourDetach(&(PVOID&)Real_ExtTextOutW, Mine_ExtTextOutW);
      DetourTransactionCommit();
      break;
    }
  }
  return TRUE;
}
//=============================================================================
LRESULT CALLBACK WinHookCallBack(int nCode, WPARAM wParam, LPARAM lParam)
{  
  if (nCode < 0)
    return (CallNextHookEx (_hInjectionHook,nCode,wParam,lParam));
  return 0;
}
//=============================================================================
int SetHook(DWORD dwThreadId){
  _hInjectionHook=SetWindowsHookEx(WH_GETMESSAGE, WinHookCallBack, (HINSTANCE)_DllHandle, 0);
  return _hInjectionHook ? 1 : 0;
}
//=============================================================================

So siehts dann aus:
Vorher/Nachher:


Kann mir einer sagen warum es die DrawTextEx so verhaut?

EDIT:

Also ich habe herausgefunden wenn ich die ExtTextOut(...) auskommentiere, dann funktioniert der DrawTextEx(...) Hook.
Daraus habe ich vermuted dass die DrawTextEx(...) intern die ExtTextOut(...) aufruft. Obv falsch, denn wenn ich nur die ExtTextOut(...) hooke dann sieht alles was mit DrawTextEx(...) geprinted wird wieder so beknackt aus. Warum stört der ExtTextOut(...)hook die DrawTextEx(...)ausgabe?

Geändert von manupulat0r (03.03.12 um 16:51 Uhr)
manupulat0r ist offline   Mit Zitat antworten
Alt 03.03.12, 16:49   #5 (permalink)
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

Die Strings sind nur lokale Variablen.
Und wieso übergibst du in der Parameterliste einmal fest -1 oder NULL? Übergebe doch alle Parameter.
+++ATH0 ist offline   Mit Zitat antworten
Alt 03.03.12, 19:42   #6 (permalink)
Themenstarter
 
Registriert seit: 21.01.12
manupulat0r Leistung: Facit NTK
Likes: 0
Standard

Na, das hat so seine Gründe.
cchText [in] The length of the string pointed to by lpchText. If cchText is -1, then the lpchText parameter is assumed to be a pointer to a null-terminated string and DrawTextEx computes the character count automatically.

da ich die strings ändere haben sie auch eine neue länge.


lpDTParams [in] A pointer to a DRAWTEXTPARAMS structure that specifies additional formatting options. This parameter can be NULL

keine faxxen soll er machen. einfach unformatiert ausgeben.





Mir ist schon klar dass die Variablen lokal sind. Aber die Funktion ist ja im selben Scope, also kann DrawTextEx (insofern es in der Funktion nicht auch einen Variable namens dllstrW gibt) auch nutzen. Erklär mir bitte ob ich falsch liege und warum. Aber bisher hat das so immer funktioniert.

Vorschläge?
manupulat0r ist offline   Mit Zitat antworten
Alt 05.03.12, 17:16   #7 (permalink)
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

Probier doch einfach mal globale Strings. Einfach um das Problem dort auszuschließen.
+++ATH0 ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » WIN32 API Hooking
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Inline Hooking Schurke (In)security allgemein 5 03.05.09 14:44
Dll Hooking über Api Hook Schurke Code Kitchen 5 11.03.09 17:38
zum Hooking Schurke Code Kitchen 4 07.06.08 14:48
[HowTo] Api-Hooking -- Interesse? Xalon (In)security allgemein 44 14.01.08 19:30
Artikelsuche Social engineering, security, dll hooking Verucca (In)security allgemein 5 25.09.07 14:04


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61