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

Cemi4ka

Заблокированные
  • Постов

    33
  • Зарегистрирован

  • Посещение

  • Победитель дней

    6

Весь контент Cemi4ka

  1. По поводу поиска сигнатуры в игре : http://zhyk.ru/forum/showthread.php?t=887570 По поводу если тебе нужно записать инструкцию - байты в игру ну не в самой ехе , а в длл игры есть функция function G_Base(ProcessID: Cardinal; MName: String): Pointer; var Modules : Array of HMODULE; cbNeeded, i : Cardinal; ModuleInfo : TModuleInfo; ModuleName : Array[0..MAX_PATH] of Char; PHandle : THandle; begin Result := nil; SetLength(Modules, 1024); PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, False, ProcessID); if (PHandle <> 0) then begin EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE), cbNeeded); SetLength(Modules, cbNeeded div SizeOf(HMODULE)); for i := 0 to Length(Modules) - 1 do begin GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)); if AnsiCompareText(MName, ModuleName) = 0 then begin GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf(ModuleInfo)); //Get the information of module Result := ModuleInfo.lpBaseOfDll; CloseHandle(PHandle); Exit; end; end; end; end;
  2. Доброе время суток !!! Хотел спросить или то я сошел с ума или то игра меня за дурака держыт Приведу пример на инструкции здоровья : 83 B9 ?? ?? ?? ?? ?? ?? ?? 6A ?? 68 ?? ?? 00 00 - Сигнатура [Execute/Read only:16]Сама инструкция : 01592F27 - 83 B9 B0 42 51 02 00 - cmp dword ptr [ecx+025142B0],0001592F2E - 7E 6C - jle 01592F9C01592F30 - 6A FF - push -0101592F32 - 68 CA 00 00 00 - push 000000CAДак вот начал я писать трейнер и меня немного смутило то что кажись адреса инструкций фиксированные ну они меняються (благо есть ОБСКАН) думаю хух полегчало как снова трабл Смищение инструкции cmp dword ptr [ecx+025142B0],00сменились на cmp dword ptr [ecx+014942B4],00вот тут я в тупике кто сталкивался с подобным ?
  3. Пример записи с изминением атрибута защиты блока памяти : procedure Write(ProcessID: Cardinal; WriteAdress: Integer; WriteValue: array of Byte);varpHandle:LongInt;Bytes : Cardinal;Aob_old_Protect_OFF: dword;Aob_old_Protect_ON:dword;beginpHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,ProcessID);VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),PAGE_EXECUTE_READWRITE,Aob_old_Protect_OFF);//Устанавливает атрибут Чтение\Запись (PAGE_EXECUTE_READWRITE)Application.ProcessMessages;WriteProcessMemory(pHandle,ptr(WriteAdress),(@WriteValue),SizeOf(WriteValue),Bytes);VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),Aob_old_Protect_OFF,Aob_old_Protect_ON);//ВвостанавливаемCloseHandle(pHandle);End;
  4. Функция VirtualProtect позволяет изменить атрибуты защиты указанного региона виртуального адресного програнства указанного процесса. { Вариант 1 }function VirtualProtectEx( hProcess: THandle; //дескриптор процесса lpAddress: Pointer; // начальный адрес фрагмента памяти dwSize: DWORD; // размер фрагмента памяти flNewProtect: DWORD; // новые атрибуты защиты lpflOldProtect: Pointer // старые атрибуты защиты): BOOL; stdcall; overload;{ Вариант 2 }function VirtualProtectEx( hProcess: THandle; //дескриптор процесса lpAddress: Pointer; // начальный адрес фрагмента памяти dwSize: DWORD; // размер фрагмента памяти flNewProtect: DWORD; // новые атрибуты защиты var OldProtect: DWORD // старые атрибуты защиты): BOOL; stdcall; overload;Описание Вы можете установить атрибуты доступа только для страниц, под которыми присутствует физическая память. Если хотя-бы под одной из страниц указанного диапазона нет физической памяти, то функция вернет ошибку и никакого изменения атрибутов защиты не произойдет. Функция VirtualProtectEx в целом идентичнафункции VirtualProtect, за исключением того, что позволяет изменять атрибуты защиты страниц памяти любого указанного процесса. Windows NT/2000: Указание атрибута PAGE_GUARD доступа к странице позволяет создавать в памяти защищаемые страницы. Создание таких страниц позволяет нам отловить попытки доступа к странице. Для большей информации смотрите раздел "Создание защищаемых страниц". Windows 95/98: Вы не можете использвоать функцию VirtualProtect к любому региону адресного пространства, расположенного внутри разделяемого адресного пространства (от $80000000 до $BFFFFFFF). Требования Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия Windows 95/98: Требуется Windows 95 или более поздняя версия Бибиотека: Kernel32.dll Подключаемый модуль: Windows Источник : http://www.hot.ee/memman/virtual/VirtualProtectEx.html
  5. че за бред причем тут отладка ? unit SignScan;interfaceusesWindows, SysUtils, Forms, TlHelp32;function DataCompare(data: PByte; sign: PByte; mask: PAnsiChar): boolean;function GetModuleInfo(const module_name: PChar; main_process: boolean): TModuleEntry32;procedure GetPID;procedure Write(ProcessID: Cardinal; WriteAdress: Integer; WriteValue: array of Byte);function ScanSignature(base: Cardinal; size: Cardinal; sign: PByte; mask: PAnsiChar): integer;varm_pID: integer;m_hProc: THandle;module: TModuleEntry32;m_Sign: integer;procName: string;implementationfunction DataCompare(data: PByte; sign: PByte; mask: PAnsiChar): boolean;beginwhile mask^ <> #0 dobeginif ((mask^ = 'x') and (data^ <> sign^)) thenbeginresult := false;exit;end;inc(mask);inc(data);inc(sign);end;result := true;end;function GetModuleInfo(const module_name: PChar; main_process: boolean): TModuleEntry32;varsnapshot: THandle;module: TModuleEntry32;beginsnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, m_pID);module.dwSize := sizeof(TModuleEntry32);if (Module32First(snapshot, module)) thenbeginif (main_process) thenbeginCloseHandle(snapshot);result := module;end;while (Module32Next(snapshot, module)) dobeginif (StrIComp(PChar(ExtractFileName(module.szModule)), PChar(module_name)) = 0) thenbeginCloseHandle(snapshot);result := module;end;end;end;result := module;end;procedure GetPID;varsnapshot: THandle;pInfo: PROCESSENTRY32;beginsnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);pInfo.dwSize := sizeof(PROCESSENTRY32);if (Process32First(snapshot, pInfo)) thenbeginwhile (Process32Next(snapshot, pInfo)) dobeginif pInfo.szExeFile = procName thenbeginm_pID := pInfo.th32ProcessID;CloseHandle(snapshot);exit;end;end;end;m_pID := 0;CloseHandle(snapshot);exit;end;procedure Write(ProcessID: Cardinal; WriteAdress: Integer; WriteValue: array of Byte);varpHandle:LongInt;Bytes : Cardinal;Aob_old_Protect_OFF: dword;Aob_old_Protect_ON:dword;beginpHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,ProcessID);VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),PAGE_EXECUTE_READWRITE,Aob_old_Protect_OFF);//Ñíÿòèå ïðîòåêöèè ñ ïàìÿòèApplication.ProcessMessages;WriteProcessMemory(pHandle,ptr(WriteAdress),(@WriteValue),SizeOf(WriteValue),Bytes);VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),Aob_old_Protect_OFF,Aob_old_Protect_ON);//Âîñòàíîâëåíèå ïðîòåêöèè ñ ïàìÿòèCloseHandle(pHandle);End;function ScanSignature(base: Cardinal; size: Cardinal; sign: PByte; mask: PAnsiChar): integer;varmbi: MEMORY_BASIC_INFORMATION;offset: Cardinal;buffer: PByte;BytesRead: Cardinal;i: integer;beginoffset := 0;while (offset < size) dobeginVirtualQueryEx(m_hProc, Pointer(base + offset), mbi, sizeof(MEMORY_BASIC_INFORMATION));if (mbi.State <> MEM_FREE) thenbeginGetMem(buffer, mbi.RegionSize);ReadProcessMemory(m_hProc, mbi.BaseAddress, buffer, mbi.RegionSize, BytesRead);for i := 0 to mbi.RegionSize dobeginif (DataCompare(PByte(Integer(buffer) + i), sign, mask)) thenbeginFreeMem(buffer);result := integer(mbi.BaseAddress) + i;exit;end;end;FreeMem(buffer);end;offset := offset + mbi.RegionSize;end;result := 0;end;end.
×
×
  • Создать...

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

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