OllyAdvanced Bypass

Posté dans Autres , assembleur , le 17 août 2010 par Grzonu

Récemment, j'ai eu affaire à d'autres méthodes de détection d'un débogueur, et de le déconnecter.
Par exemple, a appliqué la méthode dont je l'ai écrit il ya deux postes. il Kozystala avec le paramètre de NtQuerySystemInformation SystemHandleInformation. Mais si quelqu'un a utilisé le plugin OllyAdvanced Ollyego de cette méthode n'est pas un son. J'ai essayé de provoquer cette syscall des fonctions précédentes. Mais encore OllyOdvanced modifier les résultats.
La même chose a été le cas NtOpenProcess fonction de sorte que je ne pouvais pas ouvrir le processus pour obtenir le débogueur gère, ou de trouver le PID du processus parent uniquement parce que les résultats changent OllyAdvanced du processus parent PID PID == mon procès. Comme à ses propres procédures d'appel syscall kozystalem OllyAdvanced ont à assumer une ou l'autre des crochets dans le noyau, mais cette méthode jusqu'ici rejeté la seule option pourrait être sysexit.
Mais comme vous le savez dans Windows, nous avons deux mécanismes pour l'appel syscall (SYSENTER et INT 2E)
SYSENTER après son retour en mode utilisateur et renvoie le INT 2E KiFastSystemCallRet retour pour les instructions.
Est suffisante pour induire ces fonctions et non par seulement par 2E INT SYSENTER à OllyAdvanced ne modifie pas les résultats et donc que l'on peut facilement détecter un débogueur.

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

Downloader Song

Posté dans C + + , Nouvelles le 23 Juillet 2010 par Grzonu

Je tiens à télécharger une chanson à lui-même entendu comme mp3 (bien sûr pour le 24 ;) )
Souvent je l'utiliser avec wrzuty et des services qui permettent à la chanson à télécharger depuis ce site.
Malheureusement, de manière wrzuta dernière modification de télécharger des fichiers à la manière dont elle est devenue comme Megavideo, qui à peu près, il est difficile de télécharger (le téléchargement, vous devez ouvrir le fichier XML et il sera un lien, mais il peut skozystac qu'à partir de l'adresse IP à partir desquelles il a été téléchargé XML)

Une partie de ce site qui permet de télécharger a cessé d'agir dans le cadre de l'OMS a présenté le script Java pour aller chercher nous une chanson. Comme avec Java, je n'ai pas installé et n'a pas l'intention d'installer de sorte que nous avons écrit une applet Java en C + + qui télécharge la chanson de wrzuty.
Applet j'ai écrit pour moi, mais j'ai décidé de ne rendre accessible à un public plus large. Donc si quelqu'un est invité à venir dans maniable pour le téléchargement ;)

TELECHARGER

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

Une autre méthode de détection de débogueur

Posté dans C + + Le 6th Juillet 2010 en Grzonu

Récemment, je suis retourné à l'étude des méthodes de détection des débogueurs et inventé une méthode basée sur les caractéristiques NtQuerySystemInformation possible que quelqu'un déjà touché plus tôt, mais je ne pouvais pas trouver quelque chose à ce sujet.

La méthode est très simple en utilisant la fonction avec le paramètre NtQuerySystemInformation SystemHandleInformation
poignées ouverte par toutes les applications. Pinces êtes à la recherche de procédés qui sont des poignées de nos processus et de vérifier si ce processus entre les pinces ne sont pas il ya un clip du type qui est 0xB DebugObject s'il ya un signe peut-être que nous sommes le débogage (mais pas sûr à 100%)

Temps pour un code :)

nous avons besoin de variables et les fonctions:

  1
 2
 3
 4
 5
 6
 7
 8
 9
  NTSTATUS NTSTATUS;
 ; DWORD dwParentPID 0xFFFFFFFF =;
 H_proc HANDLE h;
 ULONG besoin;	
 ; isDebug BOOL = 0;


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

Maintenant, appelez la fonction NtQuerySystemInformation

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

 SystemHandleInformation, handles, size, & need ) ; NTSTATUS = NtQuerySystemInformation (SystemHandleInformation, poignées, la taille, et nécessité);
 ntStatus ! = 0 ) //jesli za maly bufor alokujemy wiekszy if (NTSTATUS! = 0) / / si le tampon trop petite attribue la plus grande
					    (
                         handles ) ; libre (poignées);
                         = Besoin de taille;
                         SYSTEM_HANDLE_INFORMATION * ) malloc ( size ) ; poignées = (* SYSTEM_HANDLE_INFORMATION) malloc (taille);
		 need ) ; NtQuerySystemInformation (SystemHandleInformation, poignées, la taille, et nécessité);
						 ) 

momecie cités dans cet ouvrage, nous avons toutes les poignées poignées disponibles dans le système.
Nous avons effectué une recherche et, parmi eux il n'ya pas de colliers de serrage du type 0 × 7 est un processus.
Si vous trouver si nous ouvrons le processus avec les droits de PROCESS_DUP_HANDLE
et le double de la poignée, mais dans notre processus. Ensuite, vérifier si il ya une poignée de nos processus, et si oui, vérifier si les pinces de ce processus n'est pas le type de pinces DebugObject

Et maintenant la pratique:

  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 (poignées -> Poignées [i]. ObjectType == 7) / / Processus
	 (
		 PROCESS_DUP_HANDLE, FALSE,handles - > Handles [ i ] . OwnerPid ) ; h = OpenProcess (PROCESS_DUP_HANDLE, FALSE, poignées -> Poignées [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, (poignée), poignées -> Poignées [i]. HandleValue, GetCurrentProcess (), et 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 (poignées -> Poignées [i]. OwnerPid == poignées -> Poignées [i]. OwnerPid & & poignées -> Poignées [i]. ObjectType == 0xB)
						 (
						 ; isDebug = 1;
						 )
					 j + +;
					 )
				 )
			 )
		 )
	 )
 ) 

À la fin des résultats de recherche et le tampon de sortie printfujemy

  1
 2
 3
 4
 5
 6
 7
 8
 9
  isDebug == 1 ) if (isDebug == 1)
 (
 "Debugger wykryty \n " ) ; printf ("débogueur détecté \ n");
 )
 d'autre
 (
 "Nie wykryto debuggera \n " ) ; printf ("Il n'y a pas n \ débogueur");
 )
	 handles ) free ( handles ) ; if (poignées) libre (poignées); 

Le code programme dans son ensemble peut être téléchargé ICI

PS.
Pure olly, cette méthode est facilement détectable, mais par exemple avec le plugin StrongOD Olly l'est pas.
Ce plugin permet les pinces m.in liste de ce processus est vide. Il est également tout à fait particulier, car chaque programme a une certaine emprise. En outre, nous pouvons vérifier notre processus qui gère le parent a (ou n'est pas du tout)

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

Détection des IAT hookingu

Posté dans C + + , de sécurité le 25 Juin 2010 par Grzonu

Comme je l'ai promis que j'ai fait. Aujourd'hui, je veux discuter IAT accrochage, et la façon de les détecter.
Depuis quelque temps, je vais essayer d'écrire quelque chose sur hookach ETA et les modifications de code.

Eh bien, nous y voilà.
Premièrement, quelques mots ce qui est le TAI se accrochage - est une fonction hookowania technique en remplaçant la fonction adresse qui se situe dans l'adresse IAT
fonction contenue dans une autre DLL, ou tout simplement quelque part dans la mémoire. A propos de la création même des crochets écrit, n'est-ce pas prête à des dizaines de
bibliothèques, des centaines d'exemples de code donc je pense que ceux qui ne maîtrisent pas le plus tôt possible devrait combler les lacunes kozystajac de Google.

Quelques explications sur la détection de ces crochets - décrira les points que vous avez à faire:
Première Exe situé dans le processus où vous souhaitez chercher des crochets.
2ème Nous sommes situés dans ce dossier et vérifier les tables API toutes les fonctions contenues dans le TAI
3e Nous vérifions par la façon dont le module. IAT doit être à la fonction.
4ème Vérifiez ImageBase et la taille du module et de vérifier si l'adresse de la RAI est de l'ordre
Si oui, tout est OK si vous ne cochez pas le module qui affiche l'adresse

Voilà pour la théorie.
Le temps de pratiquer.

têtes nécessaires:

  1
 2
 3
 4
 5
 6
 7
 8
 9
  # Include <windows.h>
 # Include <stdio.h>
 # Include <string>
 # Inclure <Tlhelp32.h>
 # Include <vector>
 # Inclure <Psapi.h>
 # Inclure <fstream>
 # Include "PE_class.h" / / ma classe pour gérer les fichiers PE (il fournit avec le reste du code)
 Pragma (commentaire # lib, "psapi.lib"); 

Les variables globales:

  1
 2
 3
  hProc poignée / / gérer le processus de
 DWORD pid / / ProcessID
 DWORD MainImageBase / / processus 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 API Hook détecteur Grzonu v. 1.0 \ n \ n");

 argc ! = 2 ) //sprawdzamy czy podano parametr jesli nie to wychodzimy if (argc! = 2) / / vérifie si le paramètre est donné si elle ne s'éteint pas
 (
	 "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]) / / récupère le PID
 ; IB DWORD = 0;
 ; ImgSize DWORD = 0;
 IB, & ImgSize ) ; //Znajdujemy ImageBase i Size procesu FindImageBase (pid, et IB, & ImgSize) / / trouver le processus et la taille ImageBase
 "ImageBase: 0x%.8x \n ImageSize: 0x%.8x \n \n " ,IB,ImgSize ) ; printf ("ImageBase: 0x% .8 \ n ImageSize x: 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); / / ouvrir
 hProc == 0 ) //jesli sie nie udalo to wychodzimy if (hProc == 0) / / si elles n'ont pas réussi à cesser de fumer
 (
 "can`t open process \n " ) ; printf ("ne peux pas ouvrir \ n" processus);
 ; return 0;
 )
 buf = LoadMod ( IB ) ; //ladujemy plik char * buf = LoadMod (IB) / / charger le fichier
 MainImageBase = IB;
 buf ) ; PE PE_file ((HMODULE) buf);
 PE ) ; //szukamy hookow IAT (et PE) / / Rechercher des crochets
 buf ) ; //zwalniamy bufor zaalokowany w funkcji LoadMod libre (buf); / / Communiqué de la mémoire tampon allouée dans la fonction LoadMod


	 ; return 0;
 ) 

Maintenant, nous allons décrire chacune des fonctions au début FindImageBase () est le processus de recherche et de la taille ImageBase

  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 *) / / fonction accepte ProcessID, les indicateurs des tampons pour les données
 (
 PROCESSENTRY32 lppe32;
 260 ] ; Char buf [260];
	 buf, 0 , 260 ) ; memset (buf, 0, 260);
     hSnapshot poignée;
    TH32CS_SNAPPROCESS, 0 ) ; //robimy snapshot listy procesow hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) / / nous faire un aperçu des processus
     sizeof ( PROCESSENTRY32 ) ; lppe32. dwSize = sizeof (PROCESSENTRY32);

     lppe32 ) ; (HSnapshot Process32First, & lppe32);
	     à
         (
		 lppe32. th32ProcessID == pid ) //szukamy naszego procesu if (pid == lppe32. th32ProcessID) / / recherche de notre processus
		 (
		 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) / / Si vous avez échoué à trouver renvoie 0;
 (
 ; return 0;
 )

 MODULEENTRY32 mod32;
 x ; std:: string x;

    TH32CS_SNAPMODULE, pid ) ; //robimy snapshot listy modolow znalezionego procesu hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, pid) / / Nous avons trouvé modolow un processus de capture instantanée
    sizeof ( MODULEENTRY32 ) ; mod32. dwSize = sizeof (MODULEENTRY32);

     mod32 ) ; (HSnapshot Module32First, & mod32);
	      à
         (
		 ; x = mod32. szExePath;
		 x. find ( buf ) ! = 0xFFFFFFFF ) //sprawdzamy czy to główna czesc programu if (x trouver (BUF)! = 0xFFFFFFFF) / / vérifier si la partie principale du programme
		 (/ / Si oui, remplir les variables pertinentes
			 ( DWORD ) mod32. modBaseAddr ; * IB = (DWORD) mod32. ModBaseAddr;
			 mod32. modBaseSize ; * = ImgSize mod32. ModBaseSize;
		 )


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

Nous avons donc plus nécessaire et ImageSize ImageBase processus. Nous en arrivons maintenant à la fonction de charge du module de code à partir d'un fichier sur qui montre ImageBase.
Il couvrira non seulement le code du programme principal, mais également toutes les bibliothèques. Nous avons besoin pour obtenir le fichier, car ImageSize ImageSize module
dans la mémoire très facilement le modifier de sorte que l'on regardait à la bibliothèque de code couvre seulement la deuxième en changeant le module ImageSize en mémoire.

  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) / / récupère le chemin complet vers un module binaire
 f ( ProcName,std :: ios :: binary ) ; //otwieramy plik std:: ifstream f (ProcName, std:: ios:: binary); / / ouvrir le fichier
 buf ; char * buf;
 0 ,std :: ios :: end ) ; f. seekg (0, std:: ios:: end);
 f. tellg ( ) ; int taille = f. tellg ();
 0 ,std :: ios :: beg ) ; f. seekg (0, std:: ios:: beg);
 char * ) malloc ( size ) ; //alokujemy bufor(pamietajmy go pozniej zwolnic) buf = (char *) malloc (taille) / / allouer un tampon (se souvenir de lui, puis relâchez)
 buf, 0 ,size ) ; memset (buf, 0, taille);
 0 ; int i = 0;
 char ch;
 i < size ) while (i <taille)
 (
 ch ) ; //wczytujemy f. get (CH) / / on charge
 = ch ; buf [i] = ch;
 i + +;
 )
 ; f. close ();
 //zwracamy bufor retour buf; / / dessin du tampon
 ) 

Maintenant, pour la fonction principale du TAI () qui vise à trouver toutes les fonctions importées par les demandes et de voir si vous n'êtes pas les crochets.
Cette kozysta caractéristique de plusieurs autres fonctions qui aussi sur la discussion de manière.

  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
 91
 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 } } void IAT (* PE_file PE) (HINSTANCE hInstance = (HINSTANCE) PE - buf>; pdosheader PIMAGE_DOS_HEADER = (PIMAGE_DOS_HEADER) hInstance, / / on va chercher PIMAGE_NT_HEADERS têtes pntheaders = (PIMAGE_NT_HEADERS) ((DWORD) pdosheader + hInstance - e_lfanew>); / / ... et PIMAGE_SECTION_HEADER psectionheader plus = (PIMAGE_SECTION_HEADER) (pntheaders + 1); pimportdescriptor PIMAGE_IMPORT_DESCRIPTOR = (PIMAGE_IMPORT_DESCRIPTOR) ((DWORD) hInstance + PE -> RVA_to_RAW (pntheaders -> OptionalHeader. DataDirectory [1]. VirtualAddress)); / / trouver l'adresse du TAI dans l'en-tête PE, mais que nous cherchons dans le fichier et non pas dans le processus, nous nous souvenons de changer l'adresse de la RVA à RAW PIMAGE_THUNK_DATA pthunkdatain, pthunkdataout; pimportbyname PIMAGE_IMPORT_BY_NAME; DW DWORD; ptr PChar, DWORD IB, char * buf, DWORD ImgSize; PIMAGE_OPTIONAL_HEADER32 opt; adresse DWORD; DWORD IAT_adr; DWORD lire; int i = 0 while (pimportdescriptor -> TimeDateStamp! = 0 | | pimportdescriptor -> Nom! = 0) / / on va chercher si longtemps jusqu'à ce que je suis allé Importations:) (ptr = ( PChar) ((DWORD) hInstance + PE -> RVA_to_RAW ((DWORD) ->) Nom) / / DLL i = 0 pimportdescriptor nom; FindModule IB = (ptr) / / fonction ImageBase recherche le nom de la bibliothèque (aperçu ci-dessous) buf = LoadMod (IB) / / fonction décrite précédemment charge code PE_file PE2 ((HMODULE) buf); / / Chargement du code de la classe opt = PE2. GetOptionalHeader () / / Obtention de la ImgSize en-tête approprié = opt -> SizeOfImage / / nous avons besoin de récupérer la boîte de la tête ou le libre ImageSize (buf); / / Communiqué de l'pthunkdataout buffer = (PIMAGE_THUNK_DATA) ((DWORD) hInstance + PE -> RVA_to_RAW ((DWORD) pimportdescriptor -> FirstThunk)) / / récupération l'adresse où ils commencent les adresses dans le TAI if (pimportdescriptor -> Comportement == 0) (pthunkdataout pthunkdatain = / / récupère l'adresse de la structure à partir de laquelle vous récupérez le nom de la fonction) d'autre (pthunkdatain = (PIMAGE_THUNK_DATA) ((DWORD) hInstance + PE -> RVA_to_RAW ((DWORD) pimportdescriptor -> Comportement)) / / même;)) while (pthunkdatain -> U1. AddressOfData! = NULL) / / sauf si la personne sont encore de certaines fonctionnalités (if ((DWORD) pthunkdatain -> U1. ordinales et IMAGE_ORDINAL_FLAG) / / si ordinal (LPSTR x = MAKEINTRESOURCE (LOWORD (pthunkdatain -> U1. ordinales)); / / adresse ordinal = MainImageBase + (pimportdescriptor -> FirstThunk + (i * 4)) / / adresse du buffer à la fonction de l'adresse ReadProcessMemory (hProc (LPCVOID) adresse, et IAT_adr, 4, et en lecture); / / percevoir l'adresse de la fonction situé au-dessus-téléchargées (IAT_adr <IB | | IAT_adr> (IB + ImgSize)) / / vérifie si l'adresse de l'endroit est août au sein de son module (/ / si elle ne vérifie pas le module dans lequel il ya une fonction DWORD HookBase = FindHookModule (IAT_adr) / / saisir le ImageBase le module dans lequel la fonction est situé. (Cette discussion des fonctions plus tard) [ModName char 260]; if (HookBase == 0) / / s'il n'y a pas de module de tels moyens qu'il est juste la mémoire allouée par exemple, VirtualAllocEx (strcpy (ModName, «mémoire virtuelle»);) else / / si elle est de récupérer le chemin d'accès à ce module (GetModuleFileNameEx (hProc, (HMODULE) HookBase, ModName, 260);) printf ("Ord:% x (% s) --- Hooked% s (0x% .8 X) \ n", x, ptr, ModName, IAT_adr) / / Le résultat printfujemy:))) autre (pimportbyname = (PIMAGE_IMPORT_BY_NAME) (PE -> RVA_to_RAW ((DWORD) pthunkdatain -> U1. AddressOfData) + (DWORD) hInstance); address = MainImageBase + (pimportdescriptor -> FirstThunk + ( et * 4)) / / est ici le même que ci-dessus ReadProcessMemory (hProc (LPCVOID) adresse, et IAT_adr, 4, & lire), si (IAT_adr <IB | | IAT_adr> (IB + ImgSize)) (DWORD HookBase = FindHookModule (IAT_adr); [ModName char 260]; if (HookBase == 0) (strcpy (ModName, «mémoire virtuelle»);) autre (GetModuleFileNameEx (hProc, (HMODULE) HookBase, ModName, 260);) printf (" % s (% s) --- Hooked% s (0x% .8 X) \ n ", (char *) pimportbyname -> Nom, ptr, ModName, IAT_adr);)) + + i; / / pthunkdatain fonction suivante + +; pthunkdataout + +;) pimportdescriptor + + / / Next DLL »ka)) 

Il a maintenant deux caractéristiques qui discuter en détail

  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 ; } void str_tolower (char * str) / / fonction de transformer une chaîne en minuscules (int i = 0; int taille = strlen (str) while (i <taille) (str [i] = tolower (str [i]), et + +;)) DWORD FindModule (mod_name char *) (MODULEENTRY32 mod32, std:: string x; hSnapshot handle = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, pid); / / je l'ai dit à propos de cette mod32. dwSize = sizeof (MODULEENTRY32) str_tolower (mod_name ) Module32First (hSnapshot, & mod32), à (str_tolower (szExePath mod32.), x = mod32. szExePath si (x-find (mod_name)! = 0xFFFFFFFF) / / Si le module de recherche est un tour de son ImageBase (retour ( DWORD) mod32. modBaseAddr;)) while (Module32Next (hSnapshot, & mod32)) CloseHandle (hSnapshot) return 0;) FindHookModule DWORD (DWORD) Adresse / ImageBase fonction / Module de recherche où la fonction (MODULEENTRY32 mod32; MANCHE hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, pid); mod32. dwSize = sizeof (MODULEENTRY32) Module32First (hSnapshot, & mod32) faire (si (Adresse> = (DWORD) mod32. modBaseAddr & & Adresse <= (DWORD) (mod32. modBaseAddr mod32. modBaseSize)) / / si l'adresse est dans la gamme <ImageBase; ImageBase+ImageSize> de tourner son ImageBase (retour (DWORD) mod32. modBaseAddr +;)) while (Module32Next (hSnapshot, & mod32)) CloseHandle (hSnapshot ) return 0;) 

Je pense que c'est assez pour aujourd'hui.
La méthode présentée est simple et pourtant efficace (mais bien sûr, je peux contourner)
Si j'ai oublié quelque chose qui va ajouter bientôt! ;)

Je joins le code de VC + + et les binaires ;)
Lien

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

Je serai de retour

Publié dans Nouvelles le 23 Juin 2010 en Grzonu

Eh bien, ce poste est séparé du blog thème général mais je pense que nous écrivons :)
Tout d'abord je tiens à démentir les rumeurs que j'ai été dans le coma (wtf?) Et couper la discussion sur ce sujet qui aurait eu lieu sur IRC xD
Je suis donc bel et bien en août :) attend avec impatience les résultats du baccalauréat.

Dans un proche avenir je prévois d'écrire des blagues pour cette histoire de blog est vide et récents de plus en plus demander quand j'écris quelque chose de nouveau.

Eh bien kozystajac l'occasion est un jour férié Nice ;)

Partager:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop

Poisson d'avril

Publié dans Nouvelles , le 1er avril 2010 par Grzonu

Eh bien, comme nous le connaissons aujourd'hui est le jour des blagues divers :)
La première que j'ai trouvée sur la page web qui aurait shackowana Gynvael Coldwind ( LINK ) page semble très réaliste ;)

Eh bien, nous attendons encore des blagues ;)

/ / Mise à jour
Eh bien, nous étions enfin dans :)
comme prévu en août ou quelque chose niebezpiecznik.pl savoir un post rédigé sur le fait que niebezpiecznik.pl a été acheté par l'émetteur ;) Félicitations pour l'ingéniosité :D

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

vidéo moteur de recherche en ligne

Publié dans Nouvelles le 16 Mars 2010 par Grzonu

J'ai couru le moteur de recherche vidéo en ligne aujourd'hui.
Szukajka recherche dans le Web à la recherche de films intéressants sur notre titre et affiche le résultat.
N'hésitez pas à kozystania.

RECHERCHE

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

Vous cherchez des renseignements sur une personne

Publié dans Articles le 14 Mars 2010 en Grzonu

Vous cherchez des renseignements sur une personne

Souvent, parfois arriver que nous voulons obtenir une certaine personne autant d'informations. Bon, ne vous vous demandez pourquoi vous laissez ces données que nous pouvons apprendre.
L'approche globale consiste à suivre le fil a atteint la balle, qui est, par exemple, avoir un ou deux de plus znaleśćich beaucoup plus. Sont très utiles pour tout moteur de recherche, de comparer et d'autres outils tels.
Il est utile, en principe, aucune information minimale. IP, mail, photos, comptes sur des sites de réseautage social, les amis, le nombre, GG, un avatar sur le forum tout ce que nous avons. Qu'est-ce que nous pouvons faire par exemple avec l'adresse IP ... hmmm probablement seulement vérifier l'hôte, et tout d'infos sur cette IP, par exemple par exemple kozystając ip.boo.pl
La grande majorité ne reçois rien serveur plus hors site d'hébergement de l'ISP de la personne recherchée. Eh bien, mais c'est déjà quelque chose. Sur cette base, nous pouvons déterminer si la personne habite en Pologne, dans laquelle une partie du pays se trouve.
Si vous avez une adresse e-mail nous googlowac à la recherche de cette adresse, Merci nous arrivons à les pages sur lesquelles il est inscrit auprès de la personne que nous voulions, ce qui les intéresse. Sur ces pages, nous recherchons des choses telles que le nombre de GG consécutive, un avatar du forum et d'autres endroits. Nous pouvons obtenir sur vos profils de réseaux sociaux tels que le nôtre-classe, ou une photo. Eh bien, les choses ne sont pas vrai régal pour les gens qui essaient d'apprendre quelque chose de très souvent les gens à écrire dans leur profil d'un grand nombre de données telles que nom, adresse, numéro de téléphone, GG. Nous ne pouvons savoir qui sait, si nous avons des amis communs. Souvent, nous voyons des images de vacances, de maison, d'événements et beaucoup d'autres endroits. Parfois, il est même possible de savoir où la photo a été prise, si la caméra était dans le wyposarzony GPS comme c'est le cas avec l'appareil photo iPhone `s, qui vous permet d'enregistrer des données sur l'emplacement où vous avez pris des photos de ce que nous lisons, par exemple l'niebezpieczniku
Images, avatars et autres fichiers graphiques peuvent être utilisés pour apprendre quelque chose sur la personne recherchée, par exemple, Merci pour le site tineye.com qui nous montrent que quelque part dans un autre endroit n'est plus lui ou sa version modifiée. Merci encore, nous avons atteint la page à partir de laquelle la personne recherchée kozysta.
Dans la plupart des cas, nous sommes en mesure de trouver beaucoup d'informations sur la personne. Mais si quelqu'un est très soucieux de Google qui ne dit rien de lui, c'est qu'il peut parce que dans 90% des gens eux-mêmes fournir des informations sur eux-mêmes qui leur permettent de trouver.

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

Suite. Changement

Publié dans Nouvelles le 4 Mars 2010 par Grzonu

Aujourd'hui, j'ai commencé à aller sur le site pour une nouvelle et meilleure, plus rapide d'hébergement. limite tranferu Ancien et le lieu, et s'arrêta assez fois presque à la frontière. Je propose la motion a été un plus gros serveur avec un espace plus grand et 100x 100x plus de limite de transfert de plus ;) J'espère que cela va améliorer l'expérience visuelle ;) Tout cela Merci à la société qui n'est pas tout à fait az.pl qui m'a donné un domaine gratuit est encore m'a donné l'hébergement web à prix très abordable :)

Dans quelques jours, certains liens ne fonctionnent pas, mais je vais essayer de la corriger dès que possible.

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

Changement d'adresse

Publié dans Nouvelles le 22 Février 2010 en Grzonu

Ence Avec aujourd'hui de changer l'adresse sur la page grzonu.com.pl
ancienne adresse continue de fonctionner en parallèle sur un mois avec la nouvelle.

Partager:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop