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

DenkA003

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

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

  • Посещение

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

    29

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

  1. вот тема http://forum.gamehacklab.ru/topic/2602-%D0%BF%D0%B8%D1%88%D0%B5%D0%BC-%D1%81%D0%B2%D0%BE%D0%B9-dll-%D0%B8%D0%BD%D0%B6%D0%B5%D0%BA%D1%82%D0%BE%D1%80-delphi-xe2/
  2. дак что тебе мешает прописать путь к длл :? Я писал инжектор на Delphi 7 )) скачай лайт версию )) ну или найди другой способ инжекта ))) Подумай логично )) я исправил свой инжектор )) там нужно было изменить 1 строчку )) и весь код заработал !!! если не сможешь скину исходник !!
  3. блин ты хоть поисковиком пользовался ? по форому лазил ? вот парочка тем помогут тебе )) ++ там есть исходники!! http://goo.gl/U6ySjh http://goo.gl/WpOzhm http://goo.gl/yYXoqg http://goo.gl/D9turc http://goo.gl/IKl4lT В следующий раз пользуйся поисковиком ))
  4. оО чувак .. я тебе дал пример в самом первом посте этой темы .... вот и коверяй его .... )) сложно добавить таймер и запилить вместо sp.IDProcess = Edit1.Text sp.IDProcess = 'Game.exe' и задать итервал таймера 300 милисекунд ?
  5. Не советую ставить при OnCreate лучше сделай при FormShow кароче косяки с этими ресурсами )) Переименуй Cheats.dll в Cheats.exe и сделай ExtractRes('EXEFILE','DLL','C:\Cheats.dll'); при выходе из нашей программе наша Cheats.exe переименовуеться в Cheats.dll P.S - если хочешь чтобы длл извлекалась в папку с программой просто пропиши ('Cheats.dll') думаю помог ))) если не получиться кину пример )))
  6. Старина тут все просто смотри : Для начала нужно создать файл с расширением .rc , с таким содержанием: Trainer EXEFILE Trainer_1.exe Trainer - имя этого файла, может быть любым (может не совпадать с настоящим именем файла). EXEFILE (BITMAP, CURSOR, ICON, WAVE) - тип файла Trainer_1.exe - сам файл, т.е. путь к нему. Далее компилим этот файл с помощью brcc32.exe (находиться в папке bin дельфи). Скомпилированный файл (с расширением .res) копируем в папку нашей программы, после открываем дельфи, и после {$R *.dfm} пишем {$R Имя_файла.res} Теперь, чтобы распаковать куда-то наш файл используем следующую функцию: procedure ExtractRes(ResType, ResName, ResNewName : String); var Res: TResourceStream; begin Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName); Res.Free; end; //использовать так: ExtractRes('EXEFILE', 'Trainer', ('путь,_куда_распаковывать')); Все )) Кстати в Delphi XE2 есть специальный менеджер которой упрощает первое действие .. просто нужно добавить процедуру и все ))
  7. Жди через неделю появиться норм интернет .. тогда и подкину примерчик )) может до того времини сам уже додумаешься ))) Использую. Delphi XE2++ там можно пихать в программу всякие файлики и вытаскивать их .. ну или считывать ...
  8. в смысле ? есть архив его нужно скачать и распаковать .... распакованный файл заинжектить в игру - программу ?
  9. м я так понял язык С# ? сорь если бы писал на Delphi помог , а так извеняй ))
  10. да не много на C# мозго** со сканером )) Ну и на delphi тоже самое )) только с одним отличием не нужно вводить маску )) Тупо байты - начало = конец сканирования и усе ))
  11. ++ спс__)) Хотел добавить зачем обновлять переменную ведь у чекбокса есть свойство и так - false = True оно равно свойству CheckBox.Checked = True(False) просто сделай так if CheckBox1.Checked = True bla bla bla else bla bla bla end; на много проще ))
  12. Дак понятное дело .. что не будет назад менять ... допустим ты изменел вот такую сигнатуру 1)90 90 90 90 90 90 изменил ее на 2)80 90 90 90 90 90 принцип твоего трейнера в том чтобы найти 1 сигнатуру и заменить первый байт на 80 ... ну когда ты деактивируешь функцию происходить снова сканирование по первой цепочке байт ... ну увы сигнатура уже изменилась ... по этому ты и не можешь записать байты при деактивации функции Вот должно работать private void checkBox1_CheckedChanged(object sender, EventArgs e) { SigScan _sigScan = new SigScan(seap, new IntPtr(0x401000), 0x10bc000); if (func1 == false)//если переменная [BYTE] равна 0(true - 1, false - 0) { byte[] buffer2 = new byte[] { 0x75, 0x05, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); byte[] buffer = new byte[] { 0x90, 0x90 };//байт, который записывается,если переменная [BYTE] равна 0, то есть выключена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = true; func1 = true; } else//Иначе { byte[] buffer2 = new byte[] { 0x90, 0x90, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); byte[] buffer = new byte[] { 0x75, 0x05 };//байт, который записывается, если переменная [BYTE] равна 1, то есть включена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = false; func1 = false; }
  13. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,TlHelp32, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; GroupBox1: TGroupBox; Button1: TButton; Button2: TButton; GroupBox2: TGroupBox; CheckBox1: TCheckBox; GroupBox3: TGroupBox; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; prID: Cardinal; implementation {$R *.dfm} //Процедура записи байт в процесс игры procedure WriteSignatyre(GameID: Cardinal; PokeAddr: Integer; PokeVal: array of Byte); var pHandle:LongInt; numwritten:SIZE_T;//Если будет ошибка заменить SIZE_T на Cardinal begin 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; //Нажатие на кнопку procedure TForm1.Button1Click(Sender: TObject); const ProcessName='PlantsVsZombies.exe';//Процесс Игры Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры begin prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память End; procedure TForm1.Button2Click(Sender: TObject); const ProcessName='PlantsVsZombies.exe';//Процесс Игры Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры begin prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память End; procedure TForm1.Button3Click(Sender: TObject); const ProcessName='PlantsVsZombies.exe';//Процесс Игры Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры begin prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса if prID = 0 then begin Application.MessageBox('Процесс не найден', 'Предупреждение', MB_OK + MB_ICONINFORMATION); end else begin Application.MessageBox('Активировано', 'Предупреждение', MB_OK + MB_ICONINFORMATION); WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память End; end; procedure TForm1.Button4Click(Sender: TObject); const ProcessName='PlantsVsZombies.exe';//Процесс Игры Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры begin prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса if prID = 0 then begin Application.MessageBox('Процесс не найден', 'Предупреждение', MB_OK + MB_ICONINFORMATION); end else begin Application.MessageBox('Деактивировано', 'Предупреждение', MB_OK + MB_ICONINFORMATION); WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память End; end; //Пример записи в процесс на чекбоксе procedure TForm1.CheckBox1Click(Sender: TObject); const ProcessName='PlantsVsZombies.exe';//Процесс Игры Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры begin if CheckBox1.Checked = True then begin prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память CheckBox1.Caption := 'Деактивировать'; end else begin prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память CheckBox1.Caption := 'Активировать'; end;end; end.
  14. ++ тоже испугался )) думал все пзд )) а потом вспомнил что 1 апреля ))
  15. Ищи "Все > Неизвестное Значение" и смотри если таймер уменьшается делай "отсев>" "Уменьшилось" если увеличилось то "<Увеличилось"
  16. мм не совсем понял .. что тебе мешает сделать так mov [edx+000000A8],#64{100} и восстановить нормальную инструкцию mov [edx+000000A8],eax или поиграйся с регистрами eax,ebx,ecx и тд
×
×
  • Создать...

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

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