Перейти к содержанию

Функция findpattern c++


Рекомендуемые сообщения

Ребята , недавно задался вопросом (возможно глупым) .Все знают функцию findpattern ? Но многие точно пользовались и знают , зачем она нужна .
У меня вопрос , что если одна часть сигнатуры находится в одной странице памяти , а другая часть в другой ? Найдёт ли функция сигнатуру в таком случае ?
код:
 

Скрытый текст

DWORD FindSignature(HANDLE m_hProc,DWORD base, DWORD size, BYTE* sign, char* mask)
{
	LoadNTFunction();
	MEMORY_BASIC_INFORMATION mbi = { 0 };
	DWORD offset = 0;

	while ((offset < size))
	{
		VirtualQueryEx(m_hProc, (LPCVOID)(base + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION));
		

		if (mbi.State != MEM_FREE)
		{

			BYTE* buffer = new BYTE[mbi.RegionSize];
			ReadProcessMemory(m_hProc, mbi.BaseAddress, buffer, mbi.RegionSize, NULL);

			for (size_t i = 0; i < mbi.RegionSize; i++)
			{
				if (DataCompare(buffer + i, sign, mask))
				{
					delete[] buffer;

					return (DWORD)mbi.BaseAddress + i;
				}
			}
			delete[] buffer;
		}
		offset += mbi.RegionSize;
	}
	return 0;
}

bool DataCompare(BYTE* data, BYTE* sign, char* mask)
{
	for (; *mask; mask++, sign++, data++)
	{
		if (*mask == 'x' && *data != *sign)
			return false;
	}
	return true;
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

12 минуты назад, gamehikker сказал:

аходится в одной странице памяти , а другая часть в другой ?

2 сигнатуры выходит?

 

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

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, partoftheworlD сказал:

2 сигнатуры выходит?

Да . Но ведь такое может быть , если я нашёл одну сигнатуру , но её части в разных страницах памяти . Это недоработка получается и все используют это код . Эх...

 

@gamehikker прочтите -> жмяк

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, gamehikker сказал:

Да

Поправил прошлое сообщение, а вообще редко такое бывает чтобы сигнатура была на границе регионов, возможно стоит взять чуть дальше сигнатуру от конца региона, а после перемещаться прибавляя или отнимая байты уже от найденного адреса.

Ссылка на комментарий
Поделиться на другие сайты

Если мне не изменяет моя память, то страницы памяти выравниваются по 4-х килобайтной границе. На практике это означает, что вероятность появления какого-либо кода в конце региона весьма и весьма мала. Отсюда, кстати, и работоспособность инструмента поиска код кейвов (да-да, был такой инструмент, искал кейвы, и мы не выделяли память, а использовали готовые "дыры").

Ссылка на комментарий
Поделиться на другие сайты

19 часов назад, Xipho сказал:

 

Вы хотите сказать , что не о чём волноваться ? Всё нормально работает ? Код сканера менять не нужно ?

Изменено пользователем gamehikker
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, gamehikker сказал:

что не о чём волноваться ?

Не спеши костыли писать, вот когда перестанет работать, тогда будет проще использовать dll, вместо костылей, да и по времени это куда быстрее.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, gamehikker сказал:

Вы хотите сказать , что не о чём волноваться ?

Я хочу сказать, что за всю мою практику геймхакинга и программирования я ни разу не сталкивался с тем, чтобы какой-то код в обычных условиях попадал на границу страниц. Собственно, я даже не сталкивался с тем, чтобы какой-то линейный объем данных попадал на стык страниц.

Ссылка на комментарий
Поделиться на другие сайты

А можно как-то найти нужный адрес без сканера ? Я нашёл сигнатуру в игре на движке unity .Эта сигнатура связана с самим движком . Как можно было бы её находить без сканера ?
Т.к. сканер ищет довольно таки долго , если по памяти всего процесса (там гигабайт точно )

Ссылка на комментарий
Поделиться на другие сайты

42 минуты назад, gamehikker сказал:

Т.к. сканер ищет довольно таки долго , если по памяти всего процесса (там гигабайт точно )

Это странно, 5 гб в оперативе battlefield 1 ищет меньше 1 секунды.

43 минуты назад, gamehikker сказал:

Эта сигнатура связана с самим движком

Использовать SDK Unity

Ссылка на комментарий
Поделиться на другие сайты

Ну мне нужен адрес инструкции . Адрес у неё динамический и после перезапуска игры , адрес поменяется и инструкцию придётся искать снова .
_gQ1sJH21_s.jpg
Может быть как-то с помощью трассировки можно ?

Изменено пользователем gamehikker
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, gamehikker сказал:

От компа зависит

эммм... а Вы уверены в правильности Вашей функции поиска сигнатур? для примера 2гб оепативы у меня сканируется около 2-3 сек на планшете!!!(Intel Atom 1.44Ghz) Я почему-то сомневаюсь, что у вас комп слабее моего планшета...

 

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, temtriss сказал:

Вы уверены в правильности Вашей функции поиска сигнатур

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

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, partoftheworlD сказал:

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

Исходя из кода - не должен. А вот постоянное выделение и освобождение буфера - затратно. Лучше выделить кусок побольше и с ним работать. И еще б неплохо регион на PAGE_EXECUTE проверять.

Ссылка на комментарий
Поделиться на другие сайты

27 минут назад, gamehikker сказал:

Нашёл пятиуровневые указатели (очень много) сканер не нужен теперь .Думаю , это успех

Указатели ненадежные

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, partoftheworlD сказал:

Указатели ненадежные

их 23000 , игру и пк перезапускал несколько раз . Указатели остаются рабочими .Но нужно проверить на другом компьютере , чтобы быть на 100% уверенным

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, gamehikker сказал:

их 23000

Если чит/трейнер рассчитан на долгое использование, то указатели лучше не использовать 1 обновление и все они отвалятся.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, gamehikker сказал:

В моём случае это только плюс . Но я думаю , что всё будет норм и так

:rolleyes: а после обновления заново продавать ? B) 

 

Изменено пользователем IzerodayI
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.