OllyAdvanced Bypass

Posted in Sonstige , Assembler am 17. August 2010 von Grzonu

Kürzlich habe ich mich mit weiteren Methoden zum Nachweis eines Debuggers, und es trennen.
Zum Beispiel habe ich eine Methode, die ich vor zwei Beiträge geschrieben haben. Kozystala es mit dem Parameter der NtQuerySystemInformation SystemHandleInformation. Aber wenn jemand das Plugin OllyAdvanced Ollyego dieser Methode ist nicht solide ist. Ich habe versucht, diese syscall der bisherigen Funktionen zu provozieren. Aber noch ändern die Ergebnisse OllyOdvanced.
Das gleiche war der Fall NtOpenProcess Funktion, so dass ich konnte nicht geöffnet werden der Prozess um den Debugger zu handhaben oder finden Sie die PID des übergeordneten Prozesses OllyAdvanced so da die Ergebnisse aus den übergeordneten Prozess PID PID == meinem Prozeß verändert erhalten. Wie bei seinem eigenen Verfahren kozystalem Aufruf syscall OllyAdvanced müssen entweder annehmen, Haken in den Kernel, aber diese Methode bisher die einzige Option könnte sysexit werden abgelehnt.
Aber wie Sie in Windows wissen, haben wir zwei Mechanismen zum Aufrufen syscall (SYSENTER und INT 2E)
SYSENTER nach seiner Rückkehr nach User-Modus und der INT 2E KiFastSystemCallRet kehrt zurück, um Anweisungen.
Ist ausreichend, um diese Funktionen zu induzieren und nicht durch nur durch SYSENTER INT 2E zu OllyAdvanced nicht verändert und somit Ergebnisse, die man leicht erkennen, einen Debugger.

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , , , , ,

Song Downloader

Posted in C + + , News am 23. Juli 2010 durch Grzonu

Ich mag ein Lied, um sich als MP3-Download zu hören (natürlich für 24 ;) )
Oft verwende ich dies mit wrzuty und Dienstleistungen, die das Lied von dieser Seite herunterladen können.
Leider verändert letzten wrzuta wie es Downloads von Dateien, um den Weg, der ganz ähnlich Megavideo stark behindert Herunterladen (download XML-Datei muss geöffnet sein, und es gibt einen Link skozystac aber es kann nur von der IP-Adresse aus dem es heruntergeladen wurde XML werden),

Ein Teil dieser Webseite, die ermöglicht das Herunterladen aufgehört hat, als Teil, der die Java-Script zu holen uns ein Lied eingeführt handeln. Wie bei Java, habe ich nicht installiert und nicht installieren möchten, damit wir ein Java-Applet in C + +, die den Song-Downloads aus wrzuty schrieb.
Java-Applet für sich gut geschrieben, aber ich beschloss, es mit einem breiteren Publikum zu teilen. Also, wenn jemand wird aufgefordert, sich als nützlich für den Download zu kommen ;)

DOWNLOAD

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , , ,

Eine weitere Methode der Debugger-Erkennung

Posted in C + + Am 6. Juli 2010 durch Grzonu

Vor kurzem ging ich zurück, um Methoden zur Erkennung von Debugger-Studie und erfand eine Methode auf Basis Features NtQuerySystemInformation möglich, dass jemand schon traf es früher, aber ich konnte nichts finden darüber.

Die Methode ist sehr einfach über die Funktion mit dem Parameter NtQuerySystemInformation SystemHandleInformation
Haltegriffe durch alle geöffneten Anwendungen. Suchen Sie Klammern, um Prozesse, die in unserem Prozess sind und überprüfen Sie, ob dieser Prozess zwischen den Klemmen kann nicht auf die Art der Griff heruntergeladen werden Handle 0xB DebugObject wenn es ein Zeichen ist es, dass wir das Debuggen kann (wenn auch nicht 100% sicher)

Zeit für einige Code- :)

Wir brauchen Variablen und Funktionen:

  1
 2
 3
 4
 5
 6
 7
 8
 9
  NTSTATUS NTSTATUS;
 ; DWORD dwParentPID = 0xffffffff;
 H_proc HANDLE h;
 ULONG müssen;	
 ; BOOL isDebug = 0;


 "ntdll" ) ; Ntdll = HMODULE GetModuleHandle ("ntdll");
 NTQSI ) GetProcAddress ( ntdll, "NtQuerySystemInformation" ) ; NTQSI NtQuerySystemInformation = (NTQSI) GetProcAddress (ntdll "NtQuerySystemInformation"); 

Jetzt rufen Sie die Funktion NtQuerySystemInformation

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
  ; ULONG size = 0x1000;
 ( SYSTEM_HANDLE_INFORMATION * ) malloc ( size ) ; * = SYSTEM_HANDLE_INFORMATION Griffen (SYSTEM_HANDLE_INFORMATION *) malloc (size);

 SystemHandleInformation, handles, size, & need ) ; NTSTATUS = NtQuerySystemInformation (SystemHandleInformation, Griffe, Größe & Need);
 ntStatus ! = 0 ) //jesli za maly bufor alokujemy wiekszy if (NTSTATUS! = 0) / / wenn Puffer zu klein weist eine größere
					    (
                         handles ) ; free (Griffe);
                         size = brauchen;
                         SYSTEM_HANDLE_INFORMATION * ) malloc ( size ) ; Griffe = (SYSTEM_HANDLE_INFORMATION *) malloc (size);
		 need ) ; NtQuerySystemInformation (SystemHandleInformation, Handgriffe, Größe, und müssen);
						 ) 

momecie zitiert in diesem Bauwerk haben wir alle handhabt im System verfügbar.
Ob wir brauchen, um unter ihnen zu suchen haben keine Klemmen auf dem Typ 0 × 7 ist ein Prozess.
Wenn es Ihnen so öffnen wir den Prozess mit den Rechten PROCESS_DUP_HANDLE
und duplizieren Sie den Griff, aber in unserem Prozess. Dann prüfen Sie, ob es sich um eine für unsere Prozess-Handle ist, und wenn ja, ob Klammern unter dieser Prozess nicht der Typ Klemmen DebugObject

Und nun die Praxis:

  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
  0 ; int i = 0;
 0 ; int j = 0;
 i = 0 ; i < handles - > HandleCount ; i ++ ) for (i = 0; i <handles -> HandleCount i + +)
 (
	 handles - > Handles [ i ] . ObjectType == 7 ) //Process if (Griffe -> Griffe [i]. ObjectType == 7) / / Prozess
	 (
		 PROCESS_DUP_HANDLE, FALSE,handles - > Handles [ i ] . OwnerPid ) ; h = OpenProcess (PROCESS_DUP_HANDLE, FALSE, Griffe -> Griffe [i]. OwnerPid);
		 h ! = 0 ) if (h! = 0)
		 (
			 DuplicateHandle ( h, ( HANDLE ) handles - > Handles [ i ] . HandleValue , GetCurrentProcess ( ) , & h_proc, 0 , FALSE, DUPLICATE_SAME_ACCESS ) ) if (DuplicateHandle (h, (Griff), Griffe -> Griffe [und]. HandleValue, GetCurrentProcess (), & h_proc, 0, FALSE, DUPLICATE_SAME_ACCESS))
			 (
				 GetProcessId ( h_proc ) == GetCurrentProcessId ( ) ) if (GetProcessId (h_proc) == GetCurrentProcessId ())
				 (
					 ; j = 0;
					 j < handles - > HandleCount ) while (j <handles -> HandleCount)
					 (
						 handles - > Handles [ i ] . OwnerPid == handles - > Handles [ j ] . OwnerPid && handles - > Handles [ j ] . ObjectType == 0xb ) if (Griffe -> Griffe [und]. OwnerPid == Griffe -> Griffe [j]. OwnerPid & & Griffe -> Griffe [j]. ObjectType == 0xB)
						 (
						 ; isDebug = 1;
						 )
					 j + +;
					 )
				 )
			 )
		 )
	 )
 ) 

Am Ende der Suchergebnisse printfujemy und Release-Puffer

  1
 2
 3
 4
 5
 6
 7
 8
 9
  isDebug == 1 ) if (isDebug == 1)
 (
 "Debugger wykryty \n " ) ; printf ("Debugger erkannt \ n");
 )
 sonst
 (
 "Nie wykryto debuggera \n " ) ; printf ("Es gab keinen Debugger \ n");
 )
	 handles ) free ( handles ) ; if (Griffe) kostenlos (Griffe); 

Der gesamte Code für das Programm, das Sie herunterladen können HIER

PS.
Pure olly, ist diese Methode leicht zu erkennen, sondern beispielsweise mit dem Plugin Olly StrongOD nicht.
Dieses Plugin ermöglicht die Liste m.in Klemmen für diesen Prozess ist leer. Es ist auch ganz spezifische, weil jedes Programm hat einige Griff. Darüber hinaus können wir unseren Prozess zu überprüfen hat, dass ein Elternteil Griffe (oder nicht haben)

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , ,

Nachweis von IAT hookingu

Posted in der C + + , Security am 25. Juni 2010 durch Grzonu

Wie versprochen gerade getan. Heute möchte ich einhaken IAT besprechen, und wie man sie erkennt.
Nach einer Weile werde ich versuchen, etwas zu schreiben hookach ETA und Modifikationen des Codes.

Nun, so here we go.
Zunächst ein paar Worte, was ist das IAT Einhaken selbst - ist eine Technik hookowania Funktion ersetzt die Funktion Adresse in der IAT-Adresse gesetzt
Funktion enthalten in einem anderen DLL oder einfach irgendwo im Speicher. Über die gleiche Einstellung Haken schrieb, bin ich nicht bereit, zig
Bibliotheken, Hunderte von Beispielcode so dass ich denke, dass diejenigen, die nicht gemeistert haben so bald wie möglich die Lücken zu füllen kozystajac von Google.

Nun etwas über den Nachweis dieser Haken - beschreiben die Punkte, die Sie tun müssen:
1. Exe in den Prozess, wo Sie wollen für Haken aussehen befindet Datei.
2. Wir sind in dieser Datei befindet und überprüfen Sie die IAT-Tabellen alle Funktionen in der IAT enthaltenen
3. Wir prüfen, wie das Modul durch. IAT sollte die Funktion sein.
4. Check ImageBase und die Größe des Moduls und prüfen, ob die Adresse in der IAT im Sortiment ist
Wenn ja, ist alles OK, wenn Sie das Kontrollkästchen nicht das Modul, das die Adresse zeigt

Soviel zur Theorie.
Zeit zum Üben.

Benötigte Header:

  1
 2
 3
 4
 5
 6
 7
 8
 9
  # Include <windows.h>
 # Include <stdio.h
 # Include <string>
 # Include <Tlhelp32.h>
 # Include <Vektor>
 # Include <Psapi.h>
 # Include <fstream>
 # Include "PE_class.h" / / meine Klasse zu handhaben PE-Dateien (es bietet zusammen mit dem Rest des Codes)
 # Pragma comment (lib, "psapi.lib"); 

Globale Variablen:

  1
 2
 3
  HANDLE hProc / / Handle des Prozesses
 DWORD pid; / / ProcessID
 DWORD MainImageBase / / Prozess ImageBase 

Main:

  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
  int argc, CHAR * argv [ ] ) int main (int argc, char * argv [])
 (
 " \n \n IAT Hook detector v. 1.0 by Grzonu \n \n " ) ; printf ("\ n \ n Hook IAT Detektor Grzonu v. 1.0 \ n \ n");

 argc ! = 2 ) //sprawdzamy czy podano parametr jesli nie to wychodzimy if (argc! = 2) / / überprüfen, ob der Parameter übergeben wird, wenn es nicht gehen nicht
 (
	 "usage: %s <pid> \n \n " ,argv [ 0 ] ) ; printf ("usage:% s <PID> \ n \ n", argv [0]);
	 ; return 0;
 )
 ( argv [ 1 ] ) ; //pobieramy PID pid = atoi (argv [1]) / / PID greifen die
 ; DWORD IB = 0;
 ; ImgSize DWORD = 0;
 IB, & ImgSize ) ; //Znajdujemy ImageBase i Size procesu FindImageBase (pid, & IB & ImgSize) / / Suche nach den Verfahren und Größe ImageBase
 "ImageBase: 0x%.8x \n ImageSize: 0x%.8x \n \n " ,IB,ImgSize ) ; printf ("ImageBase: 0x% .8 x \ n ImageSize: 0x% .8 x \ n \ n", IB, ImgSize);

 PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,FALSE,pid ) ; //otwieramy go hProc = OpenProcess (PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, pid); / / öffnen
 hProc == 0 ) //jesli sie nie udalo to wychodzimy if (hProc == 0) / / wenn sie nicht beenden
 (
 "can`t open process \n " ) ; printf ("can` t offenen Prozess \ n ");
 ; return 0;
 )
 buf = LoadMod ( IB ) ; //ladujemy plik char * buf = LoadMod (IB) / / Datei laden
 MainImageBase = IB;
 buf ) ; PE_file PE ((HMODULE) buf);
 PE ) ; //szukamy hookow IAT (& PE) / / Haken suchen
 buf ) ; //zwalniamy bufor zaalokowany w funkcji LoadMod free (buf) / / verlangsamt die Funktionen zugewiesenen Puffer LoadMod


	 ; return 0;
 ) 

Jetzt werden wir jede der Funktionen am Anfang FindImageBase ()-Funktion zu beschreiben sucht ImageBase Prozess und Größe

  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
  IB,DWORD * ImgSize ) //funkcja przyjmuje processID, wskazniki na bufory na dane FindImageBase DWORD (pid DWORD, DWORD * IB ImgSize DWORD *) / / Funktion akzeptiert ProcessID, Indikatoren der Puffer für die Daten
 (
 PROCESSENTRY32 lppe32;
 260 ] ; char buf [260];
	 buf, 0 , 260 ) ; memset (buf, 0, 260)
     HANDLE hSnapshot;
    TH32CS_SNAPPROCESS, 0 ) ; //robimy snapshot listy procesow hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) / / wir machen eine Momentaufnahme der Prozesse
     sizeof ( PROCESSENTRY32 ) ; lppe32. dwSize = sizeof (PROCESSENTRY32);

     lppe32 ) ; Process32First (hSnapshot, lppe32 &);
	     zu
         (
		 lppe32. th32ProcessID == pid ) //szukamy naszego procesu if (pid == lppe32. th32ProcessID) / / Prozess suchen für unsere
		 (
		 buf,lppe32. szExeFile ) ; strcpy (buf, lppe32. szExeFile);
		 break;
		 )

		 )
         Process32Next ( hSnapshot, & lppe32 ) ) ; while (Process32Next (hSnapshot & lppe32));
         ; CloseHandle (hSnapshot);
 buf [ 0 ] == 0 ) //jesli nie udalo sie znalesc zwracamy 0; if (buf [0] == 0) / / Wenn Sie nicht auf 0 zu finden Erträge;
 (
 ; return 0;
 )

 MODULEENTRY32 mod32;
 x ; std:: string x;

    TH32CS_SNAPMODULE, pid ) ; //robimy snapshot listy modolow znalezionego procesu hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, pid) / / wir fanden modolow eine Momentaufnahme Prozess
    sizeof ( MODULEENTRY32 ) ; mod32. dwSize = sizeof (MODULEENTRY32);

     mod32 ) ; Module32First (hSnapshot & mod32);
	      zu
         (
		 ; x = mod32. szExePath;
		 x. find ( buf ) ! = 0xFFFFFFFF ) //sprawdzamy czy to główna czesc programu if (x zu finden (buf)! 0xFFFFFFFF) / / sehen, ob das Programm ist das wichtigste Teil
		 (/ / Wenn ja, füllen Sie die relevanten Variablen
			 ( DWORD ) mod32. modBaseAddr ; * IB = (DWORD) mod32. ModBaseAddr;
			 mod32. modBaseSize ; * = ImgSize mod32. ModBaseSize;
		 )


		 )
         Module32Next ( hSnapshot, & mod32 ) ) ; while (Module32Next (hSnapshot & mod32));
         ; CloseHandle (hSnapshot);
 ; return 1;
 ) 

Also müssen wir schon ImageBase und ImageSize Prozess. Nun kommen wir zu der Ladefunktion des Code-Modul aus einer Datei auf, die ImageBase zeigt.
Dies wird nicht nur auf die wichtigsten Programm-Code, sondern auch alle Bibliotheken. Wir müssen die Datei zu erhalten, weil ImageSize ImageSize Modul
in der Erinnerung ganz leicht ändern, so dass man die Code-Bibliothek sah deckt nur die zweite, indem ImageSize Modul im Speicher.

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
  LoadMod ( DWORD IB ) char * LoadMod (DWORD IB)
 (
 260 ] ; ProcName char [260];
 HMODULE ) IB,ProcName, 260 ) ; //pobieramy pelna sciezke do binarki modulu GetModuleFileNameEx (hProc (HMODULE) IB ProcName, 260) / / grab den vollständigen Pfad zu einem binären Modul
 f ( ProcName,std :: ios :: binary ) ; //otwieramy plik std:: ifstream f (ProcName, std:: ios:: binary); / / Öffnen der Datei
 buf ; char * buf;
 0 ,std :: ios :: end ) ; f. seekg (0, std:: ios:: end);
 f. tellg ( ) ; int size = f. tellg ();
 0 ,std :: ios :: beg ) ; f. seekg (0, std:: ios:: beg);
 char * ) malloc ( size ) ; //alokujemy bufor(pamietajmy go pozniej zwolnic) buf = (char *) malloc (size) / / Zuweisung eines Puffers (erinnern Sie ihn dann los)
 buf, 0 ,size ) ; memset (buf, 0, size);
 0 ; int i = 0;
 char ch;
 i < size ) while (i <size)
 (
 ch ) ; //wczytujemy f. get (ch) / / Wir laden
 = ch ; buf [i] = ch;
 i + +;
 )
 ; f. close ();
 //zwracamy bufor Rückkehr buf; / / Zeichne Puffer
 ) 

Jetzt für die Hauptfunktion des IAT (), welche alle Funktionen der Anwendungen importiert finden soll und sehen, wenn Sie nicht Haken.
Dieses Feature kozysta von mehreren anderen Funktionen, die auch auf dem Weg Diskussion.

  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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 1991
 92
 93
 94
 95
 96
 PE_file * PE ) { HINSTANCE hInstance = ( HINSTANCE ) PE - > buf ; PIMAGE_DOS_HEADER pdosheader = ( PIMAGE_DOS_HEADER ) hInstance ; //pobieramy naglowki PIMAGE_NT_HEADERS pntheaders = ( PIMAGE_NT_HEADERS ) ( ( DWORD ) hInstance + pdosheader - > e_lfanew ) ; //i dalej... PIMAGE_SECTION_HEADER psectionheader = ( PIMAGE_SECTION_HEADER ) ( pntheaders + 1 ) ; PIMAGE_IMPORT_DESCRIPTOR pimportdescriptor = ( PIMAGE_IMPORT_DESCRIPTOR ) ( ( DWORD ) hInstance + PE - > RVA_to_RAW ( pntheaders - > OptionalHeader. DataDirectory [ 1 ] . VirtualAddress ) ) ; //znajdujemy adres IAT w naglowku PE ale jako ze szukamy w pliku a nie w procesie pamietamy o zamianie adresu z RVA na RAW PIMAGE_THUNK_DATA pthunkdatain, pthunkdataout ; PIMAGE_IMPORT_BY_NAME pimportbyname ; DWORD dw ; PCHAR ptr ; DWORD IB ; char * buf ; DWORD ImgSize ; PIMAGE_OPTIONAL_HEADER32 opt ; DWORD address ; DWORD IAT_adr ; DWORD read ; int i = 0 ; while ( pimportdescriptor - > TimeDateStamp ! = 0 || pimportdescriptor - > Name ! = 0 ) //pobieramy tak dlugo importy az sie skoncza :) { ptr = ( PCHAR ) ( ( DWORD ) hInstance + PE - > RVA_to_RAW ( ( DWORD ) pimportdescriptor - > Name ) ) ; //Nazwa biblioteki Dll i = 0 ; IB = FindModule ( ptr ) ; //Funkcja szukajaca ImageBase na podstawie nazwy biblioteki(omowie dalej) buf = LoadMod ( IB ) ; //opisana wczesniej funkcja ladujaca kod PE_file PE2 ( ( HMODULE ) buf ) ; //ladujemy kod do klasy opt = PE2. GetOptionalHeader ( ) ; //Pobieramy odpowiedni header ImgSize = opt - > SizeOfImage ; //pobieramy potrzebne nam pole z tego headera czyli ImageSize free ( buf ) ; //zwalniamy bufor pthunkdataout = ( PIMAGE_THUNK_DATA ) ( ( DWORD ) hInstance + PE - > RVA_to_RAW ( ( DWORD ) pimportdescriptor - > FirstThunk ) ) ; //pobieramy adres gdzie zaczynaja sie adresy w IAT if ( pimportdescriptor - > Characteristics == 0 ) { pthunkdatain = pthunkdataout ; //pobieramy adres struktury z ktorej pobierzemy nazwy funkcji } else { pthunkdatain = ( PIMAGE_THUNK_DATA ) ( ( DWORD ) hInstance + PE - > RVA_to_RAW ( ( DWORD ) pimportdescriptor - > Characteristics ) ) ; //to samo ;) } while ( pthunkdatain - > u1. AddressOfData ! = NULL ) //dopuki sa jeszcze jakies funkcje { if ( ( DWORD ) pthunkdatain - > u1. Ordinal & IMAGE_ORDINAL_FLAG ) //jesli Ordinal { LPSTR x = MAKEINTRESOURCE ( LOWORD ( pthunkdatain - > u1. Ordinal ) ) ; //Ordinal address = MainImageBase + ( pimportdescriptor - > FirstThunk + ( i * 4 ) ) ; //adres bufora na adres funkcji ReadProcessMemory ( hProc, ( LPCVOID ) address, & IAT_adr, 4 , & read ) ; //Odczytujemy adres funkcji znajdujacej sie pod adresem pobranym wyzej if ( IAT_adr < IB || IAT_adr > ( IB + ImgSize ) ) //sprawdzamy czy adres miesci sie w granicach swojego modułu { //jesli nie to sprawdzamy w jakim module znajduje sie funkcja DWORD HookBase = FindHookModule ( IAT_adr ) ; //pobieramy ImageBase modułu w ktorym znajduje sie ta funkcja.(Ta funkcje omowie pozniej) char modname [ 260 ] ; if ( HookBase == 0 ) //jesli nie ma takiego modulu oznacza ze jest to poprostu zaalokowana pamiec np. przez VirtualAllocEx { strcpy ( modname, "Virtual Memory" ) ; } else //jesli jest to pobieramy sciezke do tego modułu { GetModuleFileNameEx ( hProc, ( HMODULE ) HookBase,modname, 260 ) ; } printf ( "Ord: %x(%s) --- Hooked by %s(0x%.8x) \n " ,x,ptr,modname,IAT_adr ) ; //printfujemy wynik :) } } else { pimportbyname = ( PIMAGE_IMPORT_BY_NAME ) ( PE - > RVA_to_RAW ( ( DWORD ) pthunkdatain - > u1. AddressOfData ) + ( DWORD ) hInstance ) ; address = MainImageBase + ( pimportdescriptor - > FirstThunk + ( i * 4 ) ) ; //tutaj to samo co wyzej ReadProcessMemory ( hProc, ( LPCVOID ) address, & IAT_adr, 4 , & read ) ; if ( IAT_adr < IB || IAT_adr > ( IB + ImgSize ) ) { DWORD HookBase = FindHookModule ( IAT_adr ) ; char modname [ 260 ] ; if ( HookBase == 0 ) { strcpy ( modname, "Virtual Memory" ) ; } else { GetModuleFileNameEx ( hProc, ( HMODULE ) HookBase,modname, 260 ) ; } printf ( "%s(%s) --- Hooked by %s(0x%.8x) \n " , ( char * ) pimportbyname - > Name,ptr,modname,IAT_adr ) ; } } i ++ ; //nastepna funkcja pthunkdatain ++ ; pthunkdataout ++ ; } pimportdescriptor ++ ; //nastepna DLL`ka } } IAT void (* PE_file PE) (HINSTANCE hInstance = (HINSTANCE) PE -> buf; PIMAGE_DOS_HEADER pdosheader = (PIMAGE_DOS_HEADER) hInstance, / / Header holen PIMAGE_NT_HEADERS pntheaders = (PIMAGE_NT_HEADERS) ((DWORD) hInstance + pdosheader -> e_lfanew); / / und vieles mehr ... PIMAGE_SECTION_HEADER psectionheader = (PIMAGE_SECTION_HEADER) (pntheaders + 1); PIMAGE_IMPORT_DESCRIPTOR pimportdescriptor = (PIMAGE_IMPORT_DESCRIPTOR) ((DWORD) hInstance + PE -> RVA_to_RAW (pntheaders -> OptionalHeader. DataDirectory [1]. VirtualAddress)) / / finden Sie die Adresse des IAT in den PE-Header, sondern wie wir versuchen in der Datei und nicht in den Prozess, den wir pthunkdataout erinnere mich über das Ändern der Adresse des RVA, um RAW PIMAGE_THUNK_DATA pthunkdatain,; PIMAGE_IMPORT_BY_NAME pimportbyname; DWORD dw; PChar ptr, DWORD IB, char * buf, DWORD ImgSize; PIMAGE_OPTIONAL_HEADER32 opt; DWORD-Adresse; DWORD IAT_adr; DWORD lesen; int i = 0 while (pimportdescriptor -> TimeDateStamp! = 0 | | pimportdescriptor -> Name! = 0) / / fetch so lange, bis ich weg bin Imports:) (ptr = ( PChar) ((DWORD) hInstance + EP -> RVA_to_RAW ((DWORD) pimportdescriptor -> Name)) / / DLL name i = 0; FindModule IB = (ptr) / / Funktion ImageBase der Suche nach dem Namen der Bibliothek (Überblick unten) buf = LoadMod (IB) / / Funktion (zuvor beschriebenen Erhebung Code PE2 PE_file (HMODULE) buf); / / Lade den Code für die Klasse opt = PE2. GetOptionalHeader () / / Holen Sie sich das entsprechende Header-ImgSize = opt -> SizeOfImage / / wir müssen) packen die Kiste aus dem Header oder ImageSize free (buf; / / Lassen Sie die Puffer pthunkdataout = (PIMAGE_THUNK_DATA) ((DWORD) hInstance + PE -> RVA_to_RAW ((DWORD) pimportdescriptor -> FirstThunk)) / / fetch die Adresse, wo sie beginnen, die Adressen in der IAT if (pimportdescriptor -> Verhalten == 0) (pthunkdatain pthunkdataout = / / grab die Adresse, von der Sie Namen abzurufen, die Struktur-Funktion) else (pthunkdatain = (PIMAGE_THUNK_DATA) ((DWORD) hInstance + PE -> RVA_to_RAW ((DWORD) pimportdescriptor -> Verhalten)) / / dasselbe;)) while (pthunkdatain -> U1. AddressOfData! = NULL) / / wenn die Person noch einige Features (if ((DWORD) pthunkdatain -> U1. Ordinal & IMAGE_ORDINAL_FLAG) / / wenn Ordinal (LPSTR x = MAKEINTRESOURCE (LOWORD (pthunkdatain -> U1. Ordinal)); / / Ordinal-Adresse = MainImageBase + (pimportdescriptor -> FirstThunk + (und 4 *)) / / Adresse des Puffers an die Adresse Funktion ReadProcessMemory (hProc (LPCVOID) Adresse & IAT_adr, 4, & lesen); / / wahrnehmen, die Adresse der Funktion zu überprüfen gefunden in den oben heruntergeladen if (IAT_adr <IB | | IAT_adr> (IB + ImgSize)) / / wenn die Anschrift des Ortes ist August in seinem Modul (/ / wenn es nicht überprüfen das Modul, in dem es eine Funktion DWORD HookBase = FindHookModule (IAT_adr) / / grab der ImageBase das Modul, wo es diese Funktion. (Die Diskussion über die Funktionen später) char ModName [260]; if (HookBase == 0) / / Wenn es kein solches Modul bedeutet, dass es nur Memory zugewiesenen Speicher zum Beispiel durch VirtualAllocEx (strcpy (ModName, "Virtual");) else / / wenn es packen Sie den Pfad zu diesem Modul (GetModuleFileNameEx (hProc (HMODULE) HookBase, ModName, 260);) printf ("Ord: x% (% s)% s --- Hooked (0x% .8 x) \ n", x, ptr, ModName, IAT_adr) / / printfujemy Ergebnis:) ()) else pimportbyname = (PIMAGE_IMPORT_BY_NAME) (PE -> RVA_to_RAW ((DWORD) pthunkdatain -> U1. AddressOfData) + (DWORD) hInstance); address = MainImageBase + (pimportdescriptor -> FirstThunk + ( und * 4)) / / hier ist das gleiche wie oben ReadProcessMemory (hProc (LPCVOID) Adresse & IAT_adr, 4, & lesen); if (IAT_adr <IB | | IAT_adr> (IB + ImgSize)) (DWORD HookBase = FindHookModule (IAT_adr); char ModName [260]; if (HookBase == 0) (strcpy (ModName, "Virtual Memory");) else (GetModuleFileNameEx (hProc (HMODULE) HookBase, ModName, 260);) printf (" % s (% s)% s --- Hooked (0x% .8 x) \ n ", (char *) pimportbyname -> Name, ptr, ModName, IAT_adr))) und + / / nächste Funktion pthunkdatain + +; pthunkdataout + +;) pimportdescriptor + + / / nächste DLL `ka)) 

Es hatte nun zwei Eigenschaften, die im Detail zu besprechen

  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
 char * str ) //funkcja zamieniajaca string na male litery { int i = 0 ; int size = strlen ( str ) ; while ( i < size ) { str [ i ] = tolower ( str [ i ] ) ; i ++ ; } } DWORD FindModule ( char * mod_name ) { MODULEENTRY32 mod32 ; std :: string x ; HANDLE hSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPMODULE, pid ) ; //o tym juz mowilem mod32. dwSize = sizeof ( MODULEENTRY32 ) ; str_tolower ( mod_name ) ; Module32First ( hSnapshot, & mod32 ) ; do { str_tolower ( mod32. szExePath ) ; x = mod32. szExePath ; if ( x. find ( mod_name ) ! = 0xFFFFFFFF ) //jesli to szukany modul to zwracamy jego ImageBase { return ( DWORD ) mod32. modBaseAddr ; } } while ( Module32Next ( hSnapshot, & mod32 ) ) ; CloseHandle ( hSnapshot ) ; return 0 ; } DWORD FindHookModule ( DWORD Address ) //funkcja szukajaca ImageBase modulu w ktorym znajduje sie funkcja { MODULEENTRY32 mod32 ; HANDLE hSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPMODULE, pid ) ; mod32. dwSize = sizeof ( MODULEENTRY32 ) ; Module32First ( hSnapshot, & mod32 ) ; do { if ( Address >= ( DWORD ) mod32. modBaseAddr && Address <= ( DWORD ) ( mod32. modBaseAddr + mod32. modBaseSize ) ) //jesli adres znajduje sie w przedziale <ImageBase ; ImageBase+ImageSize> to zwracamy jego ImageBase { return ( DWORD ) mod32. modBaseAddr ; } } while ( Module32Next ( hSnapshot, & mod32 ) ) ; CloseHandle ( hSnapshot ) ; return 0 ; } str_tolower void (char * str) / / Funktion Drehen eine Zeichenfolge in Kleinbuchstaben (int i = 0; int size = strlen (str) while (i <size) (str [i] = tolower (str [i]); und + +;)) DWORD FindModule (char * mod_name) (MODULEENTRY32 mod32, std:: string x; HANDLE hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, pid); / / Ich habe dazu gesagt mod32. dwSize = sizeof (MODULEENTRY32) str_tolower (mod_name ) Module32First (hSnapshot & mod32) bis (str_tolower (mod32. szExePath), x = mod32. szExePath if (x-find (mod_name)! 0xFFFFFFFF) / / wenn die Suche-Modul ist eine Wendung seines ImageBase (return ( DWORD) mod32. modBaseAddr)) while (Module32Next (hSnapshot & mod32)) CloseHandle (hSnapshot) return 0;) FindHookModule DWORD (DWORD-Adresse) / / Funktion ImageBase Benutzer-Modul, wo die Funktion (MODULEENTRY32 mod32, Griff hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, pid) mod32. dwSize = sizeof (MODULEENTRY32) Module32First (hSnapshot & mod32) do (if (Adresse> = (DWORD) mod32. modBaseAddr & & Adresse <= (DWORD) (mod32. modBaseAddr + mod32. modBaseSize)) / / wenn der Adressbereich ist in der <ImageBase; ImageBase+ImageSize> Rückkehr wiederum seine ImageBase ((DWORD) mod32. modBaseAddr;)) while (Module32Next (hSnapshot & mod32)) CloseHandle (hSnapshot ) return 0;) 

Ich denke, das ist genug für heute.
Die vorgestellte Methode ist einfach und doch effektiv (obwohl ich natürlich auch umgehen können)
Wenn Sie möchten, dass bald etwas hinzufügen, wird vergessen! ;)

Ich füge den Code für VC + + und Binaries ;)
Link

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , ,

I'll be back

Posted in News am 23. Juni 2010 durch Grzonu

Nun diesem Beitrag wird aus dem allgemeinen Thema blog getrennt, aber ich denke, wir schreiben :)
Erstens möchte ich den Gerüchten, dass ich im Koma (wtf?) Abgeschnitten und Diskussion über dieses Thema, das Berichten zufolge fand am IRC xD war zu leugnen
Also ich bin gesund und munter im August :) Gespannt blickt die Ergebnisse der Abiturprüfung.

In naher Zukunft werde ich auf einige Witze für diesen Blog zu schreiben, was in letzter Zeit planen leer ist und immer mehr Menschen fragen, wenn ich etwas Neues zu schreiben.

Nun ist die Gelegenheit kozystajac einen schönen Urlaub ;)

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop

Der erste April

Posted in News am 1. April 2010 durch Grzonu

Nun, wie wir heute wissen, ist der Tag, an verschiedenen Witzen :)
Die erste, die ich (zu finden auf der Webseite, die angeblich shackowana Gynvael Coldwind LINK ) Seite sieht sehr realistisch ;)

Nun, wir sind für weitere Witze warten ;)

/ / Update
Nun waren wir endlich in :)
wie im August oder etwas niebezpiecznik.pl erwartet nämlich einen Beitrag verfasst über die Tatsache, dass niebezpiecznik.pl von der Emittentin erworben wurde ;) Herzlichen Glückwunsch für Erfindergeist :D

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , , , ,

Online Video-Suchmaschine

Posted in News am 16. März 2010 von Grzonu

Ich lief die Online-Video-Suchmaschine heute.
Szukajka durchsucht das Web nach interessanten Filmen über unsere Titel und zeigt das Ergebnis.
Fühlen Sie sich frei kozystania.

SUCHE

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , ,

Suchen Sie Informationen über eine Person

Geschrieben in Artikel am 14. März 2010 von Grzonu

Suchen Sie Informationen über eine Person

Oft manchmal passieren, dass wir auf eine bestimmte Person, so viele Informationen bekommen wollen. Okay, du nicht fragen, warum lassen Sie diese Daten, was wir lernen können.
Der ganze Ansatz ist es, den Faden folgen erreichte den Ball, das heißt zum Beispiel, mit einem oder zwei weitere znaleśćich vieles mehr. Sind sehr nützlich, um jede Suchmaschine, zu vergleichen, und andere derartige Tools.
Es ist sinnvoll, grundsätzlich jede minimale Informationen. IP, E-Mail, Bilder, Konten auf Social Networking Sites, Freunde, Zahl, gg, einen Avatar auf dem Forum nur alles, was wir haben. Was wir tun können, die IP zum Beispiel mit der Adresse ... hmmm wahrscheinlich nur, ob der Wirt, und alle Informationen über diese IP zum Beispiel kozystając zB ip.boo.pl
Die überwiegende Mehrheit kommt bei weitem nicht mehr Off-Site-Hosting-Server des ISP der gesuchten Person. Na ja, aber es ist schon etwas. Auf dieser Grundlage können wir bestimmen, ob die Person in Polen leben, in welchem Teil des Landes befindet.
Wenn Sie eine E-Mail-Adresse, die wir googlowac auf der Suche nach dieser Adresse, dank erhalten wir auf den Seiten, auf denen sie mit der Person, die wir wollten, was sie interessiert sind, registriert ist. Auf diesen Seiten suchen wir für Dinge wie die Anzahl der aufeinander folgenden gg, ein Avatar des Forums und anderen Orten. Wir können auf Ihrer Social-Networking-Profilen wie dem unsrigen get-Klasse oder Foto. Nun liegen die Dinge nicht wahrer Leckerbissen für Leute, die versuchen, etwas zu lernen, sehr oft Menschen sind, schreiben in ihrem Profil eine Menge Daten, wie Name, Adresse, Telefonnummer, gg. Wir können herausfinden, wer weiß, was passiert, wenn wir haben gemeinsame Freunde. Oft sehen wir Bilder aus dem Urlaub, von zu Hause aus Veranstaltungen und vielen anderen Orten. Manchmal ist es sogar möglich, herauszufinden, wo das Foto aufgenommen wurde, wenn die Kamera war wyposarzony GPS wie es der Fall mit der iPhone Kamera `s, welche beispielsweise können Sie speichern Daten über den Ort, wo Sie machten Fotos von dem, was wir lesen die niebezpieczniku
Bilder, Avatare und andere grafische Dateien können Website werden verwendet, um die zu lernen, etwas über die gesuchte Person zum Beispiel dank tineye.com , die uns zeigen, dass irgendwo in einem anderen Ort ist nicht mehr er selbst oder seine modifizierte Version. Nochmals vielen Dank, wir schlagen die Seite, von denen die gesuchte Person kozysta.
In den meisten Fällen können wir viele Informationen über die Person zu finden. Aber wenn jemand sehr darauf bedacht, dass Google sagt nichts über ihn, weil er sich in 90% der Menschen selbst Informationen über sich selbst zu finden, die ihnen erlaubt ist.

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , , , , ,

Forts.. Change

Posted in News am 4. März 2010 von Grzonu

Heute haben wir begonnen wurde, um eine neue, bessere, schnellere Hosting bewegen. Ehemalige tranferu begrenzen und Stelle, und oft genug hielt es fast an der Grenze. So war es, einen größeren Server zu 100x größere Fläche bewegt und mehr als 100fach größer Transfer Limit ;) Ich hoffe, dass wird das Seherlebnis verbessern ;) All dies dank der Firma, die nicht ganz az.pl, dass mir eine kostenlose Domain ist noch gab mir die Web-Hosting zu sehr erschwinglichen Preis :)

In ein paar Tagen einige Links nicht funktionieren kann, aber ich werde versuchen, es so bald wie möglich zu korrigieren.

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: ,

Änderung der Anschrift

Posted in News am 22. Februar 2010 von Grzonu

Fahrungen mit der heutigen Änderung der Adresse auf Seite grzonu.com.pl
alte Adresse wird noch in etwa einem Monat parallel mit dem neuen Betrieb.

Sagen Sie:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop