OllyAdvanced Байпасс

Опубликовано в Другие , ассемблер от 17 августа 2010 по Grzonu

В последнее время я занимался новые методы обнаружения отладчика, и отключить его.
Так, например, применяется методика, о которой я писал два сообщения назад. Kozystala его с параметром NtQuerySystemInformation SystemHandleInformation. Но если кто-то использовал плагин OllyAdvanced Ollyego этого метода не является обоснованной. Я старался, чтобы спровоцировать этот неизвестный от прежних функций. Но все-таки OllyOdvanced изменить результаты.
То же самое было в случае NtOpenProcess функцию, так что я не могу открыть процесс, чтобы получить отладчик ручки, или найти PID родительского процесса только потому, что OllyAdvanced результаты изменения от родительского процесса PID == PID моем процессе. Как и в своих собственных процедур kozystalem вызова системного вызова OllyAdvanced должны либо считать крючки в ядре, но этот метод до сих пор отвергал единственным вариантом может быть sysexit.
Но, как вы знаете, в Windows, у нас есть два механизма для вызова системного вызова (SYSENTER и INT 2Е)
SYSENTER после возвращения в пользовательском режиме и возвращает INT 2Е KiFastSystemCallRet назад для получения инструкций.
Достаточно, чтобы вызвать эти функции, а не просто SYSENTER 2Е INT к OllyAdvanced не изменяет результаты и, таким образом, что можно было бы легко обнаружить отладчик.

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Теги: , , , , ,

Песня Downloader

Опубликовано в C + + , Новости на 23 июля 2010 по Grzonu

Я хотел, чтобы скачать песню сам слышал, как mp3 (конечно, за 24 ;) )
Я часто использовать этот wrzuty и услуги, которые позволяют скачать песню с этого сайта.
К сожалению, последний способ wrzuta скачивать файлы изменил его похожим образом, что довольно трудно Megavideo трудно скачать (скачать, Вам необходимо открыть файл XML, и он будет ссылка, но она может skozystac только адрес IP, из которого он был загружен XML)

Часть этого сайта, что позволяет загружать перестала действовать как часть тех, кто представил сценарий Java за нами песни. Как и в Java, я еще не установлен и не намерен установить, чтобы мы написали апплет Java в C + +, который скачивает песню из wrzuty.
Апплет я писал для себя, но нет, я решил сделать его доступным для более широкой аудитории. Так что если кто-то предложил, чтобы прийти в удобный для загрузки ;)

СКАЧАТЬ

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Тэги: , , ,

Другой способ обнаружения отладчика

Опубликовано в C + + С 6 июля 2010 по Grzonu

Недавно я вернулся к изучению методов для обнаружения отладчиков и изобрел метод, основанный на особенностях NtQuerySystemInformation возможно, что кто-то уже ударил его раньше, но я не мог найти что-нибудь о нем.

Метод очень прост, используя функцию с параметром NtQuerySystemInformation SystemHandleInformation
поручни открыт для всех приложений. Зажимы ищете процессов, ручки в наш процесс и проверить, если этот процесс между зажимами, не есть клип, тип которого 0xB DebugObject, если есть знак, может быть, мы отладки (хотя и не уверен на 100%)

Время для некоторых код :)

мы должны переменные и функции:

  1
 2
 3
 4
 5
 6
 7
 8
 9
  NTSTATUS NTSTATUS;
 ; DWORD dwParentPID = 0xFFFFFFFF;
 H_proc Ручка ч;
 ULONG необходимости;	
 ; BOOL isDebug = 0;


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

Теперь вызываем функцию NtQuerySystemInformation

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
  ; ULONG размер = 0x1000;
 ( SYSTEM_HANDLE_INFORMATION * ) malloc ( size ) ; SYSTEM_HANDLE_INFORMATION ручки * = (SYSTEM_HANDLE_INFORMATION *) таНос (размера);

 SystemHandleInformation, handles, size, & need ) ; NTSTATUS = NtQuerySystemInformation (SystemHandleInformation, ручки, размер, и необходимости);
 ntStatus ! = 0 ) //jesli za maly bufor alokujemy wiekszy если (NTSTATUS! = 0) / / если буфер слишком мал, выделяет больше
					    (
                         handles ) ; свободный (ручки);
                         размер = необходимости;
                         SYSTEM_HANDLE_INFORMATION * ) malloc ( size ) ; ручки = (SYSTEM_HANDLE_INFORMATION *) таНос (размера);
		 need ) ; NtQuerySystemInformation (SystemHandleInformation, ручки, размер, и необходимости);
						 ) 

momecie цитируется в этой структуре мы все ручки ручки, имеющиеся в системе.
Мы искали и среди них Есть не зажимы типа 0 × 7 представляет собой процесс.
Если вам так мы открываем процесс с правами PROCESS_DUP_HANDLE
и дубликат обрабатывать, но в нашем процессе. Затем проверить является ли оно ручку наш процесс, и если да, проверьте, зажимы из этого процесса не зажимы DebugObject

А теперь практика:

  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 j = 0 ; for ( i = 0 ; i < handles - > HandleCount ; i ++ ) { if ( handles - > Handles [ i ] . ObjectType == 7 ) //Process { h = OpenProcess ( PROCESS_DUP_HANDLE, FALSE,handles - > Handles [ i ] . OwnerPid ) ; if ( h ! = 0 ) { if ( DuplicateHandle ( h, ( HANDLE ) handles - > Handles [ i ] . HandleValue , GetCurrentProcess ( ) , & h_proc, 0 , FALSE, DUPLICATE_SAME_ACCESS ) ) { if ( GetProcessId ( h_proc ) == GetCurrentProcessId ( ) ) { j = 0 ; while ( j < handles - > HandleCount ) { if ( handles - > Handles [ i ] . OwnerPid == handles - > Handles [ j ] . OwnerPid && handles - > Handles [ j ] . ObjectType == 0xb ) { isDebug = 1 ; } j ++ ; } } } } } } Int = 0; Int J = 0, потому что  = 0; я <handles -> HandleCount я + +) (если (ручки -> Ручки [я]. ObjectType == 7) / / Процесс  = OpenProcess (PROCESS_DUP_HANDLE, FALSE, ручки -> Ручки [я]. OwnerPid), если (ч! = 0) (если (DuplicateHandle (ч, (ручка), ручки -> Ручки [я]. HandleValue, GetCurrentProcess (), и h_proc, 0, FALSE, DUPLICATE_SAME_ACCESS)) (если (GetProcessId (h_proc) == GetCurrentProcessId ()) (J = 0, а (J <handles -> HandleCount) (если (ручки -> Ручки [я]. OwnerPid == ручки - > Ручки [я]. OwnerPid и и ручки -> Ручки [я]. 0xB == ObjectType) (isDebug = 1;) J + +;)))))) 

В конце результатов поиска printfujemy и освобождения буфера

  1
 2
 3
 4
 5
 6
 7
 8
 9
  isDebug == 1 ) если (isDebug == 1)
 (
 "Debugger wykryty \n " ) ; Е ("Debugger обнаружены \ п");
 )
 еще
 (
 "Nie wykryto debuggera \n " ) ; Е ("Был нет \ п отладчик");
 )
	 handles ) free ( handles ) ; если (ручки) бесплатно (ручки); 

Весь код программы можно скачать ЗДЕСЬ

PS.
Чистая Olly, этот метод можно легко обнаружить, но, например, с StrongOD плагин Olly это не так.
Этот плагин делает список m.in зажимы для этого процесса является пустым. Кроме того, довольно отличается тем, что каждая программа имеет несколько рук. Кроме того, мы можем проверить наш процесс родителей, ручки (или не имеет вообще)

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Теги: , ,

Обнаружение IAT hookingu

Опубликовано в C + + , безопасности на 25 июня 2010 по Grzonu

Как я и обещал так я и сделал. Сегодня я хочу обсудить IAT подключения, а также как обнаружить их.
В течение некоторого времени я постараюсь написать что-нибудь о hookach ETA и модификации кода.

Ну, здесь мы идем.
Сначала несколько слов, что IAT подключения себя - это функция техники hookowania, заменив функцию адрес, расположенный в IAT адрес
функции, содержащейся в другой DLL, или просто где-то в памяти. Примерно в это же настройки крючки пишет, не так ли готовы десятки
библиотеки, сотни образцов кода, так я думаю, что те, кто еще не освоил как можно скорее должны заполнить пробелы kozystajac от Google.

Теперь кое-что о выявлении тех крючки - опишем вопросы, которые вы должны делать:
Первый Exe файл находится в процессе, где вы хотите посмотреть на крючки.
Вторая Мы находимся в этот файл и проверить IAT таблицы все функции, содержащиеся в IAT
Третий Мы проверим, как модуль. IAT должны быть функции.
Четвёртое Проверить ImageBase и размер модуля и проверить адрес в IAT находится в диапазоне
Если это так, все нормально, если не проверить модуль, который показывает, адрес

Так много для теории.
Время на практике.

Требуемые заголовки:

  1
 2
 3
 4
 5
 6
 7
 8
 9
 <windows.h> # # Включить включить # включить <stdio.h> <string> <Tlhelp32.h> # включить # # включить включать <vector> <Psapi.h> <fstream> # # включить включить "PE_class.h" / / мой класс для обработки PE файлы (это обеспечивает вместе с остальной код) # ргадта комментарий (Библиотека ", psapi.lib"); 

Глобальные переменные:

  1
 2
 3
  Ручка hProc / / дескриптор процесса
 DWORD PID / / ProcessId
 DWORD MainImageBase / / процесс 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
  int argc, CHAR * argv [ ] ) тап_п (агдс, спаг * агду [])
 (
 " \n \n IAT Hook detector v. 1.0 by Grzonu \n \n " ) ; Е ("\ п \ п IAT Хук детектора Grzonu v. 1.0 \ п \ п");

 argc ! = 2 ) //sprawdzamy czy podano parametr jesli nie to wychodzimy если (агдс! = 2) / / проверяем, если параметр дается, если он не выходит
 (
	 "usage: %s <pid> \n \n " ,argv [ 0 ] ) ; Е ("Использование:% з <PID> \ п \ п", агду [0]);
	 ; возврат 0;
 )
 ( argv [ 1 ] ) ; //pobieramy PID PID = atoi (агду [1]) / / загрузка PID
 ; IB DWORD = 0;
 ; ImgSize DWORD = 0;
 IB, & ImgSize ) ; //Znajdujemy ImageBase i Size procesu FindImageBase (PID, и IB, и ImgSize) / / найти этот процесс и размер ImageBase
 "ImageBase: 0x%.8x \n ImageSize: 0x%.8x \n \n " ,IB,ImgSize ) ; Е ("ImageBase: 0x% 0,8 х \ п ImageSize: 0x% 0,8 х \ п \ п", IB, ImgSize);

 PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,FALSE,pid ) ; //otwieramy go hProc = OpenProcess (PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, PID) / / открыть
 hProc == 0 ) //jesli sie nie udalo to wychodzimy если (hProc == 0) / / если они не смогли бросить курить
 (
 "can`t open process \n " ) ; Е ("Can` т п открытой \ процесс ");
 ; возврат 0;
 )
 buf = LoadMod ( IB ) ; //ladujemy plik сЬаг ЬиЕ * = LoadMod (IB) / / загрузить файл
 MainImageBase = IB;
 buf ) ; PE_file PE ((HMODULE) ЬиЕ);
 PE ) ; //szukamy hookow IAT  PE) / / искать для крючков
 buf ) ; //zwalniamy bufor zaalokowany w funkcji LoadMod свободный (ЬиЕ); / / освобождение буфера выделено в функции LoadMod


	 ; возврат 0;
 ) 

Теперь мы расскажем о каждой из функций в начале FindImageBase () функция стремится 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 (DWORD PID, DWORD * IB ImgSize DWORD *) / / функция принимает ProcessId, показатели буферов данных
 (
 PROCESSENTRY32 lppe32;
 260 ] ; сЬаг [ЬиЕ 260];
	 buf, 0 , 260 ) ; memset (ЪиЕ, 0, 260);
     Ручка hSnapshot;
    TH32CS_SNAPPROCESS, 0 ) ; //robimy snapshot listy procesow hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) / / мы снимок процессов
     sizeof ( PROCESSENTRY32 ) ; lppe32. dwSize = з! геоЕ (PROCESSENTRY32);

     lppe32 ) ; Process32First (hSnapshot, и lppe32);
	     к
         (
		 lppe32. th32ProcessID == pid ) //szukamy naszego procesu если (PID == lppe32. th32ProcessID) / / искать наш процесс
		 (
		 buf,lppe32. szExeFile ) ; зЬгсру (ЪиЕ, lppe32. szExeFile);
		 перерыва;
		 )

		 )
         Process32Next ( hSnapshot, & lppe32 ) ) ; а (Process32Next (hSnapshot, и lppe32));
         ; CloseHandle (hSnapshot);
 buf [ 0 ] == 0 ) //jesli nie udalo sie znalesc zwracamy 0; если (BUF [0] == 0) / / Если вы не нашли возвращает 0;
 (
 ; возврат 0;
 )

 MODULEENTRY32 mod32;
 x ; зЬй:: строка х;

    TH32CS_SNAPMODULE, pid ) ; //robimy snapshot listy modolow znalezionego procesu hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, PID) / / мы нашли modolow снимок процесса
    sizeof ( MODULEENTRY32 ) ; mod32. dwSize = з! геоЕ (MODULEENTRY32);

     mod32 ) ; Module32First (hSnapshot, и mod32);
	      к
         (
		 ; х = mod32. szExePath;
		 x. find ( buf ) ! = 0xFFFFFFFF ) //sprawdzamy czy to główna czesc programu  найти (ЬиЕ)! = 0xFFFFFFFF) / / убедиться, что программа является основной частью
		 (/ / Если да, то завершить соответствующие переменные
			 ( DWORD ) mod32. modBaseAddr ; * IB = (DWORD) mod32. ModBaseAddr;
			 mod32. modBaseSize ; * ImgSize = mod32. ModBaseSize;
		 )


		 )
         Module32Next ( hSnapshot, & mod32 ) ) ; а (Module32Next (hSnapshot, и mod32));
         ; CloseHandle (hSnapshot);
 ; возвращение 1;
 ) 

Поэтому мы больше не нужны, и ImageSize ImageBase процесса. Теперь мы подошли к функции зарядки модуля программного кода из файла, который показывает ImageBase.
Это будет распространяться не только на основной код программы, но и все библиотеки. Мы должны получить файл, так как ImageSize ImageSize модуль
в памяти очень легко изменить его так, что один посмотрел на код библиотеки охватывает только второй путем изменения ImageSize модуля в памяти.

  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 ) сЬаг * LoadMod (DWORD IB)
 (
 260 ] ; ProcName сЬаг [260];
 HMODULE ) IB,ProcName, 260 ) ; //pobieramy pelna sciezke do binarki modulu GetModuleFileNameEx (hProc, (HMODULE) IB ProcName, 260) / / загрузка полный путь к двоичный модуль
 f ( ProcName,std :: ios :: binary ) ; //otwieramy plik зЬй:: геат ж (ProcName, зЬй:: IOS:: бинарный) / / открыть файл
 buf ; ЬиЕ символ *;
 0 ,std :: ios :: end ) ; F. seekg (0, зЬй:: IOS:: конец);
 f. tellg ( ) ; Int размер = F. tellg ();
 0 ,std :: ios :: beg ) ; F. seekg (0, зЬй:: IOS:: прошу);
 char * ) malloc ( size ) ; //alokujemy bufor(pamietajmy go pozniej zwolnic) ЬиЕ = (символ *) таНос (размер) / / выделить буфер (помню его тогда-релиз)
 buf, 0 ,size ) ; memset (ЪиЕ, 0, размер);
 0 ; Int = 0;
 спаг сп;
 i < size ) в то время как (I <размер)
 (
 ch ) ; //wczytujemy F. получить (сп) / / загружаем
 = ch ; ЬиЕ [г] = CH;
 я + +;
 )
 ; F. Close ();
 //zwracamy bufor возвращение ЬиЕ; / / Вывод буфера
 ) 

Теперь основная функция IAT (), которая направлена на поиск всех импортируемых функций приложений и посмотреть, если вы не крючки.
Эта функция kozysta ряда других функций, которые также по дороге обсуждения.

  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 } } IAT недействительным (* PE_file PE) (HINSTANCE HINSTANCE = (HINSTANCE) PE -> ЬиЕ; PIMAGE_DOS_HEADER pdosheader = (PIMAGE_DOS_HEADER) ШпзЬапсе, / / извлечение заголовков PIMAGE_NT_HEADERS pntheaders = (PIMAGE_NT_HEADERS) ((DWORD) HINSTANCE pdosheader + -> e_lfanew) / / и многое другое ... 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)); / / найти адрес IAT в PE заголовка, но поскольку мы стремимся в файле, а не в процессе, мы помним об изменении адреса RVA в RAW PIMAGE_THUNK_DATA pthunkdatain, pthunkdataout; PIMAGE_IMPORT_BY_NAME pimportbyname; DWORD с.в.; PChar Указатель, DWORD IB, символ ЬиЕ *, DWORD ImgSize; PIMAGE_OPTIONAL_HEADER32 отказаться; DWORD адрес; DWORD IAT_adr; DWORD читать; Int я = 0, а (pimportdescriptor -> TimeDateStamp! = 0 | | pimportdescriptor -> имя! = 0) / / извлечение до тех пор, пока я не уйду Импорт:) (PTR = ( PChar) ((DWORD) HINSTANCE PE + -> RVA_to_RAW ((DWORD) pimportdescriptor -> Имя)) / / DLL имя = 0; FindModule IB = (PTR) / / функция ImageBase ищет имя библиотеки (обзор ниже) ЬиЕ = LoadMod (IB) / / функция, описанная ранее зарядки код PE_file ВЭ2 ((HMODULE) ЬиЕ); / / Загрузить исходный код для класса выбирают = ВЭ2. GetOptionalHeader () / / Получить соответствующие ImgSize заголовок = выбрать -> SizeOfImage / / нам необходимо взять коробку из заголовка или ImageSize свободный (ЬиЕ); / / освобождение буфера pthunkdataout = (PIMAGE_THUNK_DATA) ((DWORD) HINSTANCE + PE -> RVA_to_RAW ((DWORD) pimportdescriptor -> FirstThunk)) / / извлечение адрес, по которому они начинают адресов в IAT, если (pimportdescriptor -> Поведение == 0) (pthunkdatain pthunkdataout = / / взять адрес структуры, из которой получить имя функции) остальное (pthunkdatain = (PIMAGE_THUNK_DATA) ((DWORD) HINSTANCE + PE -> RVA_to_RAW ((DWORD) pimportdescriptor -> Поведение)) / / то же самое;)) а (pthunkdatain -> U1. AddressOfData! = NULL) / / если человек еще некоторые функции (если ((DWORD) pthunkdatain -> U1. Порядковые и IMAGE_ORDINAL_FLAG) / / если Порядковый (LPSTR х = MAKEINTRESOURCE (LOWORD (pthunkdatain -> U1. Порядковые)); / / Порядковый адрес = MainImageBase + (pimportdescriptor -> FirstThunk +  * 4)) / / адрес буфера по адресу функции ReadProcessMemory (hProc (LPCVOID) адрес, и IAT_adr, 4, и чтение); / / воспринимают адрес функции находится в выше скачать, если (IAT_adr <IB | | IAT_adr> (IB + ImgSize)) / / проверяем, если адрес места августе в рамках своего модуля (/ /, если она не проверить модуль, в котором есть функция DWORD HookBase = FindHookModule (IAT_adr) / / загрузка ImageBase модуль, в котором эта функция находится. (Это обсуждение функций позже) спаг [ModName 260]; если (HookBase == 0) / / если нет такого модуля означает, что это просто выделить память например, VirtualAllocEx (зЬгсру (ModName, "Виртуальная память");) зе / / если это взять путь к этому модуль (GetModuleFileNameEx (hProc, (HMODULE) HookBase, ModName, 260);) Е ("Ред:% х (% ы) --- Увлеченные% ы (0x% 0,8 х) \ п", х, PTR, ModName, IAT_adr) / / printfujemy результат:))) остальное (pimportbyname = (PIMAGE_IMPORT_BY_NAME) (PE -> RVA_to_RAW ((DWORD) pthunkdatain -> U1. AddressOfData) + (DWORD) HINSTANCE); адрес = MainImageBase + (pimportdescriptor -> FirstThunk + ( и * 4)) / / здесь такое же, как и выше ReadProcessMemory (hProc (LPCVOID) адрес, и IAT_adr, 4, и читать), если (IAT_adr <IB | | IAT_adr> (IB + ImgSize)) (DWORD = HookBase FindHookModule (IAT_adr); сЬаг [ModName 260], если (HookBase == 0) (зЬгсру (ModName, "Виртуальная память");) остальное (GetModuleFileNameEx (hProc, (HMODULE) HookBase, ModName, 260);) Е (" % ы (% ы) --- Увлеченные% с (0,8% х 0x) \ п ", (символ *) pimportbyname -> Название, PTR, ModName, IAT_adr);)) я + +; / / Следующая функция pthunkdatain + +; pthunkdataout + +;) pimportdescriptor + + / / следующий DLL `ка)) 

Она должна была теперь две особенности, которые подробно обсудить

  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 str_tolower недействительным (сЬаг *) / / функция поворота строки в нижний регистр
 (
 0 ; Int = 0;
 strlen ( str ) ; Int размер = StrLen (строка);

 i < size ) в то время как (I <размер)
 (
 = tolower ( str [ i ] ) ; ул [г] = ТоЬоиег (ул. [я]);
 я + +;
 )
 )

 * mod_name ) DWORD FindModule (спаг mod_name *)
 (
 MODULEENTRY32 mod32;
 x ; зЬй:: строка х;
    TH32CS_SNAPMODULE, pid ) ; //o tym juz mowilem Ручка hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, PID); / / я уже говорил об этом
    sizeof ( MODULEENTRY32 ) ; mod32. dwSize = з! геоЕ (MODULEENTRY32);
    ; str_tolower (mod_name);

     mod32 ) ; Module32First (hSnapshot, и mod32);
	      к
         (
		 ) ; str_tolower (mod32. szExePath);
		 ; х = mod32. szExePath;

		 x. find ( mod_name ) ! = 0xFFFFFFFF ) //jesli to szukany modul to zwracamy jego ImageBase  найти (mod_name)! = 0xFFFFFFFF) / / если поиск модуль свою очередь, его ImageBase
		 (
			 DWORD ) mod32. modBaseAddr ; возвращения (DWORD) mod32. modBaseAddr;
		 )


		 )
         Module32Next ( hSnapshot, & mod32 ) ) ; а (Module32Next (hSnapshot, и mod32));
         ; CloseHandle (hSnapshot);
		 ; возврат 0;
 )

 //funkcja szukajaca ImageBase modulu w ktorym znajduje sie funkcja FindHookModule DWORD (DWORD адрес) / / функция ImageBase модуль поиска, где функция
 (
 MODULEENTRY32 mod32;
    TH32CS_SNAPMODULE, pid ) ; Ручка hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, PID);
    sizeof ( MODULEENTRY32 ) ; mod32. dwSize = з! геоЕ (MODULEENTRY32);

     mod32 ) ; Module32First (hSnapshot, и mod32);
	      к
         (
		 Address >= ( DWORD ) mod32. modBaseAddr && Address <= ( DWORD ) ( mod32. modBaseAddr + mod32. modBaseSize ) ) //jesli adres znajduje sie w przedziale <ImageBase ; ImageBase+ImageSize> to zwracamy jego ImageBase если (Адрес> = (DWORD) mod32. modBaseAddr и адрес и <= (DWORD) (+ mod32 mod32. modBaseAddr. modBaseSize)) / / если адрес находится в диапазоне <ImageBase; ImageBase+ImageSize> изменить свою ImageBase
		 (
 DWORD ) mod32. modBaseAddr ; возвращения (DWORD) mod32. modBaseAddr;
		 )

		 )
         Module32Next ( hSnapshot, & mod32 ) ) ; а (Module32Next (hSnapshot, и mod32));
         ; CloseHandle (hSnapshot);
		 ; возврат 0;
 ) 

Я думаю, что это на сегодня хватит.
Представили метод простой, но эффективный (хотя, конечно, я также могу обойти)
Если бы я забыл о том, чего будет добавить сразу же! ;)

Я придаю код для VC + + и двоичные файлы ;)
Ссылка

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Метки: , ,

Я вернусь

Опубликовано в Новости на 23 июня 2010 по Grzonu

Ну, эта должность отделена от общего блоге тему, но я думаю, мы пишем :)
Прежде всего, я хотел бы опровергнуть слухи о том, что я был в коме (WTF?) И отрезали дискуссии по этому вопросу, который по сообщениям состоялась IRC XD
Так что я жив и здоров в августе :) с нетерпением ожидает результатов, имеющих степень бакалавра.

В ближайшем будущем я планирую написать несколько шуток в этом блоге в последнее время дело пустое, и все больше людей спрашивают, когда я пишу что-то новое.

Ну kozystajac раз это приятный отдых ;)

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

День смеха

Опубликовано в Новости на 1 апреля 2010 по Grzonu

Ну, как мы знаем сегодня день по различным шутки :)
Первый, который я нашел на веб-странице, которая якобы shackowana Gynvael Coldwind ( LINK ) страница выглядит очень реалистично ;)

Ну, мы ждем дальнейшего шутки ;)

/ / Обновление
Ну, мы, наконец, в :)
как и ожидалось в августе или что-то niebezpiecznik.pl именно после составлен о том, что niebezpiecznik.pl был приобретен эмитента ;) Поздравляем за изобретательность :D

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Теги: , , , ,

Онлайн-видео поисковой системы

Опубликовано в Новости на 16 марта 2010 по Grzonu

Я побежал онлайновую поисковую систему видео сегодня.
Szukajka поиск в Интернете искать интересные фильмы о наших книгах и отображает результат.
Не стесняйтесь kozystania.

ПОИСК

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Метки: , ,

Ищите информацию о человеке

Опубликовано в Статьи по 14 марта 2010 по Grzonu

Ищите информацию о человеке

Часто случалось, что мы хотим получить конкретное лицо как можно больше информации. Ладно, ты не интересно, почему вы позволяете этим данным, что мы можем учиться.
Целом подход к последующей поток достиг мяч, то есть, например, имея один или два znaleśćich многое другое. Очень полезны для любой поисковой системе, сравнивать и других подобных инструментов.
Это очень полезно, в принципе, любая минимальная информация. IP, почта, фотографии, счета на сайтах социальных сетей, друзья, номер, Г. аватар на форуме как раз у нас нет. Что мы можем сделать, например с IP-адрес ... Ммм, вероятно, только проверить хозяина, и любая информация по этому IP например kozystając например ip.boo.pl
Подавляющее большинство не получают ничего сервере-хостинг провайдера разыскиваемого лица. Ну, а это уже что-то. На основании этого мы можем определить, является ли человек живет в Польше, в какой части страны находится.
Если у вас есть адрес электронной почты, мы googlowac в поисках этого адреса, благодаря нам добраться до страницы, на которых он зарегистрирован с лицом, как мы хотели, что их интересует. На этих страницах мы смотрим на такие вещи, как ряд последовательных Г.Г., аватар на форуме и в других местах. Мы можем получить на социальные профили сетей, таких, как наш класс, или фото. Ну, дело не в режиме реального лечения для людей, которые пытаются узнать что-то очень часто пишут в своем профиле много данных, таких как имя, адрес, номер телефона, гг. Мы можем выяснить, кто знает, что если у нас есть общие друзья. Зачастую мы видим фотографии из отпуска, из дома, от событий и многих других местах. Иногда можно даже узнать, где была сделана фотография, если камера находится в wyposarzony GPS, как и в случае с iPhone камера `ы, который позволяет сохранять данные о месте, где вы взяли картины того, что мы читаем, например niebezpieczniku
Картинки, аватары и другие графические файлы, которые могут быть использованы для узнать что-то о человеке, стремится к примеру, благодаря веб-сайта tineye.com , которые показывают нам, что где-то в другом месте уже не она или ее модифицированный вариант. Еще раз спасибо, мы попали в страницу, с которой человек стремится kozysta.
В большинстве случаев мы можем найти много информации о человеке. Но если кто-то очень не хочет, чтобы Google, что ничего не сказал про него он может, потому что в 90% людей, сами по себе предоставляют информацию о себе, которые позволяют им найти.

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Тэги: , , , , ,

Прод.. Изменении

Опубликовано в Новости на 4 марта 2010 по Grzonu

Сегодня я начал двигаться сайта на новую, лучше, быстрее хостинг. Бывший предел tranferu и место, и остановился много раз почти на границе. Так шли, большей сервер с 100x больше пространства и больше 100x большие ограничения передачи ;) Я надеюсь, что улучшит впечатления от просмотра ;) Все это благодаря компании, которая не совсем az.pl, что дал мне бесплатный домен еще мне веб-хостинга по очень доступным ценам :)

Через несколько дней некоторые ссылки могут не работать, но я постараюсь это исправить как можно скорее.

Share:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Теги: ,

Изменение адреса

Опубликовано в Новости на 22 февраля 2010 по Grzonu

ENCE с сегодняшнего дня меняется адрес на странице grzonu.com.pl
Старый адрес будет по-прежнему действовать примерно через месяц параллельно с новым.

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