Поиск байтов в памяти - Общение разработчиков - Программирование для Point Blank, общение и обсуждение разработок
25.01.2014, 19:13
#1
Разведчик
Регистрация: 12.08.2011
Сообщений: 1
Популярность: 124
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Поиск байтов в памяти
Привет!
Сегодня пытался написать программу для поиска последовательности байт в программе, которая загружает SWF(в которой бардак полный).
Из исходников взял функции:
Код:
BOOL bCompare(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( bCompare((BYTE*)(dwAddress+i), bMask, szMask) )
return (DWORD)(dwAddress+i);
return 0;
}
Вызываю так:
Код:
DWORD *table = (DWORD *)FindPattern(0x08000000, 0x0F000000, (PBYTE)"\x00\x00\x1F\xBD\x00\x07", "xxxxxx");
if(table > 0)
{
char str[256] = {0};
sprintf(str, "%x", table);
MessageBox(NULL, str, "", MB_OK);//Тут вывод найденного адреса
/*
while( *table!='\0' )
--table;
sprintf(str, "%x", table);
MessageBox(NULL, str, "", MB_OK);//это уже не важно.
*/
}
else
{
MessageBox(NULL, "Key not found", "Error!", MB_OK);
}
В итоге ни ошибки, ни успеха. По моему программа попадает в нечитаемую секцию. С помощью CE отлично находится, т.к CE пропускает нечитаемые секции.
Отдебажить никак не могу - условные бряки проскакивают, а вручную цикл тоже никак.
25.01.2014, 23:02
#2
Фельдмаршал
Регистрация: 22.02.2011
Сообщений: 949
Популярность: 34698
Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
Re: Поиск байтов в памяти
Код:
DWORD table = FindPattern((DWORD)название модуля где искать будем, адресс в памти до куда искать, (PBYTE)"\x00\x00\x1F\xBD\x00\x07", "xxxxxx");
Код:
char str[256];
sprintf(str, "0x%X", table);
MessageBox(NULL, str, "", MB_OK);
Пользователь сказал cпасибо:
26.01.2014, 04:28
#3
Разведчик
Регистрация: 12.08.2011
Сообщений: 1
Популярность: 124
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Re: Поиск байтов в памяти
По моему, 2 аргумент это кол-во байт для поиска, но не в том соль.
Несколько адресов, сделанные при перезапуске программы:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Распределение памяти:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Получается мне надо искать от 0x00FE0000, 159744 байт? Но в этом регионе нет моих байтов
26.01.2014, 19:03
#4
Фельдмаршал
Регистрация: 22.02.2011
Сообщений: 949
Популярность: 34698
Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
Re: Поиск байтов в памяти
26.01.2014, 19:36
#5
Разведчик
Регистрация: 12.08.2011
Сообщений: 1
Популярность: 124
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Re: Поиск байтов в памяти
Последний раз редактировалось den-x; 26.01.2014 в 20:57 .
Причина: Добавлено сообщение
26.01.2014, 21:34
#6
Фельдмаршал
Регистрация: 22.02.2011
Сообщений: 949
Популярность: 34698
Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
Re: Поиск байтов в памяти
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 11:06 .