Vlad2 Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 Привет, форумчане!Помогите, нужно в дельфи сделать AOBScan, который бы умел искать байты такого типа "00 01 ?? 03 04", и возвращал адреса по которым он находил такие байты. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 Проще делать сканер сигнатур с маской. Впрочем, можно и в таком виде, но тогда тебе придется использовать регулярные выражения и преобразования строк. Это не простой вопрос, потому рекомендую сначала сделать обычный сканер сигнатур, как описывается в некоторых видео. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 21 декабря, 2014 Автор Поделиться Опубликовано 21 декабря, 2014 Самое главное чтоб адрес возвращал и искал массивом) а где такие видео? не нашел... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 У Кодера в каком-то из уроков было по сканированию сигнатур. Но урок не был именно им посвящен. Урок был посвящен созданию трейнера. Так что смотри все уроки подряд. Ну и для решеток (С#) вроде keng статью делал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 22 декабря, 2014 Автор Поделиться Опубликовано 22 декабря, 2014 Так он на С++ пишет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 22 декабря, 2014 Автор Поделиться Опубликовано 22 декабря, 2014 Вроде что то нашел. http://cheaton.ru/f30/poisk-signatur-bazovyh-adresov-dlya-dayz-8343/Помогите оптимизировать под Delphi 7! 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 декабря, 2014 Поделиться Опубликовано 22 декабря, 2014 Расскажи, чтоуже сделал, тогда кто-то из участников поможет. Или тебе нужно, чтобы для тебя написали код? Так это, получается, не помощь, а работа за тебя. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 Ок, а то я уже удалил что делал. Скину позже. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
∟DarkPan Опубликовано 25 декабря, 2014 Поделиться Опубликовано 25 декабря, 2014 Вот лови исходник + модули сканера, и выбора процессов!https://yadi.sk/d/FlD-IeQwcKFVtЕсть ещё модуль у меня, memoriscan.pas, сканиурет быстро, разные байты только нету "??", есть "xx"Поподробнее в скайпе можно, так же могу привести пример трейнера, Сканирование в потоке!Вот пример сканирования:Сканер для XE_2varAddress2: Tscanner_Faddress;====================================AOBScan(0, $7FFFFFFF, 'FF xx FF xx FF' , True, True);// True, True - это параметры доступа ( чтение, запись) WriteB('90 90 90', 0); case RunCheat(Address2) of if_Activated: begin Result := 4; end; if_NotConnected: begin Result := 2; end; if_ErrorActivate: begin Result := 1; end; end;//NullAlex: используем тег [code_][_/code] (без нижнего подчеркивания) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 Вот нашел проект со сканером, но он сканирует только статическую память, а к динамической не притрагивается. а мне очень нужно, что делать?SigScanner.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Привет! Предположу, что можно выяснить, как работает сканер из приведенного тобой архива, и поменять так, как тебе нужно. Вероятно, что как-то он отличает статическую память от динамической в процессе сканирования - это место и нужно будет поменять. Так же вероятно, что это будет просто битовый флажок (0x1001000 или что-нибудь в этом духе). Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 unction ScanSignature(base: Cardinal; size: Cardinal; sign: PByte; mask: PAnsiChar): integer;var mbi: MEMORY_BASIC_INFORMATION; offset: Cardinal; buffer: PByte; BytesRead: Cardinal; i: integer;begin offset := 0; while (offset < size) do begin VirtualQueryEx(m_hProc, Pointer(base + offset), mbi, sizeof(MEMORY_BASIC_INFORMATION)); if (mbi.State <> MEM_FREE) then begin GetMem(buffer, mbi.RegionSize); ReadProcessMemory(m_hProc, mbi.BaseAddress, buffer, mbi.RegionSize, BytesRead); for i := 0 to mbi.RegionSize do begin if (DataCompare(PByte(Integer(buffer) + i), sign, mask)) then begin FreeMem(buffer); result := integer(mbi.BaseAddress) + i; exit; end; end; FreeMem(buffer); end; offset := offset + mbi.RegionSize; end; result := 0; end;Вот функция сканирования, которая ток статические сканирует. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 С чего ты взял? Вообще-то она сканирует виртуальную память. VirtualQueryEx тебе ни о чем не говорит? Ссылка на комментарий Поделиться на другие сайты Поделиться
∟DarkPan Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 С чего ты взял? Вообще-то она сканирует виртуальную память. VirtualQueryEx тебе ни о чем не говорит?Извини, но поэтому коду, я написал модуль Который действительно сканирует и меняет! НО меняет первый найденный аддрес и выходит из цикла, нужно создавать tstringlist.. PS извиняюсь, не так прочитал, ксипо. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Дык погоди, оно ведь и должно искать первое вхождение. Сигнатура-то уникальная. Если надо несколько просканировать - делай список сигнатур и получай список адресов, точно так же, циклом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 11 января, 2015 Автор Поделиться Опубликовано 11 января, 2015 Сигнатура у меня уникальная. Но этой функцией я могу сканировать только статическую память. А когда сканирую сигнатуру из динамической, то она ничего не находит! Ссылка на комментарий Поделиться на другие сайты Поделиться
∟DarkPan Опубликовано 11 января, 2015 Поделиться Опубликовано 11 января, 2015 Покажи сигнатуру, я помогу Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 11 января, 2015 Автор Поделиться Опубликовано 11 января, 2015 Проблема актуальна 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 14 января, 2015 Автор Поделиться Опубликовано 14 января, 2015 Спасибо администрации за минус в репу, но я все же спрошу ещё раз. Если у которой есть .dll с нормальным сканером поделитесь плиз. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 Будет и второй минус за бесконечное подъем темы. Не нужно стараться быть хитрее других и постоянно поднимать собственную тему, чтобы в топе держалась. Всем нужны ответы на заданные вопросы, и все терпеливо ждут. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 Я все еще не совсем понял, в чем именно твоя проблема состоит. То ли у тебя сканер сигнатур работает не так, как нужно вовсе, то ли тебе нужно искать сразу несколько адресов. Уникальность сигнатуры означает то, что такая последовательность байт встречается только один раз. У меня в уроках сканер был точно такой же с точки зрения логики и вполне нормально работыл - никаких жалоб не было. Если же тебе нужно искать несколько адресов, то делай список сигнатур и в цикле вызывай функцию сканирования для каждой. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 И да, хочешь помощи - поясни, что именно ты понимаешь под статической и динамической памятью. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 14 января, 2015 Автор Поделиться Опубликовано 14 января, 2015 Проблема - сканер сканирует только статическую память.Статическая память - эта та область памяти, которая в СЕ обозначается зеленым цветом.А та что никак не подсвечивается - Динамическая. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 В size что передаешь? В приведенной тобой выше функции. Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 15 января, 2015 Поделиться Опубликовано 15 января, 2015 unction ScanSignature(base: Cardinal; size: Cardinal; sign: PByte; mask: PAnsiChar): integer;var mbi: MEMORY_BASIC_INFORMATION; offset: Cardinal; buffer: PByte; BytesRead: Cardinal; i: integer;begin offset := 0; while (offset < size) do begin VirtualQueryEx(m_hProc, Pointer(base + offset), mbi, sizeof(MEMORY_BASIC_INFORMATION)); if (mbi.State <> MEM_FREE) then begin GetMem(buffer, mbi.RegionSize); ReadProcessMemory(m_hProc, mbi.BaseAddress, buffer, mbi.RegionSize, BytesRead); for i := 0 to mbi.RegionSize do begin if (DataCompare(PByte(Integer(buffer) + i), sign, mask)) then begin FreeMem(buffer); result := integer(mbi.BaseAddress) + i; exit; end; end; FreeMem(buffer); end; offset := offset + mbi.RegionSize; end; result := 0; end;Вот функция сканирования, которая ток статические сканирует. попытайся поменять if (mbi.State <> MEM_FREE) then beginGetMem(buffer, mbi.RegionSize);на if (mbi.State=MEM_COMMIT) and not (mbi.Protect = PAGE_READWRITE)then begin GetMem(Buf, Mbi.RegionSize); и тд Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения