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

partoftheworlD

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

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

  • Посещение

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

    172

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

  1. 51 минуту назад, Antonshka сказал:

    P.S. Написать без использования string() смог бы?

     

    Конечно, но зачем лишние костыли, когда спецификация позволяет?

     

    image.thumb.png.847140e5dd89db86488e5968254d2751.png

     

    По мне, так это какие-то жесткие и не здоровые извращения.?

  2. 2 часа назад, rugraver сказал:

    Цель простая: указатели для бесконечного боеприипаса, медаптечки,продпакета.

    А зачем в играх на моно указатели? Я конечно понимаю, извращения там у каждого свои, но куда проще обратиться на прямую по имени функции и сказать ей "эй метод, а кому ты отдаешь все ништяки?" простой командой mov.

  3. 15 минут назад, Alex2411 сказал:

    будут  скрипт правильно  работать на 64  если работает на 32 ?

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

    Специально перепроверил.

    x86 - абсолютный адрес(никакие вычисления не нужны)

    x64 - относительный адрес (нужны вычисления)

    • Плюс 1
  4. 8 минут назад, RegionCL сказал:

    У кого-нибудь есть инструкция как пользоваться этим софтом?

    1. Открываешь рекласс

    2. Указываешь адрес начала структуры

    3. Устанавливаешь имя и тип переменной по выбранному смещению.


    После эти структуры можно генерировать в классы для C++/C# и использовать присвоив адрес структуры указателю на сгенерированный класс.

  5. 10 минут назад, Alex2411 сказал:

    надо было просто взять  из байт  сразу адрес

    Это достаточно тонкий момент как оказалось, в x64 байты представляют из себя относительный виртуальный адрес от текущего EIP., а x86 это абсолютный адрес, хотя это надо будет перепроверить, возможно это частный случай.

  6. 1 час назад, Alex2411 сказал:

    а на  адрес который  в этой инструкции BattleBrothers.exe+2FD254  нет

    В чем проблема посчитать?

    В той статье на которую я давал ссылку, есть пример как рассчитать.
    Если получишь 4 байта (54D26F00) относительный виртуальный адрес, достаточно будет эти 4 байта сложить с началом модуля, чтобы получить адрес указывающий на структуру. И сигнатура будет работать до тех пор, пока не изменится код функции в которой находятся эти инструкции и до тех пор пока этого не случиться у тебя будет работать скрипт.

     

    UPD в x86 даже ничего рассчитывать не надо, байты являются абсолютным адресом, достаточно просто получить их.

     

    BattleBrothers.exe+E4EF2 - A1 54D26F00 - mov eax,[BattleBrothers.exe+2FD254]
    BattleBrothers.exe = 0x400000
    
    0x4E4EF2 - A1 54D26F00 - mov eax,[0x6FD254]
    
    
    aob(instr, 'A1 ? ? ? ? ...')
    
    #####################################################
    #mov eax, instr     //instr = 0x4E4EF2 (A1 54D26F00)#
    #inc eax            // eax  = 0x4E4EF3 (54D26F00)   #
    #mov eax, [eax]     // eax  = 0x6FD254              #
    #mov ecx, [eax+100] //                              #
    #cmp ecx, [esi+0C]  //                              #
    #pop ecx            //                              #
    #####################################################

     

  7. 1 час назад, Alex2411 сказал:

    с помощи aob  этот адрес не найти

    Почему? У тебя есть сигнатура с маской, маска решает проблему с меняющимися значениями, смещениями, переменными.

     

    33 минуты назад, Garik66 сказал:

    Короче. если затрудняешься кинь сюда два

    ИМХО Не стоит, ему надо понять как сигнатуры работают, а это лишь дополнительные проблемы создаст.

     

  8. Если сложно пока в одном скрипте все реализовать, то используй глобальные переменные. Первый скрипт, берет [BattleBrothers.exe+2FD254], помещает в глобальную переменную. Второй скрипт использует эту глобальную переменную.

     

    ##########Script 1##########
    globalAlloc(Base, $4)
    
    mov eax,[BattleBrothers.exe+2FD254]
    mov [Base], eax

     

    ##########Script 2##########
    
    subss xmm0,[esi+0C]
    push ecx
    mov ecx,[Base]
    mov ecx,[ecx+100]
    cmp ecx,[esi+0C]
    pop ecx
    jne

     

  9. 1 час назад, Alex2411 сказал:

    как  написать в скрипте что бы он


    Для сигнатуры просто делаешь маску, типа 8B ? ? ? ?, главное чтобы она была уникальной. Дальше высчитываешь смещение от начала сигнатуры, до [game.exe+1234] и получаешь 4 байта указывающие на [game.exe+1234]

    Вот для примера.

     

  10. Возникла проблема с биндами кнопок на новой мыши в линуксе, т.е старая мышь работает "из коробки"(SS Sensei), а у новой(Zowie FK1+) не работают дополнительные клавиши. Чем можно посмотреть какие-нибудь идентификаторы доп. кнопок на мыши, чтобы написать конфиги с биндами? 

  11. 6 минут назад, Sergey99 сказал:

    Может ли меняться смещение (в моём случае 842432) при динамическом распределении памяти и при статическом?

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

     

    Цитата

    RVA - это сокращение от Relative Virtual Address, т.е. относительный виртуальный адрес. "Относительно чего?" - спросите вы. "Относительно Image Base" - отвечу я. Например, если какая-либо строка хранится в памяти по адресу 450000h, и Image Base = 400000h, то RVA этой строки равен 450000h - 400000h = 50000h

     

  12. 2 часа назад, Sergey99 сказал:

    непонятно зачем там нужен оператор смещения >>)

     

    11 часов назад, partoftheworlD сказал:

    Бинарное умножение на 16

     

     

    2 часа назад, Sergey99 сказал:

    как вы нашли этот параметр

    Магия реверса, по строкам находишь функцию регистрирующую команды, которая принимает как аргументы 

     

    Имя команды           "g_speed    "
    Минимальное значение  "190        "
    Маска 1               "0x80000000 "
    Маска 2               "0x7F7FFFFF "
    Максимальное значение "192        "
    Описание              "bla-bla-bla"

     

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


    В этой статье что-то похожее рассматривал уже.

     

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

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

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