-
Автор темы
- #1
Мой очень старый(2011-2012 год) туториал по поиску и работе с сигнатурами.Тутор делал для другого сайта, поэтому выглядит кривовато..(Скопировано как есть)
Пример на игре ПоинтБланк. Возможно кто-то подчерпнет для себя моменты...
Сканер адрессов:
Создаем новый проект:
Проект Win32
Тип проекта - Библтотека DLL
Доп.параметры - Пустой проект
Создаем фаил исходного кода(.срр) - ПКМ - Добавить - Создать элемент(или нажать Ctrl+Shift+A)
Подключаем нужные фаилы:
Пишем точку входа(позже ее заполним)
Пока у нас только закрывается процесс при аттаче...
Не люблю когда все свалено в одном файле, поэтому создаем заголовочный файл(.h)
Я назвал его Hack.h... Подключаем его к главному фаилу проекта, дописав в нем
Теперь заполним этот фаил нужными нам функциями:
"ФиндПаттерн"
"Работа с .txt
Добавим еще два заголовочных фаила и включим их в проект:
Signature.h - здесь будем писать сигнатуры
PrintAdress.h - здесть будем записывать адресса в txt
Заполняем(пример на ЕСП и АнтиСлеп):
"PrintAdress.h"
Вернемся к нашей точке входа и допишем все остальное:
Компилируем и пробуем(заранее переименовав dll в "dxhook.dll" или "Game.dll")
Поиск сигнатур:
Используем ОллиДебаггер+плагин "SigScan"(Ссылки ниже)...
Запускаем программу и открываем "PointBlank.exe.exe"
Переходим по адрессу функции(в моем случаи это АнтиСлеп - 661FD0)
Выделяем область в несколько адрессов, ПКМ - Make Sig - Test Sig - Scan, и смотрим на результат
[
Если адрессов несколько то возвращаемся и выделяем область побольше
Ноходим уникальный набор байт и вписываем все в "формулу"
Если не удается найти уникальные байты(например такое происходит с быстрым минированием), то:
Пример на игре ПоинтБланк. Возможно кто-то подчерпнет для себя моменты...
Сканер адрессов:
Создаем новый проект:
Проект Win32
Тип проекта - Библтотека DLL
Доп.параметры - Пустой проект
Создаем фаил исходного кода(.срр) - ПКМ - Добавить - Создать элемент(или нажать Ctrl+Shift+A)
Подключаем нужные фаилы:
Код:
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
Код:
BOOL WINAPI DllMain(HINSTANCE module, DWORD dwReason, LPVOID lpvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
ExitProcess(0);//закрываем процесс
}
return true;
}
Не люблю когда все свалено в одном файле, поэтому создаем заголовочный файл(.h)
Я назвал его Hack.h... Подключаем его к главному фаилу проекта, дописав в нем
Код:
#include "Hack.h"
"ФиндПаттерн"
Код:
bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask) return 0;
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;
}
Код:
using namespace std;
ofstream ofile;
char dlldir[320];
void __cdecl add_log (const char *fmt, ...)
{
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;
}
}
char *GetDirectoryFile(char *filename)
{
static char path[320];
strcpy(path, dlldir);
strcat(path, filename);
return path;
}
Signature.h - здесь будем писать сигнатуры
PrintAdress.h - здесть будем записывать адресса в txt
Код:
#include "Signature.h"
#include "PrintAdress.h"
Код:
DWORD Flash = FindPattern(0x401000,0x4c8000,(PBYTE)"\x55\x8B\xEC\x83\xEC\x64\x89\x4D\xA4\x83\x7D\x08\x00","xxxxxxxxxxxxx");
DWORD HP1 = FindPattern(0x401000,0x4c8000,(PBYTE)"\x0F\x85\x00\x00\x00\x00\x8D\x4D\x93","xx????xxx");
DWORD HP2 = FindPattern(0x401000,0x4c8000,(PBYTE)"\x0F\x84\x00\x00\x00\x00\x8B\x85\x00\x00\x00\x00\x8B\x48\x10\xE8\x00\x00\x00\x00\x50","xx????xx????xxxx????x");
Код:
void PrintLog()
{
add_log("#define ESP1 0x%X",HP1);
add_log("#define ESP2 0x%X",HP2);
add_log("#define NoFlash 0x%X",Flash);
}
Код:
BOOL WINAPI DllMain(HINSTANCE module, DWORD dwReason, LPVOID lpvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
remove("C:\\LogSignature.txt");//удаляем,если есть, старый фаил
ofile.open(GetDirectoryFile("C:\\LogSignature.txt"), ios::app);//создаем новый фаил
PrintLog();//заполняем сoзданный ранее фаил
ExitProcess(0);//закрываем процесс
}
return true;
}
Поиск сигнатур:
Используем ОллиДебаггер+плагин "SigScan"(Ссылки ниже)...
Запускаем программу и открываем "PointBlank.exe.exe"
Переходим по адрессу функции(в моем случаи это АнтиСлеп - 661FD0)
Выделяем область в несколько адрессов, ПКМ - Make Sig - Test Sig - Scan, и смотрим на результат
Если адрессов несколько то возвращаемся и выделяем область побольше
Ноходим уникальный набор байт и вписываем все в "формулу"
Код:
DWORD Адресс = FindPattern(Начало,Конец,(PBYTE)"Байты","Маска");
"Для тех у кого нет строки Make Sig"Annedroid;3481335 написал(а):допустим ищешь какой-то динамический адрес, а он меняется, и байты к нему не подобрать, тогда ты ищешь адрес который рядом с ним и ищешь его байты, а потом просто прибавляешь смещение (разницу между нужным адресом и адресом по которому искали)...
Meteor2142;3483825 написал(а):Заходишь в Олли, жмешь Options->Appearence->Directories, там указываешь путь ка папке где лежит твой Олли, жмешь ОК, а потом перезагружаешь Олли!