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

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

geladene dll's finden

Diskussion: geladene dll's finden im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige hab am we mal nen bisschen mit code-injection rumgespielt. Mein ziel war es festzustellen, welche module porgramm x lädt. ...

Antwort
Alt 04.08.08, 22:38   #1 (permalink)
 
Registriert seit: 28.07.08
ArnoNühm Leistung: Z3
Likes: 1
geladene dll's finden

Anzeige

hab am we mal nen bisschen mit code-injection rumgespielt. Mein ziel war es festzustellen, welche module porgramm x lädt. hab dazu den prozess suspended created und folgende dll injectet:

Code:
#include <windows.h>
#include <stdio.h>

#define MODULE "kernel32.dll"
#define FUNCTION "LoadLibraryA"

char restore[5];

FILE* file;

void APIENTRY patch();
void APIENTRY unpatch();

HMODULE WINAPI hook(LPCSTR lpLibFileName)
{
	unpatch();
	fprintf(file,"%s\n",lpLibFileName);
	HMODULE ret = LoadLibraryA(lpLibFileName);
	patch();
	return ret;
}



void APIENTRY patch()
{
	unsigned hookedAddr = (unsigned) GetProcAddress(LoadLibrary(TEXT(MODULE)),FUNCTION);
	unsigned hookAddr = (unsigned) &hook;
	unsigned offset = hookAddr - hookedAddr - 5;
	unsigned char jmp = 0xE9;

	ReadProcessMemory(GetCurrentProcess(),(void*) hookedAddr,restore,5,NULL);
	WriteProcessMemory(GetCurrentProcess(),(void*) hookedAddr,&jmp,1,NULL);
	WriteProcessMemory(GetCurrentProcess(),(void*) (hookedAddr+1),&offset,4,NULL);
}

void APIENTRY unpatch()
{
	unsigned hookedAddr = (unsigned) GetProcAddress(GetModuleHandle(TEXT(MODULE)),FUNCTION);
	WriteProcessMemory(GetCurrentProcess(),(void*) hookedAddr,restore,5,NULL);
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch(ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			file = fopen("modules.txt","w");
			patch();
			break;
		case DLL_PROCESS_DETACH:
			fclose(file);
			break;
	}
    return TRUE;
}
Das ganze dann nochmal für LoadLibraryW. Der output war fast identisch.

Danach hab ich mir im Debugger mal angesehen, welche module wirklich geladen werden und festgestellt, dass mir mit der injection so einige entgangen sind. Das waren so ziemlich alles .NET - dll's, die ich da verpasst habe. Kann sein, dass noch nen paar aus sxs dabei waren. Wie werden diese Module geladen und wie kann ich das mit nem ähnlichen Programm überwachen?
ArnoNühm ist offline   Mit Zitat antworten
Alt 04.08.08, 23:12   #2 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Es gibt da noch LoadLibraryExW/LoadLibraryExA. Dabei ruft LoadLibraryA erstmal LoadLibraryExA auf und diese wiederum LoadLibraryExW (LoadLibraryW ->LoadLibraryExW). Sind also nur Wrapper, die auf LoadLibraryExW verweisen.Und es kann gut sein, dass einge "modernere" DLLs oder auch der PE Loader diese Extended Version nutzen.
Notfalls könnte man auch versuchen LdrLoadDLL zu hooken (ntdll). Sollte aber imho nicht nötig sein (achtung: den pe-Loader habe ich nicht debuggt, kann also nicht 100% was dazu sagen ).
Falls der Hook auf LoadLibraryExW nicht hilft - etwas länger, aber informativ:
http://msdn.microsoft.com/en-us/magazine/cc301727.aspx
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 05.08.08, 14:44   #3 (permalink)
Senior Member
 
Registriert seit: 13.07.08
enkore Leistung: K 6-3enkore Leistung: K 6-3enkore Leistung: K 6-3
Likes: 85
Standard

Mit der ToolHelp32 - Library kann man Windows auch einfach alle Module eines bestimmten Prozesses enumerieren lassen (wie ich es bei fbProcMon gemacht habe...)
__________________
"It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."
+++ BREAKING +++ Troll ertrinkt im Planschbecken +++
enkore ist offline   Mit Zitat antworten
Alt 05.08.08, 19:27   #4 (permalink)
Themenstarter
 
Registriert seit: 28.07.08
ArnoNühm Leistung: Z3
Likes: 1
Standard

Danke, die LoadLibraryExW macht ne vermutlich vollständige Liste. Werd jetzt mal versuchen noch nen hook für GetProcAddress() zu bauen. Ich hoffe, da gibt's nicht auch wieder mehrere Varianten von.

Eine Verständnisfrage zum Thema dll-loading bleibt mir allerdings noch. Meines Wissens nach existiert der dll-code ja nur einmal im physischen Speicher und wird in den virtuellen speicher der prozesse gemapped. Allerdings lässt sich damit nicht erklären, warum sich so ein hook wie oben, nur auf einzelne Prozesse auswirkt. Kann das hier jemand erklären?
ArnoNühm ist offline   Mit Zitat antworten
Alt 05.08.08, 19:39   #5 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Sobald Schreibzugriff auf die DLL erfolgt (und die Section nicht als Shared deklariert ist) erstellt der Speichermanager eine lokale Kopie. Da auf die meisten DLLs nicht schreibend zugegriffen wird, erspart diese Strategie im Normalfall viel Overhead.
Das Ganze nennt sich Copy-on-write Protection:
http://msdn.microsoft.com/en-us/library/aa366785(VS.85).aspx
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 05.08.08, 21:10   #6 (permalink)
Themenstarter
 
Registriert seit: 28.07.08
ArnoNühm Leistung: Z3
Likes: 1
Standard

Sowas in der Art hab ich mir schon gedacht. Danke für den Artikel, da kann ich mir den Mechanismus nochmal genau ansehen.
ArnoNühm ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » geladene dll's finden
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
IP Finden ? amo WLAN-Zone 9 26.02.06 15:00
Ich kann alle im Netzwerk finden, mich kann man auch finden aber nicht zugreifen Strahl Network · LAN, WAN, Firewalls 11 21.07.05 16:52
Programm mit dem man dll's open kann FloKe Virenschutz · Tools & Aggressive Software 5 19.07.05 14:57
IP finden SteVe_O Network · LAN, WAN, Firewalls 5 02.09.04 11:29
PCs finden??? Sandmann10 Windows 2 03.12.03 20:57


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