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

Cemi4ka

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

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

  • Посещение

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

    6

Сообщения, опубликованные Cemi4ka

  1. По поводу поиска сигнатуры в игре :

     

    kis3J.png

     

    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;
    • Плюс 1
  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. Попробую пошаговую отладку в Дельфи

    че за бред причем тут отладка ?

     

    Здравствуйте, у меня есть модуль для сканирования памяти, но он работает только в диапазоне адресов 0х00000000 - 0хFFFFFFFF. И получается в 64 разрядных приложениях, он не может достать до некоторых адресов, которые за этим пределом.

    Нужно, чтоб он работал в таком диапазоне 0х00000000000 - 0хFFFFFFFFFFF, но не могу никак его заставить это делать.

    В функцию ScanSignature передается адрес с которого начинать сканировать, адрес до которого сканировать, байты и маска.

    Так как адреса начала и конца сканирования передаются в типе Cardinal, а его диапазон до 0хFFFFFFFF, то я решил поменять этот тип на Int64, его диапазон заканчивается на 0х7FFFFFFFFFFFFFFF, но это не дало результатов. Поиск просто стал длиться бесконечно долго. Помогите адаптировать этот сканер под 64 разрядные приложения. 

     

    Ну дак если тебе нужно адаптировать сканер под 64 розрядные приложения ты хотябы удостойся  выбрать розрядность своего приложения !!

    10571931.png

    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.
×
×
  • Создать...

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

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