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

DenkA003

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

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

  • Посещение

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

    29

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

  1. Спасибо! получилось.

    Добавил в ресурсы длл с типом RT_RCDATA и прописал строку распаковки ExtractRes('RT_RCDATA','DLL','C:\Cheats.dll');

    Все распаковалось без ошибок. Теперь вот только как сделать инжект длл в нужный процесс? :-[

    оО чувак .. я тебе дал пример в самом первом посте этой темы .... вот и коверяй его .... )) сложно добавить таймер и запилить вместо sp.IDProcess = Edit1.Text sp.IDProcess = 'Game.exe'

    и задать итервал таймера 300 милисекунд ?

  2. Тоже самое "Resource DLL not found". Может я что то забыл сделать? Делал так

    • Закинул в ресурсы DLL

    385be9aa52e1.png

    • В код добавил строки


    procedure ExtractRes(ResType, ResName, ResNewName : String);
    var
    Res: TResourceStream;
    begin
    Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
    Res.SavetoFile(ResNewName);
    Res.Free;
    end;

    • При старте формы (TForm1.FormCreate) написал


    ExtractRes('RCDATA','DLL','C:\Cheats.dll');

    Не советую ставить при OnCreate лучше сделай при FormShow

    кароче косяки с этими ресурсами ))

    Переименуй Cheats.dll в Cheats.exe

    и сделай

    ExtractRes('EXEFILE','DLL','C:\Cheats.dll');

    при выходе из нашей программе наша Cheats.exe переименовуеться в Cheats.dll

    P.S - если хочешь чтобы длл извлекалась в папку с программой просто пропиши ('Cheats.dll')

    думаю помог ))) если не получиться кину пример )))

  3. Неделю? :closeyes: Сам не додумаюсь, знаю как но не получается.

    Старина тут все просто смотри :


    Для начала нужно создать файл с расширением .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 есть специальный менеджер которой упрощает первое действие .. просто нужно добавить процедуру и все ))

  4. Я то сюда и обращаюсь что знаю что тут лучше объяснят и примерчик подкинут :-D чем на мдсн :-[

    Жди через неделю появиться норм интернет .. тогда и подкину примерчик )) может до того времини сам уже додумаешься )))

    Использую. Delphi XE2++ там можно пихать в программу всякие файлики и вытаскивать их .. ну или считывать ...

  5. Работает, но немного с другой маской, т.к НОП равен одному байту.

    Ни в коем случае, искренняя благодарность ;)

    да не много на C# мозго** со сканером )) Ну и на delphi тоже самое )) только с одним отличием не нужно вводить маску )) Тупо байты - начало = конец сканирования и усе ))

  6. Работает, но немного с другой маской, т.к НОП равен одному байту.

    Ни в коем случае, искренняя благодарность ;)

    ++ спс__))

    Хотел добавить зачем обновлять переменную

    static bool func1 = false;

    ведь у чекбокса есть свойство и так - false = True оно равно свойству CheckBox.Checked = True(False)

    просто сделай так

    if CheckBox1.Checked = True

    bla bla bla

    else

    bla bla bla

    end;

    на много проще ))

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

    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;
    }

  8. Доброго времени суток, собственно имеется такой код:

    После нажатия на кнопку игра зависает и выкидывает, что можно сделать чтобы этого не происходило?


    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.

    • Плюс 1
  9. нашёл инструкцию отвечающую за прыжок вот:

    mov [edx+000000A8],eax

    [edx+000000A8] - это смешение где хранится значение прыжка.

    немогу поменять инструкцию так чтобы она грубо говоря шла так:

    1.прибавили 100 к прыжку(но не заморозили!)

    2.вышли из инструкции

    мм не совсем понял ..

    что тебе мешает сделать так

    mov [edx+000000A8],#64{100}

    и восстановить нормальную инструкцию

    mov [edx+000000A8],eax

    или поиграйся с регистрами eax,ebx,ecx и тд

  10. Игра - King's Bounty.Warriors Of The North.Valhalla Edition.v 1.3.1.6280

    Всем привет, вот скачал игру, поиграв в нее немного решил взломать.

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

    Как разделить это все на несколько категорий т.е. чтобы активирования адрес денег, кристаллов, армии, и.т.д происходили разными скриптами. Описал как смог строго не судите. Заранее всем спс.

    Сразу скажу что филтр знаю как искать и делать.

    2014021517_4976924_10885849.png

    Смотри Смещение и пиши фильтр

  11. просто )) переводишь хек кодировку в дек кодировку и с дек кодировки переводишь в текст .. в делфи если следовать такому методу текст получаеться задом на перед ... тогда тебе нада юзнуть функцию реверса текста .... и вуала все работает .... делал так когда ломал КС выводил хп и ники игроков на форму

  12. Всем привет )) вот кому нада .dll инжектор от меня ))

    Парочка скриншотов :

    image.png

    Инструкция :

    1) В 1 поле пишем имя вашей программы в которую хотите заинжектить длл (Пример : Saints Row 4 All Versions Plus 22 Trainer.EXE)

    2) В 2 поле не чего не пишем )) там появиться наш ID процесса

    3) В 3 поле указываем путь к длл (Снизу есть специальная кнопка нажимаем ее и указываем путь к длл)

    4) После того как сделали все 3 предидущих операции нажимаем на кнопку снизу ("Найти Процесс")

    5) Жмите Внедрить длл и ваша длл успешно внедрена в нужный вам процесс

    • Плюс 1
×
×
  • Создать...

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

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