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

Maxs

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

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

  • Посещение

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

    2

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

  1. Исходники с недостающими файлами из темы по программироваию трейнеров на Дельфи.

    Еще вроде здесь обновленные файлы.

    спасибо.

    А сигнатуры я правильно ищу? Мне кажется я что то забываю делать... какие то ?? ставить и т.п

  2. Всем привет... 

    Надеюсь многие помнят как я старался изучить принцеп работы с сигнатурами, что выходило у меня очень плохо...

    потом наступило лето... я как то забросил тему... но сейчас все таки я ЖАЖДУ ЗНАНИЙ... и прошу вас доучить меня...пожалуйста)

     

    И так, наш испытуемый... допустим GTA SA (она у многих тут есть)

    Возьмем базуку и найдем какая процедура отвечает за отнимание патрон(снарядов)...

    Опа, нашли ...  dec [esi+0C]

    Переходим в отладчик и ищем сигнатуру...

    Переходим на адрес процедуры, а именно 007428E6

    и видим байты ... ну сигнатуру вроде как... я так и не понял, правильно я делаю или нет...

     

    в оригинале сигнатура выглядит так

    FF 4E 0C 8B 46 08 85 C0 C7 46 04 01 00 00 00 0F

    Когда мы нопаем 

    90 90 90 8B 46 08 85 C0 C7 46 04 01 00 00 00 0F

     

    Значит надо заменить FF 4E 0C 8B  на 90 90 90 8B ....

     

    http://radikal.ru/fp/4c89087b6f254812bfaf292de99975ce   (картинка - скриншот)

     

    Юзаю поиск по форуму и нахожу код на делфи...

    unit Unit1;interfaceuses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,  MemoryProtect ,  Metrik , Process , MemoryUse, StdCtrls;type  TForm1 = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);    procedure FormCreate(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var    Form1: TForm1;  prID: Cardinal;  Process : TProcess;  MemProtected : TMemProtected;  //Процедура записи байт в процесс игрыprocedure WriteSignatyre(GameID: Cardinal; PokeAddr: Integer; PokeVal: array of Byte);var  pHandle:LongInt;  numwritten:SIZE_T;//Если не будет ошибка заменить SIZE_T на Cardinalbegin  pHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,GameID);  WriteProcessMemory(pHandle,ptr(PokeAddr),@PokeVal,SizeOf(PokeVal),numwritten);  CloseHandle(pHandle);end;//Процедура получения ID зная название процессаfunction  GetProcess(FileName: string): Cardinal;  var	hSnap:THandle;	prEntry:PROCESSENTRY32;  begin	Result:=0;	hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);	prEntry.dwSize:=SizeOf(prEntry);	If Process32First(hSnap,prEntry) then	begin		  While Process32Next(hSnap,prEntry) do		  Begin			If prEntry.szExeFile = FileName then				 Result:=Cardinal(prEntry.th32ProcessID);		  End;	end;	CloseHandle(hSnap);  end;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);const  ProcessName='gta_sa.exe';//Процесс Игры  Adress = $007428E6 ;		 //Адрес по которому будет производиться запись сигнатуры байт  SignatyreOn: array[0..3] of Byte = ($FF,$4E,$0C,$8B);//Байты для записи в процесс игры  SignatyreOFF: array[0..3] of Byte = ($90,$90,$90,$8B);//Байты для записи в процесс игрыbeginMemProtected := TMemProtected.Create(Process,Adress,Length(SignatyreOn));prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаMemProtected.UnProtectPage;WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в памятьMemProtected.UnProtectPage;MemProtected.Destroy;sleep(500);End;procedure TForm1.Button4Click(Sender: TObject);beginend;// Указываем процесс игры при старте нашего приложенияprocedure TForm1.FormCreate(Sender: TObject);begin     Process:=TProcess.Create('gta_sa.exe');end;end. 

     Компиляция не удалась... компилятор не знает  MemoryProtect ,  Metrik , Process , MemoryUse, StdCtrls ибо, я так понял это доп. библиотеки(поиск гугл не помог их найти для скачивания).

     

     

    ПОЖАЛУЙСТА, РАССКАЖИТЕ ГДЕ Я ОШИБСЯ И ИСПРАВЬТЕ МЕНЯ  

  3. Добрый день, форумчани :) Я вернулся...

    Я нашел интересную статью ... создание библиотеки - чита для GTA VC

    Вот код:

     library MoneyAdds;{ GTA-VC 1.1 Плагин для добовления денег }uses Windows;type // определяем свой тип (указатель целых чисел)     P_Integer = ^Integer;var     GTA_VC_Handle : THandle;     CurrentMoney : Integer;     keyUp : boolean;const // тут твой найденный адрес «денег»     Address_Money = $0094ADD0;{$E .asi}//—- Эта процедура будет вызываться таймером —procedure Timer_begin;begin     // Нажатие и отпуск «M»     if not GetKeyState($4D) < 0 then keyUp := true;     if (GetKeyState($4D) < 0) and (keyUp = true) then     begin         // Читаем деньги из GTA-VC и присваиваем в CurrentMoney         CurrentMoney := P_Integer(Address_Money)^;         // Записываем 1000 + текущие деньги         P_Integer(Address_Money)^ := CurrentMoney + 1000;         keyUp := false;     endend;//———————————————————–begin     GTA_VC_Handle := FindWindow(nil,’GTA: Vice City’);     if GTA_VC_Handle <> 0 then     begin         SetTimer(GTA_VC_Handle,0,25,@Timer_begin);     end;end. 

    Ссылка на статью - перейти

     

    Ссобственно код работает, но есть вопросы:

    1. Как быть если адрес DMA (пример), теоритически можно работать с оффсетами или сигнатурой, но теоретически я затрудняюсь это реализовать.

    2. Есть какой нибудь  небольшой хук Direct9 под Delphi?

     

     

  4. /*---------------------------------------------------------------------------*/

     

    Если инструкций много - то проверять, что они корректно работают, подбирать

    нужную. Долго, муторно, но что поделаешь. Второй вариант - указатели. А что за

    "старая система с оффсетами"?

     

    /*---------------------------------------------------------------------------*/

    ну старая система и есть указатели...

  5. Создавать  новую тему не хочу, но появилась проблема, оказалось, что адреса не ДМА(хотя они были зеленые)... получается нужно использовать AOBscan... но для этого нужно найти нужную инструкцию... но при ... "отладки" выдается over9000 процессов(инструкций). Как быть?

    fb0fda5d4122.png

     

    Неужели надо использовать старую систему с оффсетами? :/

  6. Здравствуйте, однафорумчани. Давно не виделись, но думаю это не так важно... :)

    У меня след. проблема:

    Поискав статьи по созданию трейниров(для не-DMA игр, такие как серия GTA), удалось собрать код который меняет значение переменной на тип integer 4 байта...

    Короче... Если допустим у нас адрес $0001 имеет тип float = 100.05, то мой код может его менять на целые числа типо 100 или 101.

    Как сделать чтобы изменение было на дробное значение?

    Вот мой код:


    var
    Form1: TForm1;
    WindowName : integer;
    ProcessId : integer;
    ThreadId : integer;
    buf : PChar;
    HandleWindow : Integer;
    write : cardinal;
    Const WindowTitle = 'GTA:SA';
    Address = $11AEC484;
    PokeValue = $32;
    NumberOfBytes = 4;
    implementation
    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    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;
    end.

    ///write : cardinal; только в делфи7 работает

  7. Тот совет был для игр от Вальв. Потому и не помог. Как писали выше, нужен другой, патченный x-live.

    Можно где этот код юзануть?


    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    label(xlivekiller)
    registersymbol(xlivekiller)
    aobscan(aobxlive,74 14 FF 75 14 8B CE FF 75 10 53 E8 * * * * 8B F8 85 FF)
    aobxlive:
    xlivekiller:
    db EB 14
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    dealloc(newmem)
    xlivekiller:
    db 74 14
    unregistersymbol(xlivekiller)

  8. ....да....по моему это то что нужно ......пойду курить код.....

    Спасибо за помощь !

    не можешь понять работу функции? лол.

    Чувак, прости, но чтобы писать трейнера на делфи нужно знать хотябы основы, а не "курить" их.

  9. Нет?

    http://forum.gamehacklab.ru/forum/4-вопросы-по-созданиюпрограммированию-трейнеро

    Вопрос такой:

    В Cheat Engine есть такая фишка, при добавлении нового адреса в таблицу (при запущеной игре), допустим: " igra.exe " , в таблице получаем вместо " igra.exe " адрес. ( и на разных Windows этот адрес разный).

    Так вот..... как получить этот адрес по имени процесса средствами Дельфи..

    вобщем нужна помощь в реализации примерно такой функции:

    function igra.exe: dword; => где мы получаем этот адрес (думается мне что этот адрес указывает на начало процесса в общей памяти,,,,

    возможно я и не прав)

    ... либо хотя бы подскажите куда курить ( только желательно не из далека ... так сказать поближе в нужное русло) .

    ладно, помогу чем смогу :-D я сегодня добрый


    Uses tlhelp32

    ...

    var
    hSnap:THandle;
    pe:TProcessEntry32;
    pid: DWORD;
    begin
    pe.dwSize:=SizeOf(pe);
    hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    If Process32First(hSnap,pe) then
    While Process32Next(hSnap,pe) do
    if ExtractFileName(pe.szExeFile)='mRemote.exe' then
    showmessage(IntToStr(pe.th32ProcessID));

    Адрес процесса называется PID в простонародье... 8-)

  10. Добрый день. Вот, от меня типичный вопрос с подковыркой. :-D

    Недавно купил по акции в стиме ГТА 4 с эпизодами. Решил заново пере проходить(может в мультик сыграть), но не суть.

    Хотел на ИЗИ взломать себе бабок ... но не тут то было. O-= На адресе стоит какой-то античит который возвращает старое значение назад, а при чтение доступа к адресу игра вылетает через 3 секунды.

    Как быть? Чем лечить, чтобы без последствий?

    Нашел какую-то тему по кряку Xlive...

    http://www.szemelyesintegracio.hu/cheats/41-game-hacking-articles/243-xlive

    Но боюсь при юзинге бан получить...

  11. В некоторых играх сигнатура может изменяться, т.е. байты в сигнатуре поэтому прописываются знаки вопроса

    Если сигнатура изменилась то и байты естественно будут другими, для этого и прописывают знаки вопроса чтобы сигнатура была рабочей всегда

    А все таки как записывать такую структуру с вопросиками в делфи?

  12. Спасибо большое за видео(плюсик кинуть не могу - пишет лимит)...

    Но, реально большое спасибо, теперь хоть как нибудь смогу разобраться!

    Единственное, я не понял зачем ставить ?? вместо байт? Кто расскажет суть?

    Когда я буду писать массив в паскале, мне что писать примеру массив байт {5a, 3a, ??, ??, 2d} заменить на {3a, 5a, ??, ??, 2d }?

  13. Раньше, как правило, инструкции располагались прямо в исполняемом модуле, и никогда не меняли своего адреса. Тогда можно было использовать смещение от базового адреса модуля до инструкции. Далее, еще оффсеты применялись при использовании указателей. Сейчас же зачастую проще выйти на инструкцию, чем реверсить до статичного указателя. Впрочем, бывают случаи, когда проще найти цепочку указателей, чем анализировать километровую структуру на наличие ID игрока. Все зависит от каждой конкретной игры, на самом деле. И, как правило, выбор методики целиком зависит от ломаемой игры и затрат времени на тот или иной способ.

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

    Также могут быть случаи, когда обычная заморозка адреса, найденного по указателю может не помочь - к примеру, при падении с большой высоты наносится сразу огромный урон, заведомо превышающий максимальный запас жизни. В этом случае заморозка по указателю может не успеть сработать, и герой умрет. Такого не случится при взломе с помощью переписывания кода инструкций - ведь мы меняем сам код игры, и она сама "услужливо" делает нас бессмертными и так далее.

    В общем, в долгих поисках... я ничего так и не нашел, даже и не понял...

    Делал так:

    1. Открыл GTA:SA

    2. Открыл CE 6.3

    3. Нашел адрес денег (gta_sa.exe+77CE50) похоже он DMA(так как зеленый).

    П.С. Может нельзя найты байты в неDMA играх? Или как? Если в гта так нельзя, приведите другой пример.

    4. Изменил количество денег, адрес оказался рабочий...

    Теперь самое главное!!! Где найти байты и от какого адреса их читать? Если я правильно понял...

    5. Я жму на адрес и прошу открыть регион памяти... но там так все страшно...

    a69b1e7d2813.png

  14. post-3-0-58154600-1402504542_thumb.jpg

    ...

    Вопрос глупый... но сталкивался я часто... как вы находите координаты игрока?

    Допустим автор темы нашел координату X... Как?

    Как он нашел где 0? Где он нашел, что если идти в право X прибавляется, а не уменьшается?

  15. Версию указывать нужно под какую скрипты пишешь.

    Разве версия меняет инструкцию? ...

    Версия меняет количество переменных, их адрес и т.п... в БОЛЬШЕНСТВЕ СЛУЧАЕВ инструкция остается прежней.

    ИМХО конечно, но как по мне это факт.

  16. Привет ребята!

    Вот видео про NoRecoil:

    Вот видео про RapidFiire:

    1) https://www.youtube....h?v=G6XKyHM9Mwk

    2)

    Надеюсь что как-то помог :-D

    У каждой игры разное строение, в мафии такую штуку сделать было легко, здесь же другое, тут игра постоянно обращается к библиотекам. O-=

  17. Нашел время глянуть видео, а там - бесконечные патроны :(

    Ждемс :)

    С отдачей проблемы, не могу найти нужную инструкцию. Зато нашел как сделать RapidFire, как бы нопаем инструкцию которая отвечает за время между выстрелами.

    P.S. Хз как быть с пистолетом, там надо как то изменять процедуру которая смотрит нажата ли ПКМ...

  18. Да не за что. И, кстати, dec - это не удаление чего-либо откуда-либо, а decrease - уменьшение. И да, бесконечные патроны - это Infinite Ammo (если общее количество) или No Reload (если в магазине, то есть без перезарядки). No Recoil - это без отдачи )

    Тупанул. Ладно сегодня-завтра сделаю с отдачей что нибудь.

  19. Это, на самом деле, весьма просто:

    1. Находишь адрес нужного параметра (жизни, здоровье, патроны и тп) обычным поиском

    2. Ставишь бряк на этот адрес (правой кнопкой в таблице СЕ - find out what accesses to this address)

    3. Выделяешь найденную инструкцию в списке и нажимаешь Show Disassembler.

    4. В появившемся окне отладчика будет выделена ассемблерная инструкция, а слева от нее будут байты, которые ей соответствуют. Это они и есть.

    Если это так просто... почему раньше пользовались оффсетами?

  20. Все-таки наверное надо посмотреть какой-нибудь урок по взлому No Recoil, и ему подобным... Чувствую, что чего-то не понимаю :)

    Вот специально для тебя снял как создать скрипт No Recoil

    Находил dec - это процедура удаления чего-то из откуда то. :-D

    P.S. Потом про отдачу запилю.

    • Плюс 1
  21. Сигнатура это и есть байты , а точнее цепочка байт по которым программу ищет совпадения в процессе !

    Взялись у меня с головы ))

    можешь как хочешь назвать ))

    fire32222.png а теперь подробней : fire32222.png

    Next.pngProcessName - название процесса

    Next.pngAdress -а адрес по которому будет происходить запись

    Next.pngSignatyreOn - назвал так потому что отвечает за активацию левых байт (т.д 90 90 90 90 и так далие)

    Next.pngSignatyreOFF - назвал так потому что отвечает за де активацию (восстановление первоначальных байт )

    Next.pngarray[0..3] of Byte - 0..3 длинна наших байт ($83,$47,$24,$01) или можно сделать так array[1..4]

    Next.png$83,$47,$24,$01 - наши байты которые будет записывать по адресу

    думаю все понятно показал и написал ))

    http://forum.gamehac...81%D1%81%D0%B5/

    вот смотри тута )) правда код не мой !! ну в теме есть мои модификации

    Я наверное даун... :-D

    Я не могу понять как работать/находить эти байты... я никак не могу выбросить из головы офсеты..

    Если тебе не очень трудно, покажи на примере каком нибудь поиск... :unsure:

×
×
  • Создать...

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

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