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

Ac1d

Ветераны
  • Постов

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

  • Посещение

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

    22

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

  1. Нормально, а вот это

    Добавляем класс по имени ingect.

    Подключаем имена:

    using System.Windows.Forms;

    using System.Diagnostics;

    using System.Runtime.InteropServices;

    using System.Globalization;

    Начало класса:

    class Inject

    {

    protected Process[] Proc;

    protected bool iActive;

    protected List<IntPtr> Cave = new List<IntPtr>();

    Обработка процесса:

    public void GetProc(string Process_Name)

    {

    if (!iActive)

    {

    Proc = Process.GetProcessesByName(Process_Name.Replace(".exe", ""));

    iActive = Proc.Length != 0;

    }

    try

    {iActive = !Proc[0].HasExited;}

    catch{iActive = false;}

    if (!iActive) MessageBox.Show("Process Not Found!", "Get Process");

    }

    Api:

    [DllImport("kernel32.dll", SetLastError = true)]

    public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, uint flAllocationType, uint flProtect);

    [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]

    private static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, byte dwSize, uint dwFreeType);

    [DllImport("kernel32.dll")]

    public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] buffer, int size, int lpNumberOfBytesRead);

    [DllImport("kernel32.dll")]

    public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] buffer, int size, int lpNumberOfBytesWritten);

    Чтение и Запись.

    private byte[] rBytes(int iAddress, int iSize)

    {

    byte[] buff = new byte[iSize];

    if (iActive)

    ReadProcessMemory(Proc[0].Handle, (IntPtr)iAddress, buff, iSize, 0);

    return buff;

    }

    private void wBytes(int iAddress, byte[] pBytes)

    {

    if (iActive)

    WriteProcessMemory(Proc[0].Handle, (IntPtr)iAddress, pBytes, pBytes.Length, 0);

    }

    public byte ReadByte(int iAddress)

    {

    byte[] buff = new byte[1];

    if (iActive)

    ReadProcessMemory(Proc[0].Handle, (IntPtr)iAddress, buff, 1, 0);

    return buff[0];

    }

    выделяем новое память:

    Скрытый текст

    Освобождаем выделенн.. память:

    Скрытый текст

    Скрытый текст

    Инекция кода:

    Скрытый текст

    Один раз добавить в класс inject и всё? Можно делать сколько влезет функций????

    Я имею ввиду #Region "Allocate"

  2. NEMO, патроны, магазины... Что ты конкретно хочешь сломать то? Сами пули заряженые в пушку? (Чит No reload) или колличество пуль в магазине? (Infinite ammo). Если и то и то, то для этих значений две инструкции будет.

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

    Тут Nop в помощь... Как я понимаю если записать 99, то индикатор пуль либо пропадает, либо вылазит за пределы рамок.

  3. Извините за вопрос, я не шарю в этом. Вобщем я так понял всё записывается в игру через указатели, ок. А как тогда быть с патронами? Искать указатель для каждой пушки? Если в СЕ записал в инструкцию 99 и не паришься...

  4. ACID, нет разницы - указал ты конкретное число или будет браться тоже самое число только с какого-нибудь регистра.

    Я этой строчки не понял, но всё равно я остаюсь при своих методах...

    NEMO, add [esp+20]#1 - Тут утеряна запятая add [esp+20],#1

    И вообще посоветую найти другую инструкцию, чтобы записать (mov) допустим 99 и не париться ;)

  5. Делаем Aobscan:

    Сразу к делу. Допустим есть у вас нужный скрипт и на него нужно повесить Aobscan. Идём в Memory View, на любой иструкции кликаем правой кн. мыши и выбераем пункт Go to adress. Копируем из скрипта адрес инструкции, например "nfs.exe"+1224F5 и вставляем его в поле для ввода в окошке Go to adress, нажимаем Ок. Вы перейдёте к вашей инструкции, далее выделите вашу инструкцию левой кн. мыши, зажмите клавишу Shift и отсчитайте от неё вниз 5 инструкций. Отсчитали? Теперь держа Shift клацните на пятую инструкцию. Итого вместе с вашей инструкцией получится 6 выделенных. Далее не снимая выделение нажмите правую кн. мыши и выберите Copy to clippboard --> Bytes. Надеюсь у вас получилось. Далее откройте блокнот и вставьте туда скопированное нажатием Ctrl+V. В блокноте будет 6 строчек такого вида:


    XXX+376F - 68 DC7D4001
    XXX+3774 - 64 A1 00000000
    XXX+377A - 50
    XXX+377B - 64 89 25 00000000
    XXX+3782 - 83 EC 58
    XXX+3785 - 53

    Приведите их к такому виду:


    68 DC 7D 40 01 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53

    Я надеюсь вы поняли что я сделал. ОБЯЗАТЕЛЬНО должно быть по 2 цифры и между ними отступ - 01 02

    Далее идём в Memory View --> Tools --> Lua Engine, появляется окно с двумя строками, в нижнюю бьём такой код:


    sl = AOBScan("ХХ ХХ ХХ ХХ ХХ");
    if(sl == nil) then
    print("No code found!");
    else
    j = stringlist_getCount(sl);
    print("Found:",j);
    for i = 1, j do
    print(stringlist_getString(sl,i-1));
    end
    object_destroy(sl);
    end

    Вместо XX вставляем наши байты:


    sl = AOBScan("68 DC 7D 40 01 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53");
    if(sl == nil) then
    print("No code found!");
    else
    j = stringlist_getCount(sl);
    print("Found:",j);
    for i = 1, j do
    print(stringlist_getString(sl,i-1));
    end
    object_destroy(sl);
    end

    И жмём Execute, программа задумалась............ Но не зависла, ждём...

    В Output в конце концов должна будет появиться надпись:


    Found: 1
    12345678 - ничего не напоминает? Неет?!

    Идём в Memory View и смотрим адрес нашей инструкции из скрипта - 12345678 - 8B 74 24 08 - mov esi,[esp+08], совпадает? Ура, мы нашли правильные проверочные байты!

    Далее идём к нашему скрипту, на который будем вешать AOBScan и адаптируем под мой пример:


    [ENABLE]
    alloc(newmem,2048)
    label(ammo)
    label(returnhere)
    registersymbol(ammo)
    aobscan(aob_ammo,68 DC 7D 40 01 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53) Естественно сюда вставляем наши проверочные байты.

    newmem:
    mov [esi+00000140],#100
    mov eax,[esi+00000140]
    jmp returnhere

    aob_ammo:
    ammo:
    jmp newmem
    nop
    returnhere:

    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    dealloc(newmem)
    unregistersymbol(ammo)
    ammo:
    mov eax,[esi+00000140]
    //Alt: db 8B 86 40 01 00 00

    Вместо ammo пишем что угодно.

    Ну вот вы сделали скрипт заряженый проверочными байтами ;)

    Автор статьи - Ac1d

    Автор lua скрипта для проверки - Akama

    Автор скрипта-болванки - Ac1d

    • Плюс 4

  6. [ENABLE]
    alloc(newmem,2048) //2kb should be enough
    label(returnhere)
    label(originalcode)
    label(exit)

    newmem:
    inc edx // увеличивается значение edx на 1.
    //Можно написать add edx. Только тогда нужно указывать на сколько увеличивать.
    //Например: add edx,63. Если значение float надо указать (float)63.
    //Только писать на сколько увеличивать, надо в шестнадцатеричной системе счисления (hex).
    //В этом может помочь калькулятор переключенный в инженерный вид.



    originalcode:
    mov edx,[esp+20]
    mov [eax+14],edx

    exit:
    jmp returnhere
    "CryGame.dll"+141F53:
    jmp newmem
    nop
    nop
    returnhere:

    [DISABLE]
    "CryGame.dll"+141F53:
    mov edx,[esp+20]
    mov [eax+14],edx

    Немного от себя. Как мне показалось логичнее будет увеличивать (inc) значение в регистре (esp) со смещением +20, то есть inc [esp+20]

    Так же если у вас число число с точкой (float), то написав add [esp+20],(float)63 у вас ничего не выйдет. Правильнее будет так: fadd [esp+20], если же всё равно что то хотите добавить, то add [esp+20],#1234567890 НО, Число будет заоблачное. И не обязательно писать на сколько прибавить (add), т.е add [esp+20] - число, патрон допустим 123 будет становиться в два раза больше при выстреле - 123 выстрел, 246, выстрел, 369...


  7. [ENABLE]
    alloc(newmem,2048) //2kb should be enough
    label(returnhere)
    label(originalcode)
    label(exit)

    newmem:
    mov [esp+20],(float)99 - Запись в иструкцию Nнного значения делается под строчкой newmem: И командой mov делается запись, без dword ptr.

    originalcode:
    mov edx,[esp+20]
    mov [eax+14],edx

    exit:
    jmp returnhere

    "CryGame.dll"+141F53:
    jmp newmem
    nop
    nop
    returnhere:

    [DISABLE]
    "CryGame.dll"+141F53:
    mov edx,[esp+20]
    mov [eax+14],edx

  8. Версия игры 1.2, дата создания 12.04.2012, 9 функций Версия трейнера 1.1

    ~Поправил интерфейс

    ~Исправил баги и накинул новых функций

    Функционал:

    1 - Здоровье (Отключайте функцию когда душите последнего босса Саймона)

    2 - Без перезарядки

    3 - Стамина

    4 - Беск. предметы (Морфин итд)

    5 - Убийство с одного удара (Теперь точно все умирают с одного удара/выстрела)

    6 - Прицел при движении/стрельбе не разъезжается (В комбинации с предметом расширяется)

    7 - Быстрый огонь

    8 - Тупые враги

    F12 - Активация расширенного режима прыжков (Вы сами в состоянии регулировать высоту прыжка)

    Space - Расширенные прыжки

    post-2842-0-62707900-1334253702_thumb.jp

    halflifecryoffeartrn+9.rar

    • Плюс 3
  9. The Saboteur Trainer +16, Дата создания: 13.03.2012

    ~Изменил интерфейс

    Numpad 1 - Режим бога(высота, взрывы не страшны)

    Numpad 2 - Бесконечные патроны/гранаты

    Numpad 3 - Бесконечная контрабанда

    Numpad 4 - Немцы не бьют тревогу по пустякам

    Numpad 5 - Немцы за вами не гоняются

    Numpad 6 - Убийство с одного удара/выстрела

    Numpad 7 - Прицел при стрельбе не разъезжается

    Numpad 8 - Никто из людей не может стрелять кроме вас

    Numpad 9 - Слом машины с одного удара/выстрела

    Numpad / - Улучшеный режим маскировки (немцы вас увидят только вплотную)

    Numpad * - Rapid fire

    Numpad minus - Замедлить машины

    5 - Телепорт к главному убежищу

    6 - Телепорт к барыге

    7 - Телепорт к гаражу

    8 - Телепорт на пик Эйфелевой башни

    post-2842-1331753705,36_thumb.jpg

    thesaboteurtrn+16.rar

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

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

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