• Страница 1 из 1
  • 1
Модератор форума: BioWare, МaSяня, DENISSISS, ™Наркоборон™  
Address Logger - поиск поинтеров и оффсетов.
DENISSISS
Offline
Дата: Среда, 12.10.2011, 17:27 | Сообщение # 1; Репутация DENISSISS: "2947"; Титул DENISSISS: Создатель, Генералиссимус;
   
 
   
 
  255
Награды
 
За заслуги перед сайтом За репутацию больше 1000! За >200 постов! За >10 наград!
 
Понизить
Сразу скажу, что эта статья взята с англ. ресурса. Вот оригинал на английском языке:

[cut noguest=! ЧИТАТЬ !]Hi all......!!!!


Now i tell u how to make a nice addy logger.....so u dont have to re-search the addy, each update....!!!!


This save u a lot of time



Let's Start......


-------------------------------------------------------------------------------------------------


PROGRAMS & REQUIREMENTS:



Visual C++ ( i use 6.0 )

Brain

Some basics C++ knowledge

Some minutes...


--------------------------------------------------------------------------------------------------



Now open a new project "Win32 Dynamic-Link Library", call it with the name u want




Now add some globals:
Code:
#include <windows.h> 
#include <fstream>
#include <stdio.h>
using namespace std; //need for the logging func
ofstream ofile; //need for the logging func
#define WIN32_LEAN_AND_MEAN
char *GetDirectoryFile(char *filename); //getdirfile for the logging func
void __cdecl add_log (const char * fmt, ...); //the logging func
void thethread(); //the main function
char dlldir[320];
In our DllMain(HMODULE hMod, DWORD dwReason, PVOID pvReserved):
Code:
 CreateThread(0, 0, (LPTHREAD_START_ROUTINE)thethread, 0, 0, 0); 
GetModuleFileName(hMod, dlldir, 512);
for(int i = strlen(dlldir); i > 0; i--) { if(dlldir[i] == '\\') { dlldir[i+1] = 0; break;}}

ofile.open(GetDirectoryFile("WooWMyLog.txt"), ios::app);


MessageBox(NULL, " Logger", "Let's log some addy", MB_OK); //not really needed

We have to add these 2 function to let the logger work correctly:

Code:
char *GetDirectoryFile(char *filename)//get the directory of the dll 
{
static char path[320];
strcpy(path, dlldir);
strcat(path, filename);
return path;
}

void __cdecl add_log (const char *fmt, ...)//the add log func
{
if(ofile != NULL)
{
if(!fmt) { return; }

va_list va_alist;
char logbuf[256] = {0};

va_start (va_alist, fmt);
_vsnprintf (logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf), fmt, va_alist);
va_end (va_alist);

ofile << logbuf << endl;
}
}
Now we have to add another 2 functions, 2 important function that search the address:
Code:
bool Match(const BYTE* pData, const BYTE* bMask, const char* szMask) 
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask )
return false;
return (*szMask) == NULL;
}

DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for(DWORD i=0; i < dwLen; i++)
if( Match( (BYTE*)( dwAddress+i ),bMask,szMask) )
return (DWORD)(dwAddress+i);

return 0;
}

After this we have to put the last function, "thethread":

Code:
void thethread() 
{

//Code Here

}
--------------------------------------------------------------------------------------------------



Now the base it's finished, but a very interesting question is:


"How i can add an address???"




Let's say that once u have understand the method is simply add an address......


u need:


1) A sequence of bytes of the addy (generally the first 10/15 bytes), this is called "Array of Bytes"


2)A Mask (tells the search functions what bytes change and what bytes are static)


An Example is:

Code:
DWORD m_dwaddy = FindPattern(0x400000, 0x01400000,(unsigned char*)"\xB9\x00\x00\x00\x00\xF3\xA5\x00","x????xxx"); 

add_log("\nFunction %\nAddress : 0x%.6X\n",m_dwaddy);

This logs something like this:

Code:
Function 
Address : 0x000000
--------------------------------------------------------------------------------------------------


But what this numbers mean?


0x400000 : the start address of ur research

0x01400000 : the end address of ur research


\xB9\x00\x00\x00\x00\xF3\xA5\x00 : the Array of Bytes

x????xxx : the Mask


x : static byte

? : not static byte


So the first byte is static ( with x ), \x00\x00\x00\x00 bytes aren't statics (with ? ), the last 3 bytes are static ( with x ).


the static bytes dont change ( dont change after an update )

the not static bytes change after an update




--------------------------------------------------------------------------------------------------


Where/How can i search for bytes???



U can search for bytes in OllyDbg, in IDA Pro or with ur favourite program.


How can i understand what bytes are static and what arent?


easy, copy an array of a selected addy.

then wait until there is an update, and research the new addy with the same asm code as the old (attention: u DONT have to search for the OLD addy after an update,or it will be wrong)


then compare the 2 array.....!!!!!



END of TUT



If u dont want to do it, there is a plugin for OllyDbg that do it automatically....



I think i helped u...



Credits: Me and people that made some functions




Download Plugin:
http://www.ucdownloads.com/downloads...o=file&id=4137


VirusTotal:
http://www.virustotal.com/it/analisi...97d-1244574222[/cut]
МаSяня-бывший
Offline
Дата: Среда, 12.10.2011, 20:04 | Сообщение # 2; Репутация МаSяня-бывший: "1"; Титул МаSяня-бывший: Майор;
   
 
   
 
  0
Награды
 
За >1 наград!
 
Понизить
Супер щяс переаеду ))

Добавлено (12.10.2011, 20:04)
---------------------------------------------
Привет всем ......!!!!

Сейчас я говорю со том, как сделать хороший регистратор Адди ..... так что у не придется заново искать Адди, каждое обновление ....!!!!

Это сохранение и много времени

Давайте начнем ......

-------------------------------------------------- -----------------------------------------------

ПРОГРАММЫ & ТРЕБОВАНИЯ:

Visual C + + (я использую 6.0)

Мозг

Некоторые основам C + +, знание

Через несколько минут ...

-------------------------------------------------- ------------------------------------------------

Теперь откройте новый проект "Win32 Dynamic-Link Library", назовем его именем у хочу

Теперь добавим несколько глобальных переменных:
Код:
# Включить
# Включить
# Включить
использование имен STD / / необходимо для регистрации функции
ofstream ofile / / необходимо для регистрации функции
# Определять WIN32_LEAN_AND_MEAN
символ * GetDirectoryFile (символ * имя файла); / / getdirfile для регистрации функции
add_log недействительным __cdecl (сопзЬ сЬаг * FMT, ...); / / регистрация функции
недействительным thethread (); / / основная функция
символ dlldir [320];

В нашем DllMain (HMODULE hMod, DWORD dwReason, PVOID pvReserved):
Код:
CreateThread (0, 0, (LPTHREAD_START_ROUTINE) thethread, 0, 0, 0);
GetModuleFileName (hMod, dlldir, 512);
для (Int я = StrLen (dlldir); я> 0, я -) {если (dlldir [я] == '\ \') {dlldir [я +1] = 0; перерыва;}}

ofile.open (GetDirectoryFile ("WooWMyLog.txt"), IOS:: приложение);


MessageBox (NULL, "регистратор", "Давайте журнала некоторых Адди", MB_OK); / / не нужны


Мы должны добавить эти две функции, чтобы регистратор работает правильно:

Код:
символ * GetDirectoryFile (символ * имя файла) / / получить каталог DLL
{
статических символов путь [320];
зЬгсру (путь, dlldir);
strcat (путь, имя файла);
обратный путь;
}

add_log недействительным __cdecl (сопзЬ сЬаг * FMT, ...)// добавить журнал функции
{
если (ofile! = NULL)
{
если {возвращение;} (ДРМ!)

va_list va_alist;
символ logbuf [256] = {0};

va_start (va_alist, FMT);
_vsnprintf (logbuf + StrLen (logbuf), SizeOf (logbuf) - StrLen (logbuf), FMT, va_alist);
va_end (va_alist);

ofile < }
}

Теперь мы должны добавить еще 2 функции, 2 важные функции, поиск по адресу:
Код:
Ьоо Match (сопзЬ BYTE * PDATA, сопзЬ BYTE * bMask, сопзЬ сЬаг * szMask)
{
для (*; szMask; + + szMask, + + PDATA, + + bMask)
если (* szMask == 'х' & & * PDATA! =* bMask)
вернуться ложным;
возвращение (* szMask) == NULL;
}

DWORD FindPattern (DWORD dwAddress, DWORD dwLen, BYTE * bMask, символ * szMask)
{
для (DWORD = 0; я если (Match ((BYTE *) (dwAddress + я), bMask, szMask))
возвращения (DWORD) (dwAddress + я);

возврат 0;
}


После этого мы должны поставить последнюю функцию ", thethread":

Код:
недействительным thethread ()
{

/ / Код здесь

}

-------------------------------------------------- ------------------------------------------------

Теперь базы она будет закончена, но очень интересный вопрос:

"Как я могу добавить адрес??"

Давайте предположим, что когда-то у есть понимать метод просто добавить адрес ......

у необходимо:

1) последовательность байтов Адди (обычно первая 10/15 байт), это называется "массив байт"

2) Маска (говорит функций поиска, что байт изменения и какие байты статическая)

Пример есть:

Код:
DWORD = m_dwaddy FindPattern (0x400000, 0x01400000, (неподписанные символ *) "\ xB9 \ x00 \ x00 \ x00 \ x00 \ xF3 \ xA5 \ x00", "х ххх??");

add_log ("\ nFunction% \ nAddress: 0x% 0,6 X \ п", m_dwaddy);


Это журналы-то вроде этого:

Код:
Функция
Адрес: 0x000000

-------------------------------------------------- ------------------------------------------------

Но что это за цифры?

0x400000: начальный адрес ур исследования

0x01400000: конечный адрес ур исследования

\ XB9 \ x00 \ x00 \ x00 \ x00 \ xF3 \ xA5 \ x00: массива байтов

?? х ххх: Маска

х: статический байт

? : Не статичны байт

Таким образом, первый байт статического (с х), \ x00 \ x00 \ x00 \ x00 байты не статика (с?), Последние 3 байта являются статическими (с х).

статического байт dont изменения (Dont изменится после обновления)

не статичны байт изменится после обновления

-------------------------------------------------- ------------------------------------------------

Где / Как я могу поиск байт??

U может искать байт OllyDbg, в IDA Pro или с ур любимой программы.

Как я понимаю, что байт статического и то, что Арент?

легко, копировать массив выбранных Адди.

а затем ждать, пока не будет обновлять и исследования новых Адди с тем же ассемблерный код, что и старый (внимание: и не придется искать OLD Адди после обновления, или это будет неправильно)

затем сравнить два массива .....!!!!!

КОНЕЦ TUT

Если и не хотите, чтобы это сделать, есть плагин для OllyDbg, которые делают это автоматически ....

Я думаю, что я помогал u. ..

Кредиты: Я и людей, которые сделали некоторые функции

Скачать Плагин:
http://www.ucdownloads.com/downloads...o=file&id=4137

VirusTotal:
http://www.virustotal.com/it/analisi...97d-1244574222
Новинка! Нажмите на слова вверху, чтобы увидеть альтернативный перевод. Отказаться
Использовать Переводчик Google в следующих ситуациях:Поиск
Видео
Электронная почта
Телефон
Чат
Бизнес:Инструменты переводчика
Global Market Finder
Website Translator
О Переводчике GoogleОтключить моментальный переводКонфиденциальностьСправка



Согласно последнему независимому научному исследованию, сидение за
компьютером более четырех часов в день значительно улучшает зрение и
снижает риск заболевания геммороем. Независимое исследование было
профинансировано компанией "Майкрософт".
DENISSISS
Offline
Дата: Среда, 12.10.2011, 20:22 | Сообщение # 3; Репутация DENISSISS: "2947"; Титул DENISSISS: Создатель, Генералиссимус;
   
 
   
 
  255
Награды
 
За заслуги перед сайтом За репутацию больше 1000! За >200 постов! За >10 наград!
 
Понизить
Genius, Супер. Только код надо брать с оригинальной инструкции т.к. он тоже переведен.
МаSяня-бывший
Offline
Дата: Среда, 12.10.2011, 20:28 | Сообщение # 4; Репутация МаSяня-бывший: "1"; Титул МаSяня-бывший: Майор;
   
 
   
 
  0
Награды
 
За >1 наград!
 
Понизить
Понятно ))ден перепиши взлом комнат тему )


Согласно последнему независимому научному исследованию, сидение за
компьютером более четырех часов в день значительно улучшает зрение и
снижает риск заболевания геммороем. Независимое исследование было
профинансировано компанией "Майкрософт".
  • Страница 1 из 1
  • 1
Поиск: