FarmHitman Опубликовано 12 марта, 2012 Поделиться Опубликовано 12 марта, 2012 Ага, с правами админа заработала, только не много в другую сторону Надо код проверять... Ладно, спасибо за помощь, дальше придется с кодом мучаться... Ссылка на комментарий Поделиться на другие сайты Поделиться
24K Опубликовано 31 марта, 2012 Автор Поделиться Опубликовано 31 марта, 2012 Итак, в данном учебнике я попробую обьяснить и рассказать, как в Delphi пишутся трейнеры. Вы наверное сразу же подумаете, что писать трейнеры на Delphi убого,т.к. одна пустая форма в скомпилированном состоянии весит аж 300 Кб. Но я постараюсь разрушить этот миф. Писать наш трейнер мы будем без VCL. Но как же так, скажете вы? - Наш будуший трейнер будет написан на чистом WinAPI.Приведу в свою защиту несколько фактов:При написании программ на чистом WinAPI,скомпиленный *.exe будет весить ~15 кб (какие перспективы открываются перед нами).Наше приложение будет работать в несколько раз быстрее.Один, но существенный минус - нам придётся описывать всё вручную. Но мы с вами живём в век высоких технологий (хе-хе). В решении нашей задачи нам поможет программа под названием APIx. При помощи данной программы мы сможем спроектировать своё приложение как и в Delphi, но на чистом WinAPI.Как говорится, "меньше слов, ближе к делу".КодингЯ постараюсь как можно подробнее описать весь код нашего будущего трейнера. Поехали !//Немного оптимизации{$R-} {проверка диапазона}{$S-} {проверка стека}{$A+} {"выравнивание слов"}program FlatOut;useswindows, messages, commctrl; //Используемые модули,только самое нужное!varWinClass : TWndClass; //переменная класса TWndClass для создания главного окнаhInst : HWND; //Хендл приложенияHandle : HWND; //локальный хендлCom1 : HWND; //TGroupBoxCom2 : HWND; //TButtonCom3 : HWND; //TButtonCom4 : HWND; //TStaticTextCom5 : HWND; //TStaticTextCom6 : HWND; //TStaticTextMsg : TMSG; //сообщенияhFont : HWND; //хендл шрифтаwin : hwnd; //хендл данного окнаvarWindowName : integer; //имя окнаProcessId : integer; //ID процессаThreadId : integer; //Потокbuf : PChar;HandleWindow : Integer; //хендл окна игрыwrite : cardinal;const //id наших контроловid_1 = 1; //TGroupBoxid_2 = 2; //TButtonid_3 = 3; //TButtonid_4 = 4; //TStaticTextid_5 = 5; //TStaticTextid_6 = 6; //TStaticTextconstWindowTitle = 'Flat-Out'; //конец формы, начало формы, точный заголовок игрыAddress = $01B40C64; //адрес нашего значения в памяти игрыPokeValue = $FFFFFFFF; //значение на которое мы будем менятьNumberOfBytes = 4; //кол-во байт{$R XPMan.res} //Здесь у меня лежит иконка моего трейнера и манифес,//это для того что бы все контролы были в стиле XPprocedure Cheating; //Собственно сама процедура изменения значенияbeginWindowName := 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; //процедура выхода из программыbeginDeleteObject(hFont); //удаляем шрифтUnRegisterClass('Sample Class', hInst); //удаляем окноExitProcess(hInst); //закрываем окноHalt; //на всякий случай end;procedure About; //наше окно о программеbeginMessageBox(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; //обработчик сообщенийbeginResult := DefWindowProc(hwnd, msg, wparam, lparam);case Msg ofWM_COMMAND:case LoWord(wParam) ofid_2 :if HiWord(wParam) = bn_Clicked thenAbout; //если пользователь нажимает на кнопку "About",получат свой Aboutid_3 :if HiWord(wParam) = bn_Clicked thenShutDown; //если выход то......end;WM_DESTROY:ShutDown;end;end;beginhInst := GetModuleHandle(nil);with WinClass dobeginStyle := 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 orWS_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)) dobeginTranslateMessage(Msg); //приём сообщенийif (GetAsyncKeyState(vk_f1 ) <> 0) then Cheating; //если нажата клавиша F1,читим игруif (GetAsyncKeyState(vk_RButton) <> 0) then About; //если нажата правая кнопка мыши,то показываем Aboutif (GetAsyncKeyState(vk_Escape ) <> 0) then ShutDown;DispatchMessage(Msg); //удаление сообщений из очередиend;end.Как вы видите писать трейнеры в Delphi на чистом WinAPI не так уж и сложно. У меня размер EXE файла получился ~19 кб (Попробуйте меньше). В следующей статье я раскажу вам второй способ написания трейнера на WinAPI Ссылка на комментарий Поделиться на другие сайты Поделиться
24K Опубликовано 31 марта, 2012 Автор Поделиться Опубликовано 31 марта, 2012 Вашему вниманию предоставляется вторая часть учебника о написании небольших трейнеров на Delphi c использованием WinAPI.Данная статья поможет тем,кто по каким-то причинам не разобрался или не понял,как пишутся маленькие по размеру трейнера из предыдущей части данного учебника.На сей раз мы будем писать наш трейнер на WinAPI с использованием ресурсов.Данный способ намного проше,чем первый,а так же я приведу пример как блокировать программы,которые шпионят за нашим трейнером.Опять-таки приведу аргументы в пользу данного метода написания трейнеров:" Писать нам наш трейнер будет легче,так как работаем мы с ресурсами.Для этого нам нужен хороший редактор ресурсов (Restorator или ResHaker),я предпочитаю 2-ой. " По идеи данный способ позволит нам скостить ~ 1-1,5 кб.В крайности я вдаваться не буду,так что приступим.КодингДля начала нам придётся создать в блокноте файл trainer.rc,который будет содержать следующие строки:======================trainer.rc============================100 DIALOG 0, 0, 173, 69STYLE DS_SETFONT | DS_CENTER | WS_CAPTION | WS_SYSMENUCAPTION "[FlatOut] Trainer +1"FONT 8, "Terminal"{PUSHBUTTON "About", 102, 2, 52, 36, 15, BS_FLATPUSHBUTTON "Close", 101, 132, 52, 38, 15, BS_FLATGROUPBOX "Trainer options: ", -1, 1, -1, 172, 51LTEXT "[C0DED] <--::--> bY g-l-u-k [TeaM - X]", -1, 7, 36, 164, 12, WS_DISABLEDLTEXT "[F1] :.......: More Money", -1, 7, 9, 126, 12, WS_DISABLED}======================trainer.rc============================После создания этого файла перетащите его на brcc32.exe,который лежит в папке "Program Files\Borland\Delphi7\Lib".После этого получам trainer.res,который подлинкуем к нашему трейнеру.program FlatOut; //Опять будем ломать FlatOutuseswindows, messages; //Именно по этому наш трейнер должен весить//меньше,если помните то в прошлой части учебника мы использовали //ещё и commctrl.constID_ABOUT = 102; //Номера контролов нашего ресурсаID_EXIT = 101;Elapse = 10; //Нужен для таймераaboutcap = 'About'; //Наш About Dialogaboutmsg = ' [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;//Кол-во байтvarMsg : TMSG;Win : HWND;WindowName : Integer;ProcessId : Integer;ThreadId : Integer;hInst : Dword;Buf : PChar;HandleWindow : Integer;Write : Cardinal;{$R trainer.res} //Наш ресурс в котором хранится окно трейнера//Вот самая интересная часть нашего трейнера,процедура роверки.//Если TrainerSPY активен,то мы обломим следящего за нашим //трейнером.function IsTrainerSpyActive:bool;varhProcess,hKernel:dword;addr:pointer;b:byte;dummy:cardinal;proc:pchar;beginresult:=false;proc:='WriteProcessMemory';if FindWindowExA(0,0,nil,'Trainer Spy')<>0 thenbeginresult:=true;exit;end;hProcess:=GetCurrentProcess;hKernel:=LoadLibrary('kernel32.dll');if hKernel<>0 thenbeginaddr:=GetProcAddress(hKernel,proc);ReadProcessMemory(hProcess,addr,@b,1,dummy);FreeLibrary(hKernel);if b=204 then result:=true;end;end;//Процедура взлома игры,описывать полностью не буду,опишу только //самое главное.procedure Cheating;beginif IsTrainerSpyActive then //если TrainerSpy запушен, то вырубаемсяbeginMessageBox(0,'Выруби шпион.','Ошибка зашиты',MB_OK or MB_ICONERROR);exit;end;WindowName := FindWindow(nil,WindowTitle);If WindowName = 0 thenbeginMessageBox(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; //процедура выхода из программыbeginEndDialog(win,0);Halt;end;[/code[code]procedure DoTimer; //Дополнительна зашита от шпионовbeginCreateFileA('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;begincase Msg ofwm_InitDialog : beginend;wm_Close : DestroyWindow(Win);wm_Destroy : PostQuitMessage(0);end;Result := 0;case Msg ofWM_COMMAND : beginif wParam = ID_EXIT then Quit; //Ели нажата кнопка выхода,выходимif wParam = ID_ABOUT then MessageBox(Win,aboutmsg,aboutcap,MB_OK or MB_ICONINFORMATION);//А это наш //aboutend;end;end;//Процедура создания главного окнаProcedure RunSettings;beginWin := CreateDialog(hInstance,PCHar(100),0,@SettingsDlgProc);Showwindow(Win,SW_SHOW);Updatewindow(Win);end;beginRunSettings;while GetMessage(Msg,0,0,0) dobegin//Цикл сбора сообщенийTranslateMessage(Msg);if (GetAsyncKeyState(VK_F1) <> 0) then Cheating;//Горячая клавишаDispatchMessage(Msg);end;end.В заключении данного учебника я ещё раз повторюсь, что писать трейнера на Delphi не только можно но и нужно. У меня трейнер получился ~19 кб. После сжатия FSG 2.0 вышло ~11 кб, ну это уже по божески. От себя я добавлю следующее, "Delphi самый простой в изучении язык программирования. "Надеюсь, что данным учебником я сумел опровергнуть следующее мнение, что "Delphi - это мусорогенеротор". Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 31 марта, 2012 Поделиться Опубликовано 31 марта, 2012 И да, ссылку на учебник, то есть откуда было взято надо прикладывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 31 марта, 2012 Поделиться Опубликовано 31 марта, 2012 [Тык]. Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 31 марта, 2012 Поделиться Опубликовано 31 марта, 2012 Ага, значит Глюк и статья у меня под носом!)))Такс, товарисч пользователь-=CaliberWerkz=-, в будущем обязательно добавлять автора, откуда взято и тп. Иначе буду расценивать как грабеж и наказывать соответствующие. Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 31 марта, 2012 Поделиться Опубликовано 31 марта, 2012 Не хочется забрать хлеб у Админов, но все таки. Статью пишем не в том месте. Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 31 марта, 2012 Поделиться Опубликовано 31 марта, 2012 Да, мое упущение. Исправлю в скором времени, а пока темка полежит тут) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 31 марта, 2012 Поделиться Опубликовано 31 марта, 2012 Тему перемещаю по трейнерам. Этот раздел не для исходников по трейнерам. Ссылка на комментарий Поделиться на другие сайты Поделиться
∟DarkPan Опубликовано 25 сентября, 2013 Поделиться Опубликовано 25 сентября, 2013 А сканер сигнатур на делфи? Ссылка на комментарий Поделиться на другие сайты Поделиться
afro228offical Опубликовано 3 августа, 2015 Поделиться Опубликовано 3 августа, 2015 А сканер сигнатур на делфи?Это уже совсем другая история... Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 августа, 2015 Поделиться Опубликовано 3 августа, 2015 [terminus]Теме - два года, некропостить - плохо. Закрываю.[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения