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

SergBrNord

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

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

  • Посещение

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

    12

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

  1. Прошу прощения за поздний ответ.

     

    В 26.01.2021 в 18:34, LIRW сказал:

    Ну так.. там всё поставлено :) и запись в +130 - сколько там ? 1 что ли.  Хотя он не сказал даже что там :) Мне кажется его интересует именно подход СЕ вот с такими затираниями в строчку, а не столбик.

     

     

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

  2. Всем салют.

    Ломая игру, у меня получился скрипт следующего вида:

    Спойлер
    
    { Game   : JnG2.exe
      Version: 1.02
      Date   : 2021-01-23
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscan(BOMB,D9 98 30 01 00 00 D9 43) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
    
      jmp return
    
    code:
      fstp dword ptr [eax+00000130]
      jmp return
    
    BOMB:
      jmp newmem
      nop
    return:
    registersymbol(BOMB)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    BOMB:
      db D9 98 30 01 00 00
    
    unregistersymbol(BOMB)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: Rake2D.Script.ItemBomb::Update+565
    
    Rake2D.Script.ItemBomb::Update+53F: 75 07              - jne Rake2D.Script.ItemBomb::Update+548
    Rake2D.Script.ItemBomb::Update+541: B8 01 00 00 00     - mov eax,00000001
    Rake2D.Script.ItemBomb::Update+546: EB 05              - jmp Rake2D.Script.ItemBomb::Update+54D
    Rake2D.Script.ItemBomb::Update+548: B8 02 00 00 00     - mov eax,00000002
    Rake2D.Script.ItemBomb::Update+54D: 39 45 F0           - cmp [ebp-10],eax
    Rake2D.Script.ItemBomb::Update+550: 0F 8C 3E FB FF FF  - jl Rake2D.Script.ItemBomb::Update+94
    Rake2D.Script.ItemBomb::Update+556: 8B CB              - mov ecx,ebx
    Rake2D.Script.ItemBomb::Update+558: E8 4B DD 5D FF     - call Rake2D.Script.ItemBehaviorScript::get_MyHero
    Rake2D.Script.ItemBomb::Update+55D: D9 E8              - fld1 
    Rake2D.Script.ItemBomb::Update+55F: D8 A8 30 01 00 00  - fsubr dword ptr [eax+00000130]
    // ---------- INJECTING HERE ----------
    Rake2D.Script.ItemBomb::Update+565: D9 98 30 01 00 00  - fstp dword ptr [eax+00000130]
    // ---------- DONE INJECTING  ----------
    Rake2D.Script.ItemBomb::Update+56B: D9 43 30           - fld dword ptr [ebx+30]
    Rake2D.Script.ItemBomb::Update+56E: D9 EE              - fldz 
    Rake2D.Script.ItemBomb::Update+570: DF F1              - fcomip st(0),st(1)
    Rake2D.Script.ItemBomb::Update+572: DD D8              - fstp st(0)
    Rake2D.Script.ItemBomb::Update+574: 7A 0B              - jp Rake2D.Script.ItemBomb::Update+581
    Rake2D.Script.ItemBomb::Update+576: 73 09              - jae Rake2D.Script.ItemBomb::Update+581
    Rake2D.Script.ItemBomb::Update+578: D9 45 08           - fld dword ptr [ebp+08]
    Rake2D.Script.ItemBomb::Update+57B: D8 6B 30           - fsubr dword ptr [ebx+30]
    Rake2D.Script.ItemBomb::Update+57E: D9 5B 30           - fstp dword ptr [ebx+30]
    Rake2D.Script.ItemBomb::Update+581: D9 43 30           - fld dword ptr [ebx+30]
    }

     

     

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

    После некоторых попыток я пришёл к следующему виду скрипта:

    Спойлер
    
    { Game   : JnG2.exe
      Version: 1.02
      Date   : 2021-01-23
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscan(BOMB,D9 98 30 01 00 00 D9 43) // should be unique
    
    BOMB:
      db 90 90 90 90 90 90
    
    registersymbol(BOMB)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    BOMB:
      db D9 98 30 01 00 00
    
    unregistersymbol(BOMB)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: Rake2D.Script.ItemBomb::Update+565
    
    Rake2D.Script.ItemBomb::Update+53F: 75 07              - jne Rake2D.Script.ItemBomb::Update+548
    Rake2D.Script.ItemBomb::Update+541: B8 01 00 00 00     - mov eax,00000001
    Rake2D.Script.ItemBomb::Update+546: EB 05              - jmp Rake2D.Script.ItemBomb::Update+54D
    Rake2D.Script.ItemBomb::Update+548: B8 02 00 00 00     - mov eax,00000002
    Rake2D.Script.ItemBomb::Update+54D: 39 45 F0           - cmp [ebp-10],eax
    Rake2D.Script.ItemBomb::Update+550: 0F 8C 3E FB FF FF  - jl Rake2D.Script.ItemBomb::Update+94
    Rake2D.Script.ItemBomb::Update+556: 8B CB              - mov ecx,ebx
    Rake2D.Script.ItemBomb::Update+558: E8 4B DD 5D FF     - call Rake2D.Script.ItemBehaviorScript::get_MyHero
    Rake2D.Script.ItemBomb::Update+55D: D9 E8              - fld1 
    Rake2D.Script.ItemBomb::Update+55F: D8 A8 30 01 00 00  - fsubr dword ptr [eax+00000130]
    // ---------- INJECTING HERE ----------
    Rake2D.Script.ItemBomb::Update+565: D9 98 30 01 00 00  - fstp dword ptr [eax+00000130]
    // ---------- DONE INJECTING  ----------
    Rake2D.Script.ItemBomb::Update+56B: D9 43 30           - fld dword ptr [ebx+30]
    Rake2D.Script.ItemBomb::Update+56E: D9 EE              - fldz 
    Rake2D.Script.ItemBomb::Update+570: DF F1              - fcomip st(0),st(1)
    Rake2D.Script.ItemBomb::Update+572: DD D8              - fstp st(0)
    Rake2D.Script.ItemBomb::Update+574: 7A 0B              - jp Rake2D.Script.ItemBomb::Update+581
    Rake2D.Script.ItemBomb::Update+576: 73 09              - jae Rake2D.Script.ItemBomb::Update+581
    Rake2D.Script.ItemBomb::Update+578: D9 45 08           - fld dword ptr [ebp+08]
    Rake2D.Script.ItemBomb::Update+57B: D8 6B 30           - fsubr dword ptr [ebx+30]
    Rake2D.Script.ItemBomb::Update+57E: D9 5B 30           - fstp dword ptr [ebx+30]
    Rake2D.Script.ItemBomb::Update+581: D9 43 30           - fld dword ptr [ebx+30]
    }

     

     

    Можно ли  сделать подобное при помощи инструкции nop какими либо ещё способами (идущие подряд 6 инструкций nop я уже пробовал ?)?

     

    P.S.

    Нормально ли работает инструкция nop 6? Я искренне считал, что это краткая форма записи подряд идущих инструкций nop. На практике в коде игры вылазит что-то вроде:

     //BOMB - 66 0F1F 44 00 00      - nop word ptr [eax+eax+00]

     

  3. Ответ.

    Отдача хранится в одной структуре с оружием (кто бы мог подумать). 

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

    2B4 - патроны в магазине; 31С - отдача. Причём ниже есть похожие значения.

    От значения 31С можно выйти на инструкцию, которая работает и со врагами (у них точность пожиже будет).

     

    Спойлер

    6LO4aGU.jpg

     

  4. В 30.11.2019 в 15:14, LIRW сказал:

    Это не только для таких игр.. Вот вруби как пример и попробуй пострелять...  Эта функция камеру на проч вырубит в обще.. Там гляди функцию...

     

    Ну смотри,  я при помощи CE построил диаграмму.  До того перехода, на который ты мне указал производится обнуление всего подряд.  

    Спойлер

    yIiYB04.png

     

    Это похоже на обнуление x, y, z камеры:

    DP.exe+5544CD - xorps xmm0,xmm0
    DP.exe+5544D0 - movss [esi+0C],xmm0
    DP.exe+5544D5 - movss [esi+10],xmm0
    DP.exe+5544DA - movss [esi+14],xmm0
    

    Эти опкоды поразительно похожи на те, что я указывал в первом сообщении; здесь также происходит обнуление:

    DP.exe+5544DF - xor eax,eax
    DP.exe+5544E1 - xor ecx,ecx
    DP.exe+5544E3 - mov [esi+24],eax
    DP.exe+5544E6 - xor edx,edx
    DP.exe+5544E8 - mov [esi+28],ecx
    DP.exe+5544EB - mov [esi+2C],edx
    

    Дальше идёт проверка на 0 eax (мы его обнуляем чуть выше) 

    DP.exe+5544EE - xor ebx,ebx
    DP.exe+5544F0 - cmp [edi+00000188],eax
    DP.exe+5544F6 - je DP.exe+554545
    

    В том скрипте, что ты написал,  происходит безусловный переход на DP.exe+554545 и камера застывает на месте. Но в чём проблема, я не вижу что бы в опкодах ниже  DP.exe+554545 что-то массово подгружалось в структуры.

     

  5. Салют всем. Продолжаем мучать игру под названием "Deadpool". 

    Захотелось мне научится находить-отключать отдачу и Лирв поделился адресом, откуда можно посмотреть на всё это дело.

    Эту тему тоже пишу по предварительному согласованию с Лирвом =)

    // ---------- INJECTING HERE ----------
    "DP.exe"+65F301: F3 0F 11 41 30           -  movss [ecx+30],xmm0
    // ---------- DONE INJECTING  ----------

    Сделав останов, я посмотрел структуру по адресу, находящемуся в ecx, и нашёл вот такую структуру:

    Спойлер

    i38cDQ0.jpg

     

    Набросал на скорую руку скрипт, который пишет туда нули - не помогло;  записал с [ecx+24] по [ecx+30] нули - не помогло; нашёл все инструкции, пишущие по тем адресам, заменил nop - не помогло. Что я делаю не так?

     

    P.S.

    Если не трудно, подскажите приемлемый способ нахождения отдачи, т.к. метод со спидхаком на 0,2 и отсевом удручает своей эффективностью.

  6. В 17.11.2019 в 17:44, LIRW сказал:

    Я на неё выходил как и всё.. отладчиком.. Адрес над просто правильный найти и всё... Так что @Garik66 у него просто даже адрес не правильный.. От того и делает в обще на другой инструкции.. которая с очками не чего общего не имеет. А тут всего то 2 отсева надо. 

     

     

    У меня CE упорно определяет это значение до выноса в таблицу как строковый тип. Я искал как вещественный тип и в мои отсевы нужный адрес не попадал.

    KENiKCm.jpg

  7. 21 минуту назад, Garik66 сказал:

    Хотя все ещё проще F3 0F 11 81 08 05 00 00 есть и сигна в скрипте.

     

    Так что секреты мастерства Женьки просты.

    Насколько я понял, когда не нашлось целочисленное значение, он сразу начал поиск по всем значениям. У него нашлась строковая переменная, которая на самом деле является числом с точкой, но CE при поиске её так почему-то не определяет. Я же сразу перешёл к поиску чисел с точкой и пролетел.

  8. 14 часов назад, Garik66 сказал:

    Попробуй так:

      Показать контент
    
    
    { Game   : DP.exe
      Version: 1.0
      Date   : 2019-11-16
      Author : SergBrNord
      Correction: Garik66
    }
    
    [ENABLE]
    aobscanmodule(DPOINTS,DP.exe,DD 5F 04 5F 5E 8B) // should be unique
    alloc(newmem,$1000)
    label(code)
    label(return)
    label(flag)
    label(value)
    registersymbol(DPOINTS)
    
    newmem:
      cmp [edi+90], #6              //Main filter
      jne code
      cmp [flag],0                  //Check flag
      jne code
      fstp qword ptr [esi+04]
      fld qword ptr [value]        //Write DP value
      mov [flag],1                 //Set flag
    
    code:
      fstp qword ptr [edi+04]
      pop edi
      pop esi
      jmp return
    
    flag:
      dd 0
    value:
      dq (double)3000000
    
    DPOINTS:
      jmp newmem
    return:
    
    [DISABLE]
    DPOINTS:
      db DD 5F 04 5F 5E
    
    unregistersymbol(DPOINTS)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "DP.exe"+A1AE17
    
    "DP.exe"+A1AE04: 89 77 04              -  mov [edi+04],esi
    "DP.exe"+A1AE07: FF 46 08              -  inc [esi+08]
    "DP.exe"+A1AE0A: 5B                    -  pop ebx
    "DP.exe"+A1AE0B: 5F                    -  pop edi
    "DP.exe"+A1AE0C: 5E                    -  pop esi
    "DP.exe"+A1AE0D: 8B E5                 -  mov esp,ebp
    "DP.exe"+A1AE0F: 5D                    -  pop ebp
    "DP.exe"+A1AE10: C2 04 00              -  ret 0004
    "DP.exe"+A1AE13: DD 46 04              -  fld qword ptr [esi+04]
    "DP.exe"+A1AE16: 5B                    -  pop ebx
    // ---------- INJECTING HERE ----------
    "DP.exe"+A1AE17: DD 5F 04              -  fstp qword ptr [edi+04]
    "DP.exe"+A1AE1A: 5F                    -  pop edi
    "DP.exe"+A1AE1B: 5E                    -  pop esi
    // ---------- DONE INJECTING  ----------
    "DP.exe"+A1AE1C: 8B E5                 -  mov esp,ebp
    "DP.exe"+A1AE1E: 5D                    -  pop ebp
    "DP.exe"+A1AE1F: C2 04 00              -  ret 0004
    "DP.exe"+A1AE22: 8B 56 04              -  mov edx,[esi+04]
    "DP.exe"+A1AE25: 5B                    -  pop ebx
    "DP.exe"+A1AE26: 89 57 04              -  mov [edi+04],edx
    "DP.exe"+A1AE29: 5F                    -  pop edi
    "DP.exe"+A1AE2A: 5E                    -  pop esi
    "DP.exe"+A1AE2B: 8B E5                 -  mov esp,ebp
    "DP.exe"+A1AE2D: 5D                    -  pop ebp
    }

     

     

     

    Попробовал. Вылетает всё также непонятно где, до точки останова. Но это уже не особо важно, буду использовать вариант Лирва. Только сначала надо узнать секреты мастерства ?

  9. 4 часа назад, LIRW сказал:

    А очки разве там не по такой сигнатуре.... ?

    
    CC CC CC CC CC F3 0F * * * * * * * * F3 0F 11 81 08 05 00 00  + 15 байт.. не hex
    
    movss [ecx+0508h],xmm0

    Это я к тому, что там же не какие фильтра то и не нужны...  Я просто эту игру когда то смотрел.. таблицы уж нет.. А исход остался.

     

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

     

    13 часов назад, Garik66 сказал:

    Конечно вылетает, посмотри на эту строчку:

    
    mov [edi+04],value          //Write DP value

    value - это адрес

    [value] - вот это DP value

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

     

     

     

    Оно-то так, но при попытке сохранить скрипт начинается ругань именно на таким образом написанную строку. Что странно, как по мне.

     

  10. Салют всем.

    После некоторого перерыва на квесты решил кое-что поломать.

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

     

    Вот код. Код вылетает, причём ещё до попытки записи значения, которое почему-то равно нулю, хотя в коде не так.

     

    Спойлер
    
      { Game   : DP.exe
      Version: 1.0
      Date   : 2019-11-16
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(DPOINTS,DP.exe,DD 5F 04 5F 5E 8B) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      cmp [edi+90], #6              //Main filter
      jne code
      cmp [flag], 0                 //Check flag
      jne code
      fstp st(0)
      mov [edi+04], value           //Write DP value
      fld qword ptr [edi+04]
      mov byte ptr [flag], 1        //Set flag
    
    code:
      fstp qword ptr [edi+04]
      pop edi
      pop esi
      jmp return
    
    flag:
    db 00
    value:
    dq (double)3000000
    
    DPOINTS:
      jmp newmem
    return:
    registersymbol(DPOINTS)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    DPOINTS:
      db DD 5F 04 5F 5E
    
    unregistersymbol(DPOINTS)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "DP.exe"+A1AE17
    
    "DP.exe"+A1AE04: 89 77 04              -  mov [edi+04],esi
    "DP.exe"+A1AE07: FF 46 08              -  inc [esi+08]
    "DP.exe"+A1AE0A: 5B                    -  pop ebx
    "DP.exe"+A1AE0B: 5F                    -  pop edi
    "DP.exe"+A1AE0C: 5E                    -  pop esi
    "DP.exe"+A1AE0D: 8B E5                 -  mov esp,ebp
    "DP.exe"+A1AE0F: 5D                    -  pop ebp
    "DP.exe"+A1AE10: C2 04 00              -  ret 0004
    "DP.exe"+A1AE13: DD 46 04              -  fld qword ptr [esi+04]
    "DP.exe"+A1AE16: 5B                    -  pop ebx
    // ---------- INJECTING HERE ----------
    "DP.exe"+A1AE17: DD 5F 04              -  fstp qword ptr [edi+04]
    "DP.exe"+A1AE1A: 5F                    -  pop edi
    "DP.exe"+A1AE1B: 5E                    -  pop esi
    // ---------- DONE INJECTING  ----------
    "DP.exe"+A1AE1C: 8B E5                 -  mov esp,ebp
    "DP.exe"+A1AE1E: 5D                    -  pop ebp
    "DP.exe"+A1AE1F: C2 04 00              -  ret 0004
    "DP.exe"+A1AE22: 8B 56 04              -  mov edx,[esi+04]
    "DP.exe"+A1AE25: 5B                    -  pop ebx
    "DP.exe"+A1AE26: 89 57 04              -  mov [edi+04],edx
    "DP.exe"+A1AE29: 5F                    -  pop edi
    "DP.exe"+A1AE2A: 5E                    -  pop esi
    "DP.exe"+A1AE2B: 8B E5                 -  mov esp,ebp
    "DP.exe"+A1AE2D: 5D                    -  pop ebp
    }

     

     

    А вот как это дело выглядит в отладчике.

    Спойлер

    RuRA7xW.jpg

     

    P.S.

    Не понимаю, почему в моменте проверки флага отладчик секции комментариев пишет, что флаг уже вроде как равен 1, хотя это не так.

     

    P.P.S.

    Пошёл спать, благодарен за помощь ?

     

  11. В 31.03.2019 в 17:06, Garik66 сказал:

    сравниваешь младшую часть числа при таком сравнении 

     

    Вот про слона-то я и забыл. Спасибо.

     

    В 31.03.2019 в 18:53, Alex2411 сказал:

    в смысле  скорость игры ?  вот для gog версия  1.5.3 .  если метку  _time поставить  100 то за минуту  проходит  около 100 лет  в игре ))

     

    В прямом. Хочу периодически сбрасывать таймер на предыдущее значение, чтобы неспеша развиваться. В общем, попробую - отпишусь.

  12. Салют всем.

    Решил я поломать Тропико 1. И первым под удар попала стоимость строительства.

     

    Написан такой скриптик.

    Спойлер
    
    aobscanmodule(FREECONSTRUCTION,Tropico.EXE,DC 86 22 01 00 00 DD) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      fstp qword ptr [value]
      cmp [value], 1
      jg jump
    
      fld qword ptr [null]
      jmp code
    
    jump:
      fld qword ptr [value]
    
    code:
      fadd qword ptr [esi+00000122]
      jmp return
    
    value:
         dq 00
    
    null:
         dq 00
    
    FREECONSTRUCTION:
      jmp newmem
      nop
    return:
    registersymbol(FREECONSTRUCTION)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    FREECONSTRUCTION:
      db DC 86 22 01 00 00
    
    unregistersymbol(FREECONSTRUCTION)
    dealloc(newmem)

     

     

    Суть идеи такова.

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

    Проблема в том, что jg почему-то не работает. Объясните кто, а?

     

    Также, если у кого-то будет желание  попробуйте найти инструкцию, отвечающую за ход времени.

     

    P.S.

    Отвечу завтра, спать хочу неимоверно...

  13. 5 часов назад, Garik66 сказал:

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

     

    Гарик, я видел ту тему и видео смотрел. Но почему-то не взлетело.

    5 часов назад, LIRW сказал:

    Он наверное месяц уже не как не найдет данные.. Я думаю он бы нашел, если бы понял как это работает. Вот видео урок посмотрит, я думаю поймет. 

     

    :offtopic:Не месяц, а дня  4.. не только тебе можно на всяких бабок отвлекаться.  Я на комочек шерсти подсел?

    • Смешно 1
  14. 16 часов назад, partoftheworlD сказал:

     

    С Xor это не будет работать
     

     

     

    Проверил и этот вариант, тоже находить отказывается. Надо Лирва пытать, как он выходил на шифрованное значение.

  15. 25 минут назад, partoftheworlD сказал:

    Неизвестное - изменилось/не изменилось, а для проверки ставить бряк на доступ, чтобы найти инструкцию шифрования, а от неё выйти на значение.

     

    Попробую, с изменилось/не изменилось не пробовал. Отсеивал по увеличилось/уменьшилось

  16. Всем здрасти!

     

    Есть такая древняя и кривоватая игрушка "Kane & Lynch: Dead Men". И есть там значение патронов. Благодаря таблице Лирва, я узнал, что значение шифруется  BEEBBEEB.

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

    Может кто-нибудь описать процесс для конкретно этой игры?

     

    Таблица Лирва

  17. Всем доброго времени суток.

    У меня возникла неожиданная проблема. Starcraft ни в коем разе не позволяет подключить к себе отладчик.

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

    Испробовано:

    • Подключение отладчика к процессу до начало поиска;
    • Смена отладчиков CE;
    • Подключение sedebugprivilege;
    • Подключение x64dbg с отладочной привилегией.

     

    Есть у кого-нибудь ещё идеи?

     

    P.S.

    Версия 1.22.2.5147

  18. Результат моих предварительных изысканий (не доделан из заготовки фильтр):

     

    Спойлер
    
    { Game   : RomeTW-BI.exe
      Version: 1.6.1
      Date   : 2018-02-19
      Author : SergBrNord, Garik66; BIG THX TO Recifense
    }
    
    [ENABLE]
    
    aobscanmodule(GETmID,RomeTW-BI.exe,8B 80 04 05 00 00 89 45 F0 FF) // should be unique
    aobscanmodule(MVPOINTS_1,RomeTW-BI.exe,D8 65 08 8B 45 8C) // should be unique
    aobscanmodule(MVPOINTS_2,RomeTW-BI.exe,D9 98 7C 02 00 00 0F) // should be unique
    aobscanmodule(MVPOINTS_3,RomeTW-BI.exe,D8 65 08 8B 45 FC D9 98 7C) // should be unique
    
    alloc(newmem,$1000)
    alloc(dump, 4096, RomeTW-BI.exe)
    
    label(code_1)
    label(code_2)
    label(code_3)
    label(code_3)
    
    label(script_1)
    label(script_2)
    label(script_3)
    label(script_4)
    
    label(return_1)
    label(return_2)
    label(script_3)
    label(script_4)
    
    registersymbol(GETmID)
    registersymbol(MVPOINTS_1)
    registersymbol(MVPOINTS_2)
    registersymbol(MVPOINTS_3)
    
    newmem:
    
    script_1:
      mov [PlayerID],eax
    code_1:
      mov eax,[eax+00000504]
      jmp return_1
    
    script_2:
      cmp eax, [PlayerID]
      jne code_2
      mov [ebp+08], 0
    code_2:
      fsub dword ptr [ebp+08]
      mov eax,[ebp-74]
      jmp return_2
    
    script_3:
      cmp eax, [PlayerID]
      jne code_3
      mov [eax+0000027C], (float)80
      fstp st(0)
      fld dword ptr [eax+0000027C]
    code_3:
      fstp dword ptr [eax+0000027C]
      jmp return_3
    
    script_4:
      cmp eax, [PlayerID]
      jne code_4
      mov [ebp+08], 0
    code_4:
      fsub dword ptr [ebp+08]
      mov eax,[ebp-04]
      jmp return_4
    
    PlayerID:
      dd dump
    
    GETmID:
      jmp script_1
      nop
    return_1:
    
    MVPOINTS_1:
      jmp script_2
      nop
    return_2:
    
    MVPOINTS_2:
      jmp script_3
      nop
    return_3:
    
    MVPOINTS_3:
      jmp script_4
      nop
    return_4:
    
    [DISABLE]
    
    GETmID:
      db 8B 80 04 05 00 00
    
    MVPOINTS_1:
      db D8 65 08 8B 45 8C
    
    MVPOINTS_2:
      db D9 98 7C 02 00 00
    
    MVPOINTS_3:
      db D8 65 08 8B 45 FC
    
    unregistersymbol(GETmID)
    unregistersymbol(MVPOINTS_1)
    unregistersymbol(MVPOINTS_2)
    unregistersymbol(MVPOINTS_3)
    
    dealloc(newmem)
    dealloc(dump)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+898105
    
    "RomeTW-BI.exe"+8980DE: 89 4D EC           -  mov [ebp-14],ecx
    "RomeTW-BI.exe"+8980E1: A1 58 18 92 02     -  mov eax,[RomeTW-BI.exe+2521858]
    "RomeTW-BI.exe"+8980E6: 05 E4 02 00 00     -  add eax,000002E4
    "RomeTW-BI.exe"+8980EB: 89 45 F8           -  mov [ebp-08],eax
    "RomeTW-BI.exe"+8980EE: 8D 45 FC           -  lea eax,[ebp-04]
    "RomeTW-BI.exe"+8980F1: 50                 -  push eax
    "RomeTW-BI.exe"+8980F2: 8B 0D FC C0 8D 01  -  mov ecx,[RomeTW-BI.exe+14DC0FC]
    "RomeTW-BI.exe"+8980F8: E8 96 43 ED FF     -  call RomeTW-BI.exe+76C493
    "RomeTW-BI.exe"+8980FD: 8D 4D FC           -  lea ecx,[ebp-04]
    "RomeTW-BI.exe"+898100: E8 0A 28 EC FF     -  call RomeTW-BI.exe+75A90F
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+898105: 8B 80 04 05 00 00  -  mov eax,[eax+00000504]
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+89810B: 89 45 F0           -  mov [ebp-10],eax
    "RomeTW-BI.exe"+89810E: FF 75 F0           -  push [ebp-10]
    "RomeTW-BI.exe"+898111: 8B 45 EC           -  mov eax,[ebp-14]
    "RomeTW-BI.exe"+898114: 8B 48 60           -  mov ecx,[eax+60]
    "RomeTW-BI.exe"+898117: 8B 45 EC           -  mov eax,[ebp-14]
    "RomeTW-BI.exe"+89811A: 8B 40 60           -  mov eax,[eax+60]
    "RomeTW-BI.exe"+89811D: 8B 00              -  mov eax,[eax]
    "RomeTW-BI.exe"+89811F: FF 90 70 01 00 00  -  call dword ptr [eax+00000170]
    "RomeTW-BI.exe"+898125: 8B 45 F8           -  mov eax,[ebp-08]
    "RomeTW-BI.exe"+898128: 8B 4D EC           -  mov ecx,[ebp-14]
    }
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+181782
    
    "RomeTW-BI.exe"+18175B: 8B EC                 -  mov ebp,esp
    "RomeTW-BI.exe"+18175D: 81 EC 80 00 00 00     -  sub esp,00000080
    "RomeTW-BI.exe"+181763: 89 4D 8C              -  mov [ebp-74],ecx
    "RomeTW-BI.exe"+181766: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+181769: 0F B6 80 C1 00 00 00  -  movzx eax,byte ptr [eax+000000C1]
    "RomeTW-BI.exe"+181770: 85 C0                 -  test eax,eax
    "RomeTW-BI.exe"+181772: 74 05                 -  je RomeTW-BI.exe+181779
    "RomeTW-BI.exe"+181774: E9 5A 02 00 00        -  jmp RomeTW-BI.exe+1819D3
    "RomeTW-BI.exe"+181779: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+18177C: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+181782: D8 65 08              -  fsub dword ptr [ebp+08]
    "RomeTW-BI.exe"+181785: 8B 45 8C              -  mov eax,[ebp-74]
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+181788: D9 98 C4 00 00 00     -  fstp dword ptr [eax+000000C4]
    "RomeTW-BI.exe"+18178E: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+181791: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
    "RomeTW-BI.exe"+181797: D8 1D 9C 49 FE 00     -  fcomp dword ptr [RomeTW-BI.exe+BE499C]
    "RomeTW-BI.exe"+18179D: DF E0                 -  fnstsw ax
    "RomeTW-BI.exe"+18179F: 9E                    -  sahf
    "RomeTW-BI.exe"+1817A0: 73 0B                 -  jae RomeTW-BI.exe+1817AD
    "RomeTW-BI.exe"+1817A2: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+1817A5: D9 EE                 -  fldz
    "RomeTW-BI.exe"+1817A7: D9 98 C4 00 00 00     -  fstp dword ptr [eax+000000C4]
    }
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+1817DD
    
    "RomeTW-BI.exe"+1817B9: 83 7D F4 00           -  cmp dword ptr [ebp-0C],00
    "RomeTW-BI.exe"+1817BD: 74 24                 -  je RomeTW-BI.exe+1817E3
    "RomeTW-BI.exe"+1817BF: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+1817C2: 8B 80 EC 00 00 00     -  mov eax,[eax+000000EC]
    "RomeTW-BI.exe"+1817C8: 89 45 F0              -  mov [ebp-10],eax
    "RomeTW-BI.exe"+1817CB: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
    "RomeTW-BI.exe"+1817D4: D9 5D EC              -  fstp dword ptr [ebp-14]
    "RomeTW-BI.exe"+1817D7: 8B 45 F0              -  mov eax,[ebp-10]
    "RomeTW-BI.exe"+1817DA: D9 45 EC              -  fld dword ptr [ebp-14]
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+1817E3: 0F B6 45 0C           -  movzx eax,byte ptr [ebp+0C]
    "RomeTW-BI.exe"+1817E7: 85 C0                 -  test eax,eax
    "RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00     -  je RomeTW-BI.exe+1819CB
    "RomeTW-BI.exe"+1817EF: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+1817F2: 8B 80 E4 00 00 00     -  mov eax,[eax+000000E4]
    "RomeTW-BI.exe"+1817F8: 89 45 E8              -  mov [ebp-18],eax
    "RomeTW-BI.exe"+1817FB: 83 7D E8 00           -  cmp dword ptr [ebp-18],00
    "RomeTW-BI.exe"+1817FF: 0F 84 C6 01 00 00     -  je RomeTW-BI.exe+1819CB
    "RomeTW-BI.exe"+181805: 8B 45 8C              -  mov eax,[ebp-74]
    "RomeTW-BI.exe"+181808: 8B 80 E4 00 00 00     -  mov eax,[eax+000000E4]
    }
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+3C13C2
    
    "RomeTW-BI.exe"+3C13A0: 55                    -  push ebp
    "RomeTW-BI.exe"+3C13A1: 8B EC                 -  mov ebp,esp
    "RomeTW-BI.exe"+3C13A3: 51                    -  push ecx
    "RomeTW-BI.exe"+3C13A4: 89 4D FC              -  mov [ebp-04],ecx
    "RomeTW-BI.exe"+3C13A7: 8B 45 FC              -  mov eax,[ebp-04]
    "RomeTW-BI.exe"+3C13AA: D9 80 7C 02 00 00     -  fld dword ptr [eax+0000027C]
    "RomeTW-BI.exe"+3C13B0: D8 65 08              -  fsub dword ptr [ebp+08]
    "RomeTW-BI.exe"+3C13B3: D8 1D 6C 8C FF 00     -  fcomp dword ptr [RomeTW-BI.exe+BF8C6C]
    "RomeTW-BI.exe"+3C13B9: 8B 45 FC              -  mov eax,[ebp-04]
    "RomeTW-BI.exe"+3C13BC: D9 80 7C 02 00 00     -  fld dword ptr [eax+0000027C]
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+3C13C2: D8 65 08              -  fsub dword ptr [ebp+08]
    "RomeTW-BI.exe"+3C13C5: 8B 45 FC              -  mov eax,[ebp-04]
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+3C13C8: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
    "RomeTW-BI.exe"+3C13CE: 8B 45 FC              -  mov eax,[ebp-04]
    "RomeTW-BI.exe"+3C13D1: D9 80 7C 02 00 00     -  fld dword ptr [eax+0000027C]
    "RomeTW-BI.exe"+3C13D7: D8 1D 9C 49 FE 00     -  fcomp dword ptr [RomeTW-BI.exe+BE499C]
    "RomeTW-BI.exe"+3C13DD: DF E0                 -  fnstsw ax
    "RomeTW-BI.exe"+3C13DF: 9E                    -  sahf
    "RomeTW-BI.exe"+3C13E0: 73 0B                 -  jae RomeTW-BI.exe+3C13ED
    "RomeTW-BI.exe"+3C13E2: 8B 45 FC              -  mov eax,[ebp-04]
    "RomeTW-BI.exe"+3C13E5: D9 EE                 -  fldz
    "RomeTW-BI.exe"+3C13E7: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
    }

     

     

    Как оказалось, для получения корректной работы скрипта для члена фракции, необходимо одновременно работать с инструкциями для специальных юнитов и армий (хоть скрипты для последних прекрасно работают по отдельности)

     

    Вот версия, составленная по идеям Гаррика, но крашащая игру: =)

    Спойлер
    
    { Game   : RomeTW-BI.exe
      Version: 1.6.1
      Date   : 2018-02-18
      Author : SergBrNord & Garik66
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(Gariktest,RomeTW-BI.exe,8B 80 04 05 00 00 89 45 F0 FF) // should be unique
    aobscanmodule(INJECT,RomeTW-BI.exe,D9 81 C4 00 00 00 D9) // should be unique
    aobscanmodule(INJECT2,RomeTW-BI.exe,00 D9 80 7C 02 00 00 D9 5D F0 8B 45 0C D9 45 F0 D9 18 EB A9 C9) // should be unique
    
    alloc(newmem,$1000)
    alloc(dump, 4096, RomeTW-BI.exe)
    
    label(cheat1)
    label(cheat2)
    label(cheat3)
    
    label(code)
    label(code2)
    label(code3)
    
    label(return)
    label(return2)
    label(return3)
    
    registersymbol(Gariktest)
    registersymbol(INJECT)
    registersymbol(INJECT2)
    
    newmem:
    
    cheat1:
      mov [PlayerID],eax
    
    code:
      mov eax,[eax+00000504]
      jmp return
    
    
    cheat2:
      cmp eax, [PlayerID]
      jne code2
    
      push dword ptr [eax+150]
      pop dword ptr [ecx+C4]
    
    code2:
      fld dword ptr [ecx+000000C4]
      jmp return2
    
    cheat3:
      cmp eax, [PlayerID]
      jne code3
      nop
      nop
      jmp RomeTW-BI.exe+ACEDF
      leave
      jmp return3
    
    code3:
      fstp dword ptr [eax]
      jmp RomeTW-BI.exe+ACEDF
      leave
      jmp return3
    
    
    PlayerID:
    dd dump
    
    Gariktest:
      jmp cheat1
      nop
    return:
    
    INJECT:
      jmp cheat2
      nop
    return2:
    
    INJECT2+10:
      jmp cheat3
    return3:
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    Gariktest:
      db 8B 80 04 05 00 00
    
    INJECT:
      db D9 81 C4 00 00 00
    
    INJECT2+10:
      db D9 18 EB A9 C9
    
    unregistersymbol(Gariktest)
    unregistersymbol(INJECT)
    unregistersymbol(INJECT2)
    
    dealloc(newmem)
    dealloc(dump)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+898105
    
    "RomeTW-BI.exe"+8980DE: 89 4D EC           -  mov [ebp-14],ecx
    "RomeTW-BI.exe"+8980E1: A1 58 18 92 02     -  mov eax,[RomeTW-BI.exe+2521858]
    "RomeTW-BI.exe"+8980E6: 05 E4 02 00 00     -  add eax,000002E4
    "RomeTW-BI.exe"+8980EB: 89 45 F8           -  mov [ebp-08],eax
    "RomeTW-BI.exe"+8980EE: 8D 45 FC           -  lea eax,[ebp-04]
    "RomeTW-BI.exe"+8980F1: 50                 -  push eax
    "RomeTW-BI.exe"+8980F2: 8B 0D FC C0 8D 01  -  mov ecx,[RomeTW-BI.exe+14DC0FC]
    "RomeTW-BI.exe"+8980F8: E8 96 43 ED FF     -  call RomeTW-BI.exe+76C493
    "RomeTW-BI.exe"+8980FD: 8D 4D FC           -  lea ecx,[ebp-04]
    "RomeTW-BI.exe"+898100: E8 0A 28 EC FF     -  call RomeTW-BI.exe+75A90F
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+898105: 8B 80 04 05 00 00  -  mov eax,[eax+00000504]
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+89810B: 89 45 F0           -  mov [ebp-10],eax
    "RomeTW-BI.exe"+89810E: FF 75 F0           -  push [ebp-10]
    "RomeTW-BI.exe"+898111: 8B 45 EC           -  mov eax,[ebp-14]
    "RomeTW-BI.exe"+898114: 8B 48 60           -  mov ecx,[eax+60]
    "RomeTW-BI.exe"+898117: 8B 45 EC           -  mov eax,[ebp-14]
    "RomeTW-BI.exe"+89811A: 8B 40 60           -  mov eax,[eax+60]
    "RomeTW-BI.exe"+89811D: 8B 00              -  mov eax,[eax]
    "RomeTW-BI.exe"+89811F: FF 90 70 01 00 00  -  call dword ptr [eax+00000170]
    "RomeTW-BI.exe"+898125: 8B 45 F8           -  mov eax,[ebp-08]
    "RomeTW-BI.exe"+898128: 8B 4D EC           -  mov ecx,[ebp-14]
    }
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+18CE5D
    
    "RomeTW-BI.exe"+18CE2C: 0F B6 C0           -  movzx eax,al
    "RomeTW-BI.exe"+18CE2F: 85 C0              -  test eax,eax
    "RomeTW-BI.exe"+18CE31: 74 1E              -  je RomeTW-BI.exe+18CE51
    "RomeTW-BI.exe"+18CE33: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
    "RomeTW-BI.exe"+18CE39: D9 80 44 01 00 00  -  fld dword ptr [eax+00000144]
    "RomeTW-BI.exe"+18CE3F: D8 0D 98 4B FE 00  -  fmul dword ptr [RomeTW-BI.exe+BE4B98]
    "RomeTW-BI.exe"+18CE45: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
    "RomeTW-BI.exe"+18CE4B: D9 98 44 01 00 00  -  fstp dword ptr [eax+00000144]
    "RomeTW-BI.exe"+18CE51: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
    "RomeTW-BI.exe"+18CE57: 8B 8D 78 FF FF FF  -  mov ecx,[ebp-00000088]
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+18CE5D: D9 81 C4 00 00 00  -  fld dword ptr [ecx+000000C4]
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+18CE63: D9 98 4C 01 00 00  -  fstp dword ptr [eax+0000014C]
    "RomeTW-BI.exe"+18CE69: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
    "RomeTW-BI.exe"+18CE6F: 8B 80 E4 00 00 00  -  mov eax,[eax+000000E4]
    "RomeTW-BI.exe"+18CE75: 89 45 FC           -  mov [ebp-04],eax
    "RomeTW-BI.exe"+18CE78: 83 7D FC 00        -  cmp dword ptr [ebp-04],00
    "RomeTW-BI.exe"+18CE7C: 0F 84 DB 00 00 00  -  je RomeTW-BI.exe+18CF5D
    "RomeTW-BI.exe"+18CE82: A1 B4 17 92 02     -  mov eax,[RomeTW-BI.exe+25217B4]
    "RomeTW-BI.exe"+18CE87: 89 45 C0           -  mov [ebp-40],eax
    "RomeTW-BI.exe"+18CE8A: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
    "RomeTW-BI.exe"+18CE90: 05 4C 01 00 00     -  add eax,0000014C
    }
    
    {
    // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+ACF32
    
    "RomeTW-BI.exe"+ACF13: DF E0              -  fnstsw ax
    "RomeTW-BI.exe"+ACF15: 9E                 -  sahf
    "RomeTW-BI.exe"+ACF16: 73 1C              -  jae RomeTW-BI.exe+ACF34
    "RomeTW-BI.exe"+ACF18: FF 75 FC           -  push [ebp-04]
    "RomeTW-BI.exe"+ACF1B: 8B 4D 08           -  mov ecx,[ebp+08]
    "RomeTW-BI.exe"+ACF1E: E8 60 53 27 00     -  call RomeTW-BI.exe+322283
    "RomeTW-BI.exe"+ACF23: D9 80 7C 02 00 00  -  fld dword ptr [eax+0000027C]
    "RomeTW-BI.exe"+ACF29: D9 5D F0           -  fstp dword ptr [ebp-10]
    "RomeTW-BI.exe"+ACF2C: 8B 45 0C           -  mov eax,[ebp+0C]
    "RomeTW-BI.exe"+ACF2F: D9 45 F0           -  fld dword ptr [ebp-10]
    // ---------- INJECTING HERE ----------
    "RomeTW-BI.exe"+ACF32: D9 18              -  fstp dword ptr [eax]
    "RomeTW-BI.exe"+ACF34: EB A9              -  jmp RomeTW-BI.exe+ACEDF
    "RomeTW-BI.exe"+ACF36: C9                 -  leave
    // ---------- DONE INJECTING  ----------
    "RomeTW-BI.exe"+ACF37: C2 08 00           -  ret 0008
    "RomeTW-BI.exe"+ACF3A: 55                 -  push ebp
    "RomeTW-BI.exe"+ACF3B: 8B EC              -  mov ebp,esp
    "RomeTW-BI.exe"+ACF3D: 83 EC 18           -  sub esp,18
    "RomeTW-BI.exe"+ACF40: 89 4D EC           -  mov [ebp-14],ecx
    "RomeTW-BI.exe"+ACF43: 83 65 E8 00        -  and dword ptr [ebp-18],00
    "RomeTW-BI.exe"+ACF47: 83 65 FC 00        -  and dword ptr [ebp-04],00
    "RomeTW-BI.exe"+ACF4B: EB 07              -  jmp RomeTW-BI.exe+ACF54
    "RomeTW-BI.exe"+ACF4D: 8B 45 FC           -  mov eax,[ebp-04]
    "RomeTW-BI.exe"+ACF50: 40                 -  inc eax
    }

     

     

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

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

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