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

Vlad2

Ветераны
  • Постов

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

  • Посещение

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

    13

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

  1. Vlad2

    TrainMe by Vlad

    Эта версия работает немного некорректно, но так будет даже проще взламывать. Лень сейчас отладкой заниматься, но запускаться должна.
  2. Vlad2

    TrainMe by Vlad

    Попробуй с совместимостью Win7 или XP запустить.
  3. Vlad2

    TrainMe by Vlad

    Сегодня решил тоже сделать свой TrainMe. Не очень сложный, но будет о чем подумать) В имеется одно условие, Когда жизни заканчиваются, TrainMe закрывается. Задачи: 1. Написать скрипт, который будет устанавливать 100% жизней. 2. Написать скрипт, который при ударе будет добавлять жизни. Те кто взломает, обязательно должны выложить сюда скрипты и написать, как происходил взлом. TrainMe by Vlad2.rar
  4. 5 минут и готово) Не правильно вы делаете защиту)
  5. Привет друзья. В общем перехожу потихоньку с D7 на XE8 и сталкиваюсь постоянно с проблемами, причем с совершенно нелепыми, как сейчас, и уже достаточно продолжительное время не могу ее решить. Дело в том, что все строчные переменные в ХЕ8 по-умолчанию имеют unicode кодировку. И когда, допустим, я читаю из памяти процесса строку ANSI формата, то я не могу вывести это строчку ни в label ни в edit, потому что разные кодировку. Просто отображаются иероглифы. В D7 было все попроще, все преобразовалось автоматически. Получается я застрял на конвертации из одного типа с другой. Подскажите, может возможно как-то настроить такое-же автоматическое преобразование, как в D7? И как вообще преобразовать ANSI в Unicode?
  6. Бан это не проблема) пусть хоть 10 раз бан) главное разобраться, как в таких ситуациях действовать, как находить подобного рода защиты)
  7. the crew. Да это не мега протектор. Этот прием достаточно прост, я сам его реализовать могу. Проблема в нахождении куска кода в процессе, который чистит регистры. Кто захочет попробовать обойти защиту - пишите в лс, дам логин и пароль от утечки.
  8. Что передаешь в ESP_Name? Как работает процедура WriteBytes? Расскажи подробней, как пытаешься писать в память.
  9. Привет, товарищи. На днях столкнулся с проблемой. Проблема заключается в том, что когда я ставлю брекпоинт на любой адрес игры, и происходят изменения значения адреса, брекпоинт просто не срабатывает. СЕ просто не видит никаких действий. Перепробовал все возможные настройки разных отладчиков, не работает отладчик даже в режиме ядра. Такое чувство, что что-то просто затирает бряк или просто отключает отладчик. Вот это я находил в исходнике трейнера, который когда то видел на этом форуме: procedure AntiDebug_DR_Handler; assembler;asm mov ecx, [esp+0Ch] add dword ptr [ecx+0B8h], 2 mov dword ptr [ecx+04h], 0 mov dword ptr [ecx+08h], 0 mov dword ptr [ecx+0Ch], 0 mov dword ptr [ecx+10h], 0 mov dword ptr [ecx+14h], 0 mov dword ptr [ecx+18h], 0 xor eax, eax retend;procedure AntiDebug; asm push offset AntiDebug_DR_Handler push dword ptr fs:[0] mov fs:[0],esp xor eax, eax div eax pop fs:[0] add esp, 4 end;end;
  10. Так и не нашел ответа, пришлось скачать ХЕ8 и компилировать проект на ней. Адаптировал для работы на 64 разрядной версии. Сканируется все как положено. unit SignScan;interfaceuses Windows, 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: int64; WriteValue: array of Byte); function ScanSignature(base: int64; size: int64; sign: PByte; mask: PAnsiChar): int64;var m_pID: int64; m_hProc: THandle; module: TModuleEntry32; m_Sign: int64; PidID, PidHandle: int64;implementationfunction GetModuleInfo(const module_name: PChar; main_process: boolean): TModuleEntry32;var snapshot: THandle; module: TModuleEntry32;begin snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, m_pID); module.dwSize := sizeof(TModuleEntry32); if (Module32First(snapshot, module)) then begin if (main_process) then begin CloseHandle(snapshot); result := module; end; while (Module32Next(snapshot, module)) do begin if (StrIComp(PChar(ExtractFileName(module.szModule)), PChar(module_name)) = 0) then begin CloseHandle(snapshot); result := module; end; end; end; result := module;end;procedure GetPID;var snapshot: THandle; pInfo: PROCESSENTRY32;begin snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); pInfo.dwSize := sizeof(PROCESSENTRY32); if (Process32First(snapshot, pInfo)) then begin while (Process32Next(snapshot, pInfo)) do begin if pInfo.szExeFile = procName then begin m_pID := pInfo.th32ProcessID; CloseHandle(snapshot); exit; end; end; end; m_pID := 0; CloseHandle(snapshot); exit;end;function DataCompare(data: PByte; sign: PByte; mask: PAnsiChar): boolean;begin while mask^ <> #0 do begin if ((mask^ = 'x') and (data^ <> sign^)) then begin result := false; exit; end; inc(mask); inc(data); inc(sign); end; result := true;end;function ScanSignature(base: int64; size: int64; sign: PByte; mask: PAnsiChar): int64;var mbi: MEMORY_BASIC_INFORMATION; offset: int64; buffer: PByte; BytesRead: Size_T; i: int64;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(buffer + i, sign, mask)) then begin FreeMem(buffer); result := int64(mbi.BaseAddress) + i; exit; end; end; FreeMem(buffer); end; offset := offset + mbi.RegionSize; end; result := 0;end;procedure Write(ProcessID: Cardinal; WriteAdress: int64; WriteValue: array of Byte);var pHandle:LongInt; Bytes : SIZE_T; Aob_old_Protect_OFF: dword; Aob_old_Protect_ON:dword;begin pHandle:=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;end.
  11. push eax mov eax,["GNZ.exe"+009EFC6C] mov eax,[eax+69C] mov eax,[eax+278] mov eax,[eax+14] mov eax,[eax+AC] mov [eax+C8],#100 pop eax
  12. Я бы удостоился выбрать, если компилировал не на D7, а на XE
  13. Дело не в скорости поиска, дело в том, что сигнатура не находится, если она расположена после адреса 0хFFFFFFFF. Допустим, моя сигнатура расположена по адресу 0х20FF30EC04. Я задам диапазон поиска 0х20FF30EC00 - 0х20FF30EC08. И сканер всеравно уйдет в бесконечный поиск.
  14. Здравствуйте, у меня есть модуль для сканирования памяти, но он работает только в диапазоне адресов 0х00000000 - 0хFFFFFFFF. И получается в 64 разрядных приложениях, он не может достать до некоторых адресов, которые за этим пределом. Нужно, чтоб он работал в таком диапазоне 0х00000000000 - 0хFFFFFFFFFFF, но не могу никак его заставить это делать. 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.
  15. Ну а почему просто не использовать [ecx+4С]? Или переделай активирующий скрипт, чтоб он в StarID добавлял сразу нужный адрес. newmem:add ecx,4c // Добавляем 4с к значению регистра, чтоб получить сразу нужный адресmov [StarID],ecx // Записываем в метку адресsub ecx,4c // Вычитаем 4с от регистра, чтоб дальше по коду не возникало путаниц code:mov ax,[ecx+edx*8+04]jmp returnИли если СЕ не будет против, можно попробовать так newmem:mov [StarID],ecxadd StarID,4c code:mov ax,[ecx+edx*8+04]jmp return
  16. Еще 8 лет назад читал про тебя в новостях) Наверное сейчас это сильно сказалось, судя по твоим сообщениям на форуме)http://www.kp.ru/daily/23974/73904/
  17. Всем привет! После неприятностей у Dison`а хочу поделиться с вами способом защиты трейнера, созданного в СЕ. Этот способ я изобрел еще очень-очень давно. Сам уже перешел в другую среду разработки, поэтому больше ничего нового не придумал. Сам СЕ никакой защиты кода не предполагает. Поэтому мы можем взять любой трейнер, сгенерированный СЕ и вытащить его код самой же СЕ. Для этого нам всего лишь нужно найти строку "CheatTable" в процессе, под которой будет весь исходник трейнера. Мой способ защиты уже будет вводить "Хакера" в заблуждение, потому что открыв исходник трейнера он уведет лишь всего одну строку. Сейчас я вам постараюсь доступно объяснить, как защитить свой трейнер. Сразу хочу сообщить, что нам придется отказаться от автоматической генерации трейнера. Будем делать все вручную. Первое что нам нужно это создать форму для трейнера: Открываем СЕ -> Table -> Create Form. Будет создана форма с дефолтным именем "UDF1". На форму мы кинем Label и в свойстве Caption напишем "F12 - Включить/Выключить скрипт", для того, чтоб человеку использующему наш трейнер было понятно, какая клавиша за какую функцию отвечает. Дальше все создание дизайна остается за вами. Теперь в инспекторе объектов (Object Inspector) выбираем нашу форму, переходим во вкладку события (Events) Кликаем по пустому полю, справа от строки "OnClose". Нас отправят в другое окно, с LUA кодом, в котором будет сгенерирована функция закрытия. Вскоре мы ее допишем. Пришло время написать код нашего трейнера. local TimerShit = createTimer(UDF2, true)function Shit()os.remove('Vlad2.lua') --// Сюда пишем имя файла с LUA скриптом.os.remove('CET_TRAINER.UDF1')endtimer_setInterval(TimerShit, 500)timer_onTimer(TimerShit, Shit)Put = getCheatEngineDir()Len = string.len(Put)Len = Len-10Put = string.sub(Put, 0, Len)os.remove(Put..'CET_Archive.dat')
  18. На более новых версиях уже есть, так что для практики самое то!
  19. Что-то глухо, никто не брался или навыков мало?
  20. Вот что будет входить в аккаунт http://www.testdriveunlimited2.com/store Данные аккаунта нужны только для регистрации онлайн профиля.
×
×
  • Создать...

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

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