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

24K

Пользователи+
  • Постов

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

  • Посещение

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

    4

Весь контент 24K

  1. а чего ce станет платной? Ea games тоже решили подшутить чтоли? установил с диска лицензию (Покупал 2 года назад, такого не было никогда) и просит ввести код, а кнопка далее где? и с чего он за 2 года попросил заново ввести ключ? и когда вводиш клю (Я их штук 20 ввёл) они ошибку на все выдают
  2. Я сразу понял что это какой то прикол. так как Cheat engine в жизни не станет платной тем более $1800
  3. Неудачная шутка
  4. Вашему вниманию предоставляется вторая часть учебника о написании небольших трейнеров на Delphi c использованием WinAPI.Данная статья поможет тем,кто по каким-то причинам не разобрался или не понял,как пишутся маленькие по размеру трейнера из предыдущей части данного учебника.На сей раз мы будем писать наш трейнер на WinAPI с использованием ресурсов.Данный способ намного проше,чем первый,а так же я приведу пример как блокировать программы,которые шпионят за нашим трейнером.Опять-таки приведу аргументы в пользу данного метода написания трейнеров: " Писать нам наш трейнер будет легче,так как работаем мы с ресурсами.Для этого нам нужен хороший редактор ресурсов (Restorator или ResHaker),я предпочитаю 2-ой. " По идеи данный способ позволит нам скостить ~ 1-1,5 кб. В крайности я вдаваться не буду,так что приступим. Кодинг Для начала нам придётся создать в блокноте файл trainer.rc,который будет содержать следующие строки: ======================trainer.rc============================ 100 DIALOG 0, 0, 173, 69 STYLE DS_SETFONT | DS_CENTER | WS_CAPTION | WS_SYSMENU CAPTION "[FlatOut] Trainer +1" FONT 8, "Terminal" { PUSHBUTTON "About", 102, 2, 52, 36, 15, BS_FLAT PUSHBUTTON "Close", 101, 132, 52, 38, 15, BS_FLAT GROUPBOX "Trainer options: ", -1, 1, -1, 172, 51 LTEXT "[C0DED] <--::--> bY g-l-u-k [TeaM - X]", -1, 7, 36, 164, 12, WS_DISABLED LTEXT "[F1] :.......: More Money", -1, 7, 9, 126, 12, WS_DISABLED } ======================trainer.rc============================ После создания этого файла перетащите его на brcc32.exe,который лежит в папке "Program Files\Borland\Delphi7\Lib".После этого получам trainer.res,который подлинкуем к нашему трейнеру. program FlatOut; //Опять будем ломать FlatOut uses windows, messages; //Именно по этому наш трейнер должен весить //меньше,если помните то в прошлой части учебника мы использовали //ещё и commctrl. const ID_ABOUT = 102; //Номера контролов нашего ресурса ID_EXIT = 101; Elapse = 10; //Нужен для таймера aboutcap = 'About'; //Наш About Dialog aboutmsg = ' [C0DED]: bY g-l-u-k [TeaM - X] ' +#13#10+ ' ' +#13#10+ ' GreatZzz....: ' +#13#10+ ' ' +#13#10+ ' Baron_Gede,6aHguT,AllexY ' +#13#10+ ' And all TeaM - X Members ! ' +#13#10+ ' ' +#13#10+ ' Write on pure Delphi (WinAPI) ' +#13#10+ ' copyright (g-l-u-k)R 2004-2005 ' +#13#10+ ' ' +#13#10+ ' http://www.team-x.ru ' +#13#10+ ' e-mail : g-l-u-k@rambler.ru ' +#13#10+ ' ' +#13#10+ ' GEngine v0.1 ' +#13#10+ ' All Right Reserved '; WindowTitle = 'Flat-Out'; //Название окна игры Address = $01B40C64;//Адресс нашего значения PokeValue = $FFFFFFFF;//наше значение NumberOfBytes = 4;//Кол-во байт var Msg : TMSG; Win : HWND; WindowName : Integer; ProcessId : Integer; ThreadId : Integer; hInst : Dword; Buf : PChar; HandleWindow : Integer; Write : Cardinal; {$R trainer.res} //Наш ресурс в котором хранится окно трейнера //Вот самая интересная часть нашего трейнера,процедура роверки. //Если TrainerSPY активен,то мы обломим следящего за нашим //трейнером. function IsTrainerSpyActive:bool; var hProcess,hKernel:dword; addr:pointer; b:byte; dummy:cardinal; proc:pchar; begin result:=false; proc:='WriteProcessMemory'; if FindWindowExA(0,0,nil,'Trainer Spy')<>0 then begin result:=true; exit; end; hProcess:=GetCurrentProcess; hKernel:=LoadLibrary('kernel32.dll'); if hKernel<>0 then begin addr:=GetProcAddress(hKernel,proc); ReadProcessMemory(hProcess,addr,@b,1,dummy); FreeLibrary(hKernel); if b=204 then result:=true; end; end; //Процедура взлома игры,описывать полностью не буду,опишу только //самое главное. procedure Cheating; begin if IsTrainerSpyActive then //если TrainerSpy запушен, то вырубаемся begin MessageBox(0,'Выруби шпион.','Ошибка зашиты',MB_OK or MB_ICONERROR); exit; end; WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then begin MessageBox(win,'Игра должна быть запушенна до трейнера','Ошибка',MB_OK or MB_ICONINFORMATION); end; ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write); FreeMem(buf); CloseHandle(HandleWindow); end; procedure Quit; //процедура выхода из программы begin EndDialog(win,0); Halt; end;[/code [code]procedure DoTimer; //Дополнительна зашита от шпионов begin CreateFileA('C:\logwmemory.bin',$40000000,1,nil,2,1,0); hInst:= GetModuleHandle(nil); SetTimer(hInst,1,Elapse,@DoTimer); end; //Обработчик событий нашего окна function SettingsDlgProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; StdCall; begin case Msg of wm_InitDialog : begin end; wm_Close : DestroyWindow(Win); wm_Destroy : PostQuitMessage(0); end; Result := 0; case Msg of WM_COMMAND : begin if wParam = ID_EXIT then Quit; //Ели нажата кнопка выхода,выходим if wParam = ID_ABOUT then MessageBox(Win,aboutmsg,aboutcap,MB_OK or MB_ICONINFORMATION);//А это наш //about end; end; end; //Процедура создания главного окна Procedure RunSettings; begin Win := CreateDialog(hInstance,PCHar(100),0,@SettingsDlgProc); Showwindow(Win,SW_SHOW); Updatewindow(Win); end; begin RunSettings; while GetMessage(Msg,0,0,0) do begin //Цикл сбора сообщений TranslateMessage(Msg); if (GetAsyncKeyState(VK_F1) <> 0) then Cheating;//Горячая клавиша DispatchMessage(Msg); end; end. В заключении данного учебника я ещё раз повторюсь, что писать трейнера на Delphi не только можно но и нужно. У меня трейнер получился ~19 кб. После сжатия FSG 2.0 вышло ~11 кб, ну это уже по божески. От себя я добавлю следующее, "Delphi самый простой в изучении язык программирования. "Надеюсь, что данным учебником я сумел опровергнуть следующее мнение, что "Delphi - это мусорогенеротор".
  5. Итак, в данном учебнике я попробую обьяснить и рассказать, как в Delphi пишутся трейнеры. Вы наверное сразу же подумаете, что писать трейнеры на Delphi убого,т.к. одна пустая форма в скомпилированном состоянии весит аж 300 Кб. Но я постараюсь разрушить этот миф. Писать наш трейнер мы будем без VCL. Но как же так, скажете вы? - Наш будуший трейнер будет написан на чистом WinAPI. Приведу в свою защиту несколько фактов: При написании программ на чистом WinAPI,скомпиленный *.exe будет весить ~15 кб (какие перспективы открываются перед нами). Наше приложение будет работать в несколько раз быстрее. Один, но существенный минус - нам придётся описывать всё вручную. Но мы с вами живём в век высоких технологий (хе-хе). В решении нашей задачи нам поможет программа под названием APIx. При помощи данной программы мы сможем спроектировать своё приложение как и в Delphi, но на чистом WinAPI. Как говорится, "меньше слов, ближе к делу". Кодинг Я постараюсь как можно подробнее описать весь код нашего будущего трейнера. Поехали ! //Немного оптимизации {$R-} {проверка диапазона} {$S-} {проверка стека} {$A+} {"выравнивание слов"} program FlatOut; uses windows, messages, commctrl; //Используемые модули,только самое нужное! var WinClass : TWndClass; //переменная класса TWndClass для создания главного окна hInst : HWND; //Хендл приложения Handle : HWND; //локальный хендл Com1 : HWND; //TGroupBox Com2 : HWND; //TButton Com3 : HWND; //TButton Com4 : HWND; //TStaticText Com5 : HWND; //TStaticText Com6 : HWND; //TStaticText Msg : TMSG; //сообщения hFont : HWND; //хендл шрифта win : hwnd; //хендл данного окна var WindowName : integer; //имя окна ProcessId : integer; //ID процесса ThreadId : integer; //Поток buf : PChar; HandleWindow : Integer; //хендл окна игры write : cardinal; const //id наших контролов id_1 = 1; //TGroupBox id_2 = 2; //TButton id_3 = 3; //TButton id_4 = 4; //TStaticText id_5 = 5; //TStaticText id_6 = 6; //TStaticText const WindowTitle = 'Flat-Out'; //конец формы, начало формы, точный заголовок игры Address = $01B40C64; //адрес нашего значения в памяти игры PokeValue = $FFFFFFFF; //значение на которое мы будем менять NumberOfBytes = 4; //кол-во байт {$R XPMan.res} //Здесь у меня лежит иконка моего трейнера и манифес, //это для того что бы все контролы были в стиле XP procedure Cheating; //Собственно сама процедура изменения значения begin WindowName := FindWindow(nil,WindowTitle); //находим окно игры If WindowName = 0 then //или,обьясняем пользователю чтобы begin //он запустил игру MessageBox(win,'Вначале игра,а потом трейнер.','Ошибка',MB_OK or MB_ICONINFORMATION); end; ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write);//пишем в наш адресс наше значение FreeMem(buf); CloseHandle(HandleWindow);//конец формы, началоформы, закрываем хэндл, чтобы не вылететь с ошибкой end; procedure ShutDown; //процедура выхода из программы begin DeleteObject(hFont); //удаляем шрифт UnRegisterClass('Sample Class', hInst); //удаляем окно ExitProcess(hInst); //закрываем окно Halt; //на всякий случай end; procedure About; //наше окно о программе begin MessageBox(win, ' [C0DED]: bY g-l-u-k [TeaM - X] ' +#13#10+ ' ' +#13#10+ ' GreatZzz....: ' +#13#10+ ' ' +#13#10+ ' Baron_Gede,6aHguT,AllexY ' +#13#10+ ' And all TeaM - X Members ! ' +#13#10+ ' ' +#13#10+ ' Write on pure Delphi (WinAPI) ' +#13#10+ ' Сopyright (g-l-u-k)R 2004-2005 ' +#13#10+ ' ' +#13#10+ ' http://www.team-x.ru ' +#13#10+ ' e-mail : g-l-u-k@rambler.ru ' +#13#10+ ' ' +#13#10+ ' GEngine v0.1 ' +#13#10+ ' All Right Reserved ', 'About',MB_OK or MB_ICONINFORMATION); end; function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений begin Result := DefWindowProc(hwnd, msg, wparam, lparam); case Msg of WM_COMMAND: case LoWord(wParam) of id_2 : if HiWord(wParam) = bn_Clicked then About; //если пользователь нажимает на кнопку "About",получат свой About id_3 : if HiWord(wParam) = bn_Clicked then ShutDown; //если выход то...... end; WM_DESTROY: ShutDown; end; end; begin hInst := GetModuleHandle(nil); with WinClass do begin Style := CS_PARENTDC; //стиль класса главного окна hIcon := LoadIcon(hInstance, IDI_APPLICATION); //иконка программы lpfnWndProc := @WindowProc; //назначение обработчика сообщений hInstance := hInst; hbrBackground := COLOR_BTNFACE + 1; //цвет окна lpszClassName := 'Sample Class'; //класс окна hCursor := LoadCursor(0, IDC_ARROW); //активный курсор end; InitCommonControls; RegisterClass(WinClass); //регистрация класса в сис-ме {Создание главного окна программы} Handle := CreateWindowEx(0, 'Sample Class', '[FlatOut] Trainer +1', WS_OVERLAPPED or WS_SYSMENU or WS_VISIBLE, 503, 345, 234, 222, 0, 0, hInst, nil); {Создание шрифта} hFont := CreateFont( -12, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'Terminal'); Com1:=CreateWindow( 'Button', 'Trainer Options:' , WS_CHILD or BS_GROUPBOX or WS_VISIBLE, 2,2,222,165, Handle, id_1, hInst,nil); SendMessage(Com1,WM_SETFONT,hFont,0); Com2 := CreateWindow( 'Button', 'About', WS_CHILD or BS_TEXT or WS_VISIBLE, 3, 171, 74, 20,Handle, id_2, hInst, nil); SendMessage(Com2,WM_SETFONT,hFont,0); Com3 := CreateWindow( 'Button', 'Quit', WS_CHILD or BS_TEXT or WS_VISIBLE, 148, 171, 74, 20,Handle, id_3, hInst, nil); SendMessage(Com3,WM_SETFONT,hFont,0); Com4 :=CreateWindow( 'Static', '[F1] :...: More Money' , WS_CHILD or SS_LEFT or SS_NOTIFY or WS_VISIBLE, 51,25,117,17,Handle, id_4, hInst,nil); SendMessage(Com4,WM_SETFONT,hFont,0); Com5:=CreateWindow( 'Static', '[C0DED] :...: g-l-u-k [TeaM - X]' , WS_CHILD or SS_LEFT or SS_NOTIFY or WS_VISIBLE or WS_DISABLED, 32,145,180,17,Handle, id_5, hInst,nil); SendMessage(Com5,WM_SETFONT,hFont,0); Com6:=CreateWindow( 'Static', '[R.Mouse] :...: About Box ' , WS_CHILD or SS_LEFT or SS_NOTIFY or WS_VISIBLE, 26,50,190,17,Handle, id_6, hInst,nil); SendMessage(Com6,WM_SETFONT,hFont,0); //Цикл сбора сообщений while(GetMessage(Msg, Handle, 0, 0)) do begin TranslateMessage(Msg); //приём сообщений if (GetAsyncKeyState(vk_f1 ) <> 0) then Cheating; //если нажата клавиша F1,читим игру if (GetAsyncKeyState(vk_RButton) <> 0) then About; //если нажата правая кнопка мыши,то показываем About if (GetAsyncKeyState(vk_Escape ) <> 0) then ShutDown; DispatchMessage(Msg); //удаление сообщений из очереди end; end. Как вы видите писать трейнеры в Delphi на чистом WinAPI не так уж и сложно. У меня размер EXE файла получился ~19 кб (Попробуйте меньше). В следующей статье я раскажу вам второй способ написания трейнера на WinAPI
  6. я сейчас проверить не могу, я игру взломал а таблицу не сохранил
  7. если сделать вот так,то игра вылетит [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) 007B1020: jmp newmem nop returnhere: newmem: //this is allocated memory, you have read,write,execute access //place your code here mov [eax+000000b4],(float)1 originalcode: mov ecx,[eax+000000b4] <----- инструкция денег exit: jmp returnhere [DISABLE] //code from here till the end of the code will be used to disable the cheat 007B1020: mov ecx,[eax+000000b4] //Alt: db 8B 88 B4 00 00 00 dealloc(newmem)
  8. Таймер 4 байта, не float, адрес времени не изменяется но скрипт написать требуется для того чтобы время было бесконечное везде в миссиях, подмиссиях и дополнительных заданиях
  9. Я спецально сделал трейнер для версии от 1C http://forum.gamehac...ta-san-andreas/ ... пользуйся не трать силы на поиски ..... ну если хочешь сам найти адрес таймера то садись в коповскую тачку, запускай CE, поиск неизвестного значение, и когда время будет уменьшаться в CE, decreased value, убиваешь приступника, время прибавляется в CE, Increased value и так далее.... сделаешь скрипт, и он будет работать в миссиях и доп миссиях. т.е бесконечное время будет везде где есть задания на время .... таймер 4 байта..
  10. Уважайте тужой труд, я сам из трейнером музыки вытаскивал, я делаю это для себя.....
  11. Собрал самую лучшую музыку для трейнеров в формате .xm (Взято с трейнеров h4x0r'а) Список музыки: - Borderlands Music Trainer - Crash Time 4 - The Syndicate Music Trainer - Dead Rising 2 Music Trainer - Dead Space 2 Music Trainer - Far Cry 2 Music Trainer - Grand Theft Auto 4 Music Trainer - Left Behind Rise of the Antichrist Music Trainer - Mafia 2 Music Trainer - Plants vs. Zombies Music Trainer - Saints Row 2 Music Trainer - Serious Sam HD The First Enconunter Music Trainer - Supreme Commander 2 Music Trainer - The Precursors Music Trainer - Trapped Dead Music Trainer - Velvet Assassin Music Trainer - Stalker Call Of Pripyat Music Trainer - Alan Wake Music Trainer - Alice Madness Returns Music Trainer - Batman Arkham City Music Trainer - Company Of Heroes. Tales Of Valor Music Trainer - Dead Block Trainer Music - Dead Rising 2 Off The Record Music Trainer - Dirt 3 Music Trainer - Fable 3 Music Trainer - Fallout 3 Music Trainer - L.A. Noire Music Trainer - Napoleon Total War Music Trainer - Prototype Music Trainer - Resident Evil 5 Music Trainer - Rock of Ages Music Trainer - Terraria Music Trainer - Tropico 4 Music Trainer - Zeit 2 Music Trainer Скачать можно перейдя по ссылке: http://narod.ru/disk...rainer.zip.html
  12. Тут сложного ничего нету, заходишь в cheat engune, выбиваешь процесс, выбираешь поиск неизвесого значения, и отсеиваешь после "Точная на доступ" отсеиваеишь ещё раз, выбираешь инструкцию, зоходишь в ассембер, вставление секций "Активировать" и "Деактвировать" здоровье там float значение, так что из оригинального года берём интсруцию и примермно так получиться [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) 00626B9E: jmp newmem nop returnhere: newmem: //this is allocated memory, you have read,write,execute access //place your code here mov [ecx+00000540],(float)999 originalcode: fld dword ptr [ecx+00000540] exit: jmp returnhere [DISABLE] //code from here till the end of the code will be used to disable the cheat 00626B9E: fld dword ptr [ecx+00000540] //Alt: db D9 81 40 05 00 00 dealloc(newmem)
  13. Хочу выразить благодарсно Grom-Skynet'у за то что когда я был ещё новичком на форуме помогал объясть как правельно писать скрипты (В лс), и за его полезные статьи
  14. трейнер от aliast GTA VICE CITY и Metro 2033 тоже не скачиваются
  15. я рассказал в краце для тех кто вообще этого не знал
  16. В этом учебнике я собираюсь обрисовать основной API, необходимый для создания трейнера в Дельфи. Основы знания Дельфи предпочтительны, но Дельфи итак довольно прост в освоении. Концепция. Хорошо, вот что мы хотим от трейнера. Мы запускаем игру. После этого ALT+TAB в Windows. Мы запускаем трейнер, и жмем кнопку. Это действие запишет некие значения в некоторые адреса в игре. Так, например, если мы знаем адрес денег в памяти игры, мы сможем хакать деньги, используя этот трейнер. Вот что нам надо для этого: Название окна игры Запускаем игру, потом переходим в Windows по Alt+Tab. Ищем в панели задач нашу игру и записываем е_ точный заголовок. (К примеру, запустив Red Alert 2, в панели задач Вы увидите кнопку с ее названием - Red Alert 2. Это и есть заголовок главного окна программы. Кстати, Red Alert 2 взломать способом, описанным здесь, не удастся - это DMA игра. Читайте пару документов здесь, посвященных именно A.G.T. и борьбе с DMA) Адреса в памяти игры (в шестнадцатеричном виде) Используем программу, подобную GameHack или MTC (Magic Trainer Creator), мы можем найти любое значение в игре и соответствующий ему адрес в памяти. К примеру, адрес в шестнадцатеричном виде 41D090. Запишем и это тоже. Значение, которое мы хотим записать (в шестнадцатеричном виде): Так, у нас есть адрес в памяти. Что мы хотим в него записать? Скажем, я хочу 50 единиц золота. То есть первым делом мне надо перевести 50 в шестнадцатеричную форму, используя соответствующий конвертер (подойдет и Калькулятор из Стандартных программ Windows - не забудьте включить инженерное представление - прим.пер.) Конвертер скажет 32. Так что запишите и это значение также. Число байт, которое мы хотим писать В том значении, которое мы получили выше, мы должны знать также сколько байт это займет в памяти. К примеру, число 32 займет только 1 байт, но FF07 займет уже два байта. В общем случае, две цифры будут занимать один байт. Начнем кодить Мы собираемся использовать Win32 API чтобы записывать значения в память другого процесса. Вот те функции, которые мы будем использовать. По порядку: FindWindow GetWindowThreadProcessID OpenProcess ReadProcessMemory WriteProcessMemory CloseHandle (Прочтите описания этих функций в файле Win32.hlp (или MSDN - прим.пер.) для полного описания. ) Я буду показывать только основы, так что начинающие могут просто копировать код из этого документа и вставлять его в свой проект.) Итак, начало. Во-первых, мы объявляем наши переменные. Скопируйте и вставьте это в свой проект: Var WindowName : integer; ProcessId : integer; ThreadId : integer; buf : PChar; HandleWindow : Integer; written : cardinal; Теперь надо объявить следующие константы. Скопируйте и этот раздел. Эти константы устанавливаются в соответствии с тем, что вы записали выше. Const WindowTitle = 'prog test'; Address = $41D090; PokeValue = $32; NumberOfBytes = 1; Теперь, чтобы записать значения, вы должны получить хэндл памяти игры. Невозможно сделать это в одно действие, поэтому мы сделаем следующее. Получаем хэндл главного окна С этим хендлом мы получаем идентификатор процесса (process identifier - pID) С этим pID, мы получаем хэндл области памяти. С этим хэндлом мы можем начинать хакать. Во-первых, нам надо получить хэндл главного окна. Используем функцию FindWindow WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then begin MessageDlg('Игра должна быть запущена до трейнера. Запустите ее, потом трейнер', mtwarning,[mbOK],0); end; Заметим, что код проверяет, равен ли нулю хэндл этого окна. Если оно равно, это значит, что игра не запущена, так что мы предупреждаем пользователя и говорим ему о том, чтобы он запустил игру. Теперь нам нужен pID. Мы используем функцию GetWindowThreadProcessId. После этого мы получаем хэндл области памяти через OpenProcess. Скопируйте код, приведенный ниже. ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); Вот оно. Теперь нам надо использовать WriteProcessMemory чтобы писать что-то внутри этого хэндла. Как только мы это сделаем, мы закрываем хэндл. Так принято. Так безопасно. Скопируйте код, приведенный ниже: GetMem(buf,1); buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write); FreeMem(buf); CloseHandle(HandleWindow); Вот исходный код для всего трейнера. Для начинающих программистов, чтобы быстро сделать трейнер, требуется только поменять константы, объявленные в начале программы. Var WindowName : integer; ProcessId : integer; ThreadId : integer; buf : PChar; HandleWindow : Integer; write : cardinal; Const WindowTitle = 'prog test'; Address = $41D090; PokeValue = $32; NumberOfBytes = 1; ########################################################### # (Вставьте следующий код в обработчик OnClick кнопки )# ########################################################### begin WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then begin MessageDlg('Игра должна быть запущена до трейнера. Запустите ее, потом трейнер', mtwarning,[mbOK],0); end; ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write); FreeMem(buf); CloseHandle(HandleWindow); end;
  17. 24K

    DMA адрес

    В этом теме я расскажу подробнее об DMA адресе (Значит динамический) DMA адрес это плохо, потому что если вы например нашли адрес денег или жизней то,адрес при перезагрузки игры измениться и нужно будет искать по новой DMA адресом может быть любое значение жизни, деньги,таймер в миссиях т.д Для того чтобы адрес который вы нашли при перезагрузки игры не менялся нужно написать скрипт, но для начало нужно найти адрес Нахождение адреса: 1. Для начало нужно выбрать игру (любая) 2. Начинаем поиск, если в игре значение написано цифрами вам повезло будет легко найти адрес, а если полоской то придёться потрудиться а)"Адрес в стиле цифр" если адрес у вас в игре записан в цифрах будет лёгко, просто в поиске пишите число в игре, уменьшаете или прибавляете (Процесс отсеивания) после того как нашли адрес выводите его в главную панель, и значения этого адреса можно изменить на любое желаемое вам число и заморозить (При замораживании число которые у вас в игре не уменьшается) б)"Адрес в стиле полосы или на подобии этого" если адрес у вас в игре записал в полоске или на подобии этого то будет очень сложно (сложность в том что придёться много времени отсеивать),для того чтобы найти такой адрес надо выбрать "Поиск неизвестно значения", уменьшать и прибавлять (Процесс отсеивания) после того как осталось немного адресов а отсеивание не даёт результатом просто выводите все адрес на главную панель и каждый по очереди замораживаете и если число в игре не умешается то это ваш адрес. Если у вас Cheat Engine то написание скрипта будет легче, жмём правой кнопкой мышки по адресе и ннаходим там "Точка остановка на доступ" нажимаем её, и возвращаемся опять в игру и отсеиваем (уменьшаем или прибавляем) возвращаемся к Cheat engine и видим появились инструкции, нажимаете первую инструкцию и справа нажимаем "Отладчик", после этого появился отладчик, нажимаем вверху "Инструменты" и Автоассембел, теперь начинается самое интересное написание скрипта. в) Бывает и такое что когда в игре цифры и вы используте "Точное значение" поиска, адрес не находиться, но адрес можно найти тоже с помощью поиска "Неизвестного значения" Написание скрипта: Нажимате "Шаблон", "Вставление секций ENABLE и DISABLE",после этого "Внедрение кода" и вот вам придстоит написать скрипт, вы напишите его сами, на форeме можно найти много примеров написание скриптов на разный языках програмированния включая Cheat Engine Примеры скриптов: Здоровие (Float значение) [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here mov dword ptr [ecx+00000540],(float)999 originalcode: fld dword ptr [ecx+00000540] exit: jmp returnhere "gta_sa.exe"+226B9E: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "gta_sa.exe"+226B9E: fld dword ptr [ecx+00000540] //Alt: db D9 81 40 05 00 00 Деньги (обычный DMA адрес) [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here mov dword [esi+000000B8],#10000000 originalcode: mov eax,[esi+000000B8] exit: jmp returnhere "gta_sa.exe"+17059B: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "gta_sa.exe"+17059B: mov eax,[esi+000000B8] //Alt: db 8B 86 B8 00 00 00 Вот и все, желаю удачи будущим взломщикам
  18. Trainer Maker Kit, Cheat Engine 6.1, Magic Trainer Creator, C++, DetectiveStory
×
×
  • Создать...

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

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