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

SergBrNord

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

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

  • Посещение

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

    12

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

  1. @LIRW оба варианта не взлетели.

    @Garik66 первый вариант не взлетел.  Насчёт fstp st(0) - не согласен, инструкция вполне рабочая. Использовал в своих скриптах раньше. Второй тоже не взлетел, в общем.

    @inaginary пробовал там всё нопить по порядку, нопы не срабатывали. Всё с запятыми, потому что количество ходов, отображается полоской в интерфейсе. И да, эти инструкции работают не только с игроком.

    @Antonshka не взлетело.

    @MasterGH  тоже не взлетело. Эх... =(

     

    Не знаю, правильно ли идею понял, но сделал так:

    Скрытый текст
    
    label(return)
    
    newmem:
    
    fstp dword ptr [eax+0000027C]
    
    mov [eax+c4], (float)80.0
    mov [ebp-14], (float)80.0
    mov [eax+27c], (float)80.0
    
    jmp return
    
    MOVEPOINTS2:
      jmp newmem
      nop
    return:
    registersymbol(MOVEPOINTS2)

     

     

  2. Всем салют. Копаюсь я тут (ничего не меняется, да? +0) в Rome: Total War - Barbarian Invasion. Копаюсь с эти куском кода:

     

    Скрытый текст
    
    "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

     

     

    Известно, что данная инструкция работает с количеством очков хода члена фракции на глобальной карте. Это значение с плавающей точкой и оно равняется 80. И у меня не получается записать нужное мне значение.

    Я пробовал так (не взлетело):

    Скрытый текст
    
    newmem:
    	mov [eax+27C], (float)80
    	fstp st(0)
    	fld dword ptr [eax+27C]
    code:
    	fstp dword ptr [eax+0000027C]
    	jmp return
    

     

     

    Я пробовал этак (тоже не взлетело):

    Скрытый текст
    
    newmem:
    	fstp dword ptr [eax+0000027C] //old
      	push [max_points]
      	pop [eax+27C]
    
    
    max_points:
    dd (float)80

     

     

    Спасите кто-нибудь, а? Я не понимаю, что тут не так сделано. Моск плавится.

  3. 7 часов назад, Garik66 сказал:

    Табличка:

    Работает, как скрипт на нулевую стоимость объектов. Как ты на эту инструкцию вышел? Я пробовал отсеивать по стоимости при  постройке, допустим, коридоров... но что-то у меня не вышло найти нужное....

     

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

     

      Показать содержимое
    
    
    [ENABLE]
    aobscanmodule(SuperCash,EvilGeniusExeStub-Release.exe,89 81 10 01 00 00 C2)
    alloc(newmem,$1000)
    label(return)
    newmem:
    mov eax,#1000000
    mov [ecx+00000110],eax
    jmp return
    SuperCash:
    jmp newmem
    db 90
    return:
    registersymbol(SuperCash)
    [DISABLE]
    SuperCash:
    db 89 81 10 01 00 00
    unregistersymbol(SuperCash)
    dealloc(newmem)

     

     

    Вот этот скрипт мне очень понравился. Сделан через анимацию штабелей с золотом. Анимацию ещё найти надо умудриться +)

     

    15 часов назад, LIRW сказал:
      Показать содержимое
    
    
    [ENABLE]
    aobscanmodule(Cash1,EvilGeniusExeStub-Release.exe,8B 86 A8 00 00 00 57 * * * * * * * * * * 89 86 A8 00 00 00)
    Cash1+0B:
      db B8 00 00 00 01 90
    registersymbol(Cash1)
    [DISABLE]
    Cash1+0B:
      db 3B F8 7F 0C 2B C7
    unregistersymbol(Cash1)

     

     

    А вот тут байты меня угнетают и требуются пояснения...

     

    Основная идея понятна. Заменяем 3 инструкции по 6 байт. B8 как "mov eax", дальше сдвигаем число и оставшийся байт заменяем "nop"... но редактор реагирует на это дело так, словно в память ноли пишутся....

     

     

     

  4. 11 час назад, Garik66 сказал:

    А  как ты проверял?

    Просто построил всего на 250 000 и значение сбросилось в 0. Собственно, как и в моих попытках — как только штабель золота закончился, деньги сбросилисть в ноль. Сейчас проверю новые скрипты из темы

    P.S.

    Вчера сильно устал, поэтому сразу после сообщения о нерабочих скриптах пошёл на боковую =)

  5. 12 часа назад, Garik66 сказал:

    И также: я просто, так как в игре по сути деньги нужны только для торговли с торговцами, я делал скрипт на покупку у них без денег. Это не сложно.

    Проверил предложенный тобой твой вариант - не сработало. Я думаю, деньги тут как объект, т.к. они отображаются в виде штабелей золота, которые увеличиваются и уменьшаются. И когда у меня совсем закончился штабель золота, деньги тут же в 0 сбросились.

  6. 11 час назад, Garik66 сказал:

    ...

    Похожа на Дьябло только в Дьябло кучки кратные 5000, а у тебя как видишь кратно 500 (000001F4). 

     

    Да, если 1800 будет, то положит 300 в ячейку с сотнями, а всё остальное запихнёт в основную, то есть там будет 1500.

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

     

    11 час назад, Garik66 сказал:
     
    
    
    newmem:
      add ebx, #1000000
    
    code:
      add [esi+000000A4],ebx
      jmp return

     

     

     

    Вроде бы делал что-то такое, но перепроверить не мешает.... 

     

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

    @SergBrNord, чисти табличку, перед выкладкой, от Анализов структур - у тебя она весит 806 KB, после чистки 6 KB

     

    Не знал, что CE сохраняет эти вещи. Собственно, в динамической памяти оно как-то и бесполезно.

  8. Всем салют!

    Засел ломать старенькую игрушку "Злобный Гений".

    Нашёл деньги; хранятся там они так: сотые в одной ячейке, больше сотых — в другой. Т.е. 19200 => 19000 и 200.

    Суть не в этом. После установки нужного количества денег, через N времени, количество денег всё же сбрасывается на действительное.

    И это при том, что я уверен, что использую реальное, не экранное значение.

    В общем, помогите кто понять, что идёт не так.

     

    Прилагаю таблицу

    Первая функция - добавляет денег при расходе;

    Вторая функция - добавляет денег при увеличении баланса (заработок с глобальной карты).

  9. Салют всем. Я тут внезапно понял, что упустил один аспект.

     

    Вот есть заготовка под скрипт:

    Скрытый текст
    
    { Game   : game.exe
      Version: 1.2
      Date   : 2017-10-14
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
     
    aobscanmodule(INJECT,ailogic.dll,00 D9 96 A8 00 00 00) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
    
    code:
      fst dword ptr [esi+000000A8]
      jmp return
    
    INJECT+01:
      jmp newmem
      nop
    return:
    registersymbol(INJECT)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    INJECT+01:
      db D9 96 A8 00 00 00
    
    unregistersymbol(INJECT)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "ailogic.dll"+924B1
    
    "ailogic.dll"+92487: BA 01 00 00 00     -  mov edx,00000001
    "ailogic.dll"+9248C: 8A 04 01           -  mov al,[ecx+eax]
    "ailogic.dll"+9248F: 88 44 24 68        -  mov [esp+68],al
    "ailogic.dll"+92493: 8B 4C 24 68        -  mov ecx,[esp+68]
    "ailogic.dll"+92497: 81 E1 FF 00 00 00  -  and ecx,000000FF
    "ailogic.dll"+9249D: 2B D1              -  sub edx,ecx
    "ailogic.dll"+9249F: 89 54 24 68        -  mov [esp+68],edx
    "ailogic.dll"+924A3: DB 44 24 68        -  fild dword ptr [esp+68]
    "ailogic.dll"+924A7: D8 4C 24 60        -  fmul dword ptr [esp+60]
    "ailogic.dll"+924AB: D8 AE A8 00 00 00  -  fsubr dword ptr [esi+000000A8]
    // ---------- INJECTING HERE ----------
    "ailogic.dll"+924B1: D9 96 A8 00 00 00  -  fst dword ptr [esi+000000A8]
    // ---------- DONE INJECTING  ----------
    "ailogic.dll"+924B7: D8 1D 3C DD AB 03  -  fcomp dword ptr [ailogic.dll+1CDD3C]
    "ailogic.dll"+924BD: DF E0              -  fnstsw ax
    "ailogic.dll"+924BF: F6 C4 41           -  test ah,41
    "ailogic.dll"+924C2: 0F 85 C6 00 00 00  -  jne ailogic.dll+9258E
    "ailogic.dll"+924C8: A1 44 64 C2 03     -  mov eax,[ailogic.dll+336444]
    "ailogic.dll"+924CD: 80 3C 38 01        -  cmp byte ptr [eax+edi],01
    "ailogic.dll"+924D1: 0F 84 B7 00 00 00  -  je ailogic.dll+9258E
    "ailogic.dll"+924D7: 8B 06              -  mov eax,[esi]
    "ailogic.dll"+924D9: 8B CE              -  mov ecx,esi
    "ailogic.dll"+924DB: FF 90 A4 01 00 00  -  call dword ptr [eax+000001A4]
    }

     

     

    Пошатавшись по форуму CE, я выяснил, что итоговый код должен выглядеть как-то так:

    Скрытый текст
    
    { Game   : game.exe
      Version: 1.2
      Date   : 2017-10-14
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
     
    aobscanmodule(INJECT,ailogic.dll,00 D9 96 A8 00 00 00) // should be unique
    
    registersymbol(INJECT)
    INJECT+01:
      db 90 90 90 90 90 90
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    INJECT+01:
      db D9 96 A8 00 00 00
    
    unregistersymbol(INJECT)
    
    
    {
    // ORIGINAL CODE - INJECTION POINT: "ailogic.dll"+924B1
    
    "ailogic.dll"+92487: BA 01 00 00 00     -  mov edx,00000001
    "ailogic.dll"+9248C: 8A 04 01           -  mov al,[ecx+eax]
    "ailogic.dll"+9248F: 88 44 24 68        -  mov [esp+68],al
    "ailogic.dll"+92493: 8B 4C 24 68        -  mov ecx,[esp+68]
    "ailogic.dll"+92497: 81 E1 FF 00 00 00  -  and ecx,000000FF
    "ailogic.dll"+9249D: 2B D1              -  sub edx,ecx
    "ailogic.dll"+9249F: 89 54 24 68        -  mov [esp+68],edx
    "ailogic.dll"+924A3: DB 44 24 68        -  fild dword ptr [esp+68]
    "ailogic.dll"+924A7: D8 4C 24 60        -  fmul dword ptr [esp+60]
    "ailogic.dll"+924AB: D8 AE A8 00 00 00  -  fsubr dword ptr [esi+000000A8]
    // ---------- INJECTING HERE ----------
    "ailogic.dll"+924B1: D9 96 A8 00 00 00  -  fst dword ptr [esi+000000A8]
    // ---------- DONE INJECTING  ----------
    "ailogic.dll"+924B7: D8 1D 3C DD AB 03  -  fcomp dword ptr [ailogic.dll+1CDD3C]
    "ailogic.dll"+924BD: DF E0              -  fnstsw ax
    "ailogic.dll"+924BF: F6 C4 41           -  test ah,41
    "ailogic.dll"+924C2: 0F 85 C6 00 00 00  -  jne ailogic.dll+9258E
    "ailogic.dll"+924C8: A1 44 64 C2 03     -  mov eax,[ailogic.dll+336444]
    "ailogic.dll"+924CD: 80 3C 38 01        -  cmp byte ptr [eax+edi],01
    "ailogic.dll"+924D1: 0F 84 B7 00 00 00  -  je ailogic.dll+9258E
    "ailogic.dll"+924D7: 8B 06              -  mov eax,[esi]
    "ailogic.dll"+924D9: 8B CE              -  mov ecx,esi
    "ailogic.dll"+924DB: FF 90 A4 01 00 00  -  call dword ptr [eax+000001A4]
    }

     

     

    У меня несколько вопросов:

    1. Адекватно ли я заменил? =)
    2. Будет ли "INJECT+01" нормально работать, т.к. в примерах на CE такого не рассматривалось?
    3. Можно ли в данном случае убрать из секции [ENABLE] всё под меткой "code" и в секцию "newmem" вставить инструкции "nop"?
    4. Если способ сделать эти действия (правка секций ручками) немного более автоматизированными?
  10. Всем привед!

    В перерывах между работой поигрываю в первый Блицкриг. И ломаю.

    На текущий момент поломал количество основного и вторичного вооружения, но застопорился на ХП.

    Не могу найти где хранится:

    1. Максимальное здоровье боевой единицы;
    2. Метка игрока и ИИ.

     

    Прилагаю таблицу, чтобы помогающие не теряли много времени. Самый последний скрипт работает с ХП игрока и противника.

     

    Таблица

    • Плюс 1
  11. Всем опять и снова привед!

    Продолжаем мучать старенькую игрушку "Гарри Поттер и Философский камень" =)

     

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

    Вот так это выглядит:

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

    8594833.jpg

     

    Ломаем таймер в нижнем углу. За таймер отвечают три значения: 

    • закрашивание полоски красным цветом, тип float, реализовано декрементацией (~14->0);
    • скорость воспроизведения звука часов, тип float, реализовано декрементацией (~14->0);
    • сам таймер, тип float, реализовано инкрементацией (0->~14).

     

    Окно обращений инструкций:

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

    8600977.jpg

     

    8597905.jpg

     

    Во всех трёх инструкциях работа идёт с одним и тем же адресом; под адресу не структура, а значение.

     

    Листинг кода №1:

    Скрытый текст
    
    "Core.dll"+6D964: 8B 54 24 04           -  mov edx,[esp+04]
    "Core.dll"+6D968: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6D96A: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6D96C: C2 08 00              -  ret 0008
    "Core.dll"+6D96F: 90                    -  nop 
    "Core.dll"+6D970: 8B 49 34              -  mov ecx,[ecx+34]
    "Core.dll"+6D973: 83 F9 01              -  cmp ecx,01
    "Core.dll"+6D976: 75 0F                 -  jne Core.dll+6D987
    "Core.dll"+6D978: 8B 44 24 08           -  mov eax,[esp+08]
    "Core.dll"+6D97C: 8B 54 24 04           -  mov edx,[esp+04]
    // ---------- INJECTING HERE ----------
    "Core.dll"+6D980: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6D982: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6D984: C2 08 00              -  ret 0008
    // ---------- DONE INJECTING  ----------
    "Core.dll"+6D987: 85 C9                 -  test ecx,ecx
    "Core.dll"+6D989: 7E 0E                 -  jle Core.dll+6D999
    "Core.dll"+6D98B: 56                    -  push esi
    "Core.dll"+6D98C: 8B 74 24 0C           -  mov esi,[esp+0C]
    "Core.dll"+6D990: 57                    -  push edi
    "Core.dll"+6D991: 8B 7C 24 0C           -  mov edi,[esp+0C]
    "Core.dll"+6D995: F3 A5                 - repe  movsd 
    "Core.dll"+6D997: 5F                    -  pop edi
    "Core.dll"+6D998: 5E                    -  pop esi
    "Core.dll"+6D999: C2 08 00              -  ret 0008

     

     

     

    Листинг кода №2 (инструкции рядом):

    Скрытый текст
    
    "Core.dll"+38D77: C7 44 24 10 00 00 00 00        -  mov [esp+10],00000000
    "Core.dll"+38D7F: 8D 4C 24 10                    -  lea ecx,[esp+10]
    "Core.dll"+38D83: 8A 10                          -  mov dl,[eax]
    "Core.dll"+38D85: 40                             -  inc eax
    "Core.dll"+38D86: 51                             -  push ecx
    "Core.dll"+38D87: 8B 4E 08                       -  mov ecx,[esi+08]
    "Core.dll"+38D8A: 56                             -  push esi
    "Core.dll"+38D8B: 89 46 0C                       -  mov [esi+0C],eax
    "Core.dll"+38D8E: FF 14 95 68 55 1E 10           -  call dword ptr [edx*4+Core.dll+E5568]
    "Core.dll"+38D95: D9 44 24 10                    -  fld dword ptr [esp+10]
    
    
    "Core.dll"+38D99: D8 07                          -  fadd dword ptr [edi]
    "Core.dll"+38D9B: 8B 46 0C                       -  mov eax,[esi+0C]
    
    
    "Core.dll"+38D9E: 8B 54 24 14                    -  mov edx,[esp+14]
    "Core.dll"+38DA2: 40                             -  inc eax
    "Core.dll"+38DA3: 89 46 0C                       -  mov [esi+0C],eax
    
    
    "Core.dll"+38DA6: D9 17                          -  fst dword ptr [edi]
    
    
    "Core.dll"+38DA8: D9 1A                          -  fstp dword ptr [edx]
    "Core.dll"+38DAA: 5F                             -  pop edi
    "Core.dll"+38DAB: 5E                             -  pop esi
    "Core.dll"+38DAC: 59                             -  pop ecx
    "Core.dll"+38DAD: C2 08 00                       -  ret 0008
    "Core.dll"+38DB0: 8B 0D 00 9A 1E 10              -  mov ecx,[Core.dll+E9A00]

     

     

    И вопросы, которые меня мучают:

    1. Если писать скрипт, то, НЯП, надо работать со стеком, так как показывал srg91; т.е. заместить значение, вкладываемое инструкцией "fld dword ptr [esp+10]"?
    2. Если работать со стеком, что будет правильнее в использовании – просто положить в стеке значение сверху или вытолкнуть и затем положить своё?
    3. Как тут организовать фильтр?
    4. При заморозке адреса таймер, подсчёт очков начинает работать некорректно. Каким образом это может быть завязано на таймер?

     

    Как работает корректный подсчёт – игрок рисует изображение по контуру мышкой, не открывая ЛКМ до завершения, а затем игра повторяет его движение и выставляет очки.

    Как работает некорректный подсчёт – игрок рисует изображение по контуру мышкой, не открывая ЛКМ до завершения, а затем игра не повторяет движение, а соединяет две конечных точки.

     

    Вот так это выглядит:

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

    8588689.jpg

    Т.е. тут что-то вроде запоминания положения курсора в определённой точке относительно таймера?

     

    P.S.

    Игрушка сделана на Unreal Engine, может кого на мысль натолкнёт =)

  12. 14 минуты назад, Garik66 сказал:

    Отлично.

    И по поводу фильтра продолжу.

    Что ещё можно выцепить из ЛОГОВ (Хвала Дарк Байту):

    1. Инструкция работает только с Гарри:

    
    cmp ecx,01                // Это и есть ID Гарри - он первый :)
    jne Core.dll+6D987

    2. Соответственно, уверен на 90 % ID характеристик Гарри будут ещё в каком то регистре при срабатывания, т.е. ПКМ по инструкции, смотрим значения регистров адресов и находим ID здоровья, урона и т.д. и т.л.

    И пишем на этой инструкции не только GodMod/  

     "В угол" . Garik66

    1. Да, я видел эту инструкцию, но никакой толковой мысли не возникло, кроме "На кой здесь с единичкой сравнивают?" =)

    2. Тут так много чего пишется в регистры. Скорее всего, завтра ещё одна тема будет с тупыми вопросами типа "как это готовить?"

     

  13. 1 час назад, Garik66 сказал:

    Ты этот вариант проверил?

    Проверил. Не работает.

     

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

    1 скрипт:

      Показать содержимое
    
    
    { Game   : game.exe
      Version: 1.0
      Date   : 2017-04-30
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(HEALTH,Core.dll,D9 18 59 C2 08 00 90 8B 0D 00 9A 1E 10 33 D2 3B CA B8 4B 1F 10 10 75 18 57 B9 00 10 00 00 BF 68 55 1E 10 C7 05 00 9A 1E 10 01 00 00 00 F3 AB 5F 39 05 3C 59 1E 10 74 1B) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
     fstp dword ptr [eax]  //Old instruction
     cmp [eax+4],(float) 50 //50
     jne code
     mov [eax], (float)50
    
    code:
      pop ecx
      ret 0008
      jmp return
    
    HEALTH:
      jmp newmem
      nop
    return:
    registersymbol(HEALTH)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    HEALTH:
      db D9 18 59 C2 08 00
    
    unregistersymbol(HEALTH)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "Core.dll"+39709
    
    "Core.dll"+396EC: DF E0                          -  fnstsw ax
    "Core.dll"+396EE: F6 C4 01                       -  test ah,01
    "Core.dll"+396F1: 75 0E                          -  jne Core.dll+39701
    "Core.dll"+396F3: D9 44 24 00                    -  fld dword ptr [esp+00]
    "Core.dll"+396F7: 8B 54 24 0C                    -  mov edx,[esp+0C]
    "Core.dll"+396FB: D9 1A                          -  fstp dword ptr [edx]
    "Core.dll"+396FD: 59                             -  pop ecx
    "Core.dll"+396FE: C2 08 00                       -  ret 0008
    "Core.dll"+39701: D9 44 24 08                    -  fld dword ptr [esp+08]
    "Core.dll"+39705: 8B 44 24 0C                    -  mov eax,[esp+0C]
    // ---------- INJECTING HERE ----------
    "Core.dll"+39709: D9 18                          -  fstp dword ptr [eax]
    "Core.dll"+3970B: 59                             -  pop ecx
    "Core.dll"+3970C: C2 08 00                       -  ret 0008
    // ---------- DONE INJECTING  ----------
    "Core.dll"+3970F: 90                             -  nop 
    "Core.dll"+39710: 8B 0D 00 9A 1E 10              -  mov ecx,[Core.dll+E9A00]
    "Core.dll"+39716: 33 D2                          -  xor edx,edx
    "Core.dll"+39718: 3B CA                          -  cmp ecx,edx
    "Core.dll"+3971A: B8 4B 1F 10 10                 -  mov eax,Core.dll+1F4B
    "Core.dll"+3971F: 75 18                          -  jne Core.dll+39739
    "Core.dll"+39721: 57                             -  push edi
    "Core.dll"+39722: B9 00 10 00 00                 -  mov ecx,00001000
    "Core.dll"+39727: BF 68 55 1E 10                 -  mov edi,Core.dll+E5568
    "Core.dll"+3972C: C7 05 00 9A 1E 10 01 00 00 00  -  mov [Core.dll+E9A00],00000001
    }

     

    И второй:

      Показать содержимое
    
    
    { Game   : game.exe
      Version: 1.0
      Date   : 2017-04-30
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(HEALTH,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 04 D9 00 EB 06) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      cmp [eax+4], (float)50 //50
      jne code
      mov ecx, [eax+4]
      mov [eax],ecx
     
    code:
      mov ecx,[eax]
      mov [edx],ecx
      ret 0008
      jmp return
    
    HEALTH:
      jmp newmem
      nop
      nop
    return:
    registersymbol(HEALTH)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    HEALTH:
      db 8B 08 89 0A C2 08 00
    
    unregistersymbol(HEALTH)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "Core.dll"+6D980
    
    "Core.dll"+6D964: 8B 54 24 04           -  mov edx,[esp+04]
    "Core.dll"+6D968: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6D96A: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6D96C: C2 08 00              -  ret 0008
    "Core.dll"+6D96F: 90                    -  nop 
    "Core.dll"+6D970: 8B 49 34              -  mov ecx,[ecx+34]
    "Core.dll"+6D973: 83 F9 01              -  cmp ecx,01
    "Core.dll"+6D976: 75 0F                 -  jne Core.dll+6D987
    "Core.dll"+6D978: 8B 44 24 08           -  mov eax,[esp+08]
    "Core.dll"+6D97C: 8B 54 24 04           -  mov edx,[esp+04]
    // ---------- INJECTING HERE ----------
    "Core.dll"+6D980: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6D982: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6D984: C2 08 00              -  ret 0008
    // ---------- DONE INJECTING  ----------
    "Core.dll"+6D987: 85 C9                 -  test ecx,ecx
    "Core.dll"+6D989: 7E 0E                 -  jle Core.dll+6D999
    "Core.dll"+6D98B: 56                    -  push esi
    "Core.dll"+6D98C: 8B 74 24 0C           -  mov esi,[esp+0C]
    "Core.dll"+6D990: 57                    -  push edi
    "Core.dll"+6D991: 8B 7C 24 0C           -  mov edi,[esp+0C]
    "Core.dll"+6D995: F3 A5                 - repe  movsd 
    "Core.dll"+6D997: 5F                    -  pop edi
    "Core.dll"+6D998: 5E                    -  pop esi
    "Core.dll"+6D999: C2 08 00              -  ret 0008
    }

     

     

     "В угол" . Garik66

    По 1 скрипту – интерпритатор ругался на:

    cmp [eax+4],(float) 50 //50

    Поправил на:

     mov [eax], (float)50

    Также не сработал.

     

    По 2 скрипту – во время первого здоровье прибавилось, но после получения урона игра крашнулась (я насиловал игру несколькими скриптами подряд). 

    Во время второго запуска - полёт нормальный.

     

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

    Вот переделал скрипт, он ничего не трогает, кроме EBX. проверь крашанётся игра при активации:

      Показать содержимое
    
    
    aobscanmodule(HEALTH,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 04 D9 00 EB 06) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      cmp [eax+4], 32 //50
      jne code
      xor ebx, ebx
    
    code:
      mov ecx,[eax]
      mov [edx],ecx
      ret 0008
      jmp return
    
    HEALTH:
      jmp newmem
      nop
      nop
    return:
    registersymbol(HEALTH)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    HEALTH:
      db 8B 08 89 0A C2 08 00
    
    unregistersymbol(HEALTH)
    dealloc(newmem)

     

     

    Нет, не крашнулось

     

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

    Так ПКМ по инструкции в отладчике и посмотри сколько во сколько адресов ты записал (float)50

    Данный конкретный случай - инструкция работает по 5 адресам.

  15. 5 минут назад, Garik66 сказал:

    Ты этот вариант проверил?

    Сейчас указатель на таймер найду и опробую.

     

    4 минуты назад, srg91 сказал:

     

    Норм, на всяких Пивзах и Волан-де-Мортах работает без фильтрации.

    А есть уровни с мобами? У меня какой-то супер дебаг режим включен, он и в окне запускается и могу по уровням прыгать.

    Попробую поискать еще отдельных мобов, не боссов.

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

    P.S.

    У тебя, скорее всего, консоль включена. Это как-то через файлы конфигурации производится.

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

    2. В честь чего ты используешь EBX по логам не видно же свободный он или нет, скорее всего после ret 008 значение из EBX используется, но зато ты смело мог использовать ЕСХ.

     

    Ответ на 1 вопрос, поправлю скрипт..

     

     

    Он пустой. Там ничего нет на момент срабатывания инструкции. Если бы что-то было, вложил бы в стек.

  17. 8 минут назад, srg91 сказал:

    Эти инструкции работают со стеком FPU, стеком хранящим и оперирующим значениями с плавающей точкой.

    В CE его можно увидеть во время дебаггинга - справа в окне регистров будет кнопка со стрелкой ">":

     

    Возможно фильтры будут нужны, но у меня есть сохранение только уже на Волан де Морте, поэтому проверить быстро не могу :D

    1. При попытке запустить в окошке эта собака крашится.

    2. https://cloud.mail.ru/public/FxZJ/VXcMsjAB5 

    Сэйвы: бежим вперёд и огребаем; просто кинуть в документы; в архиве 2 варианта.

  18. Всем привед!

    Продолжаю ломать старенькую игрушку "Гарри Поттер и Философский камень" =)

    Сейчас взламываю здоровье. И возникла проблема с инструкцией fstp. НЯЗ, эта инструкция перемещает из регистра ST  данные в регистр-цель. И вот как работать с этим регистром ST?

     

    Вот что я пытался провернуть (в структуре, находящейся в eax по смещению 4 – максимальное здоровье, в начале – текущее здоровье; всё типа float; инструкция работает с несколькими адресами, поэтому присутствует фильтр):

     

    Скрытый текст
    
    { Game   : game.exe
      Version: 1.0
      Date   : 2017-04-30
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(HEALTH,Core.dll,D9 18 59 C2 08 00 90 8B 0D 00 9A 1E 10 33 D2 3B CA B8 4B 1F 10 10 75 18 57 B9 00 10 00 00 BF 68 55 1E 10 C7 05 00 9A 1E 10 01 00 00 00 F3 AB 5F 39 05 3C 59 1E 10 74 1B) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
     fstp dword ptr [eax]  //Old instruction
     cmp [eax+4], 32 //50
     jne code
     mov [eax], (float)50
    
    code:
      pop ecx
      ret 0008
      jmp return
    
    HEALTH:
      jmp newmem
      nop
    return:
    registersymbol(HEALTH)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    HEALTH:
      db D9 18 59 C2 08 00
    
    unregistersymbol(HEALTH)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "Core.dll"+39709
    
    "Core.dll"+396EC: DF E0                          -  fnstsw ax
    "Core.dll"+396EE: F6 C4 01                       -  test ah,01
    "Core.dll"+396F1: 75 0E                          -  jne Core.dll+39701
    "Core.dll"+396F3: D9 44 24 00                    -  fld dword ptr [esp+00]
    "Core.dll"+396F7: 8B 54 24 0C                    -  mov edx,[esp+0C]
    "Core.dll"+396FB: D9 1A                          -  fstp dword ptr [edx]
    "Core.dll"+396FD: 59                             -  pop ecx
    "Core.dll"+396FE: C2 08 00                       -  ret 0008
    "Core.dll"+39701: D9 44 24 08                    -  fld dword ptr [esp+08]
    "Core.dll"+39705: 8B 44 24 0C                    -  mov eax,[esp+0C]
    // ---------- INJECTING HERE ----------
    "Core.dll"+39709: D9 18                          -  fstp dword ptr [eax]
    "Core.dll"+3970B: 59                             -  pop ecx
    "Core.dll"+3970C: C2 08 00                       -  ret 0008
    // ---------- DONE INJECTING  ----------
    "Core.dll"+3970F: 90                             -  nop 
    "Core.dll"+39710: 8B 0D 00 9A 1E 10              -  mov ecx,[Core.dll+E9A00]
    "Core.dll"+39716: 33 D2                          -  xor edx,edx
    "Core.dll"+39718: 3B CA                          -  cmp ecx,edx
    "Core.dll"+3971A: B8 4B 1F 10 10                 -  mov eax,Core.dll+1F4B
    "Core.dll"+3971F: 75 18                          -  jne Core.dll+39739
    "Core.dll"+39721: 57                             -  push edi
    "Core.dll"+39722: B9 00 10 00 00                 -  mov ecx,00001000
    "Core.dll"+39727: BF 68 55 1E 10                 -  mov edi,Core.dll+E5568
    "Core.dll"+3972C: C7 05 00 9A 1E 10 01 00 00 00  -  mov [Core.dll+E9A00],00000001
    }

     

     

    P.S.

    Вариант с использованием инструкции fstp возник после неудачи с этой попыткой:

    Скрытый текст
    
    { Game   : game.exe
      Version: 1.0
      Date   : 2017-04-30
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(HEALTH,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 04 D9 00 EB 06) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      cmp [eax+4], 32 //50
      jne code
      mov ebx, [eax+4]
      mov [eax], ebx
      xor ebx, ebx
    
    code:
      mov ecx,[eax]
      mov [edx],ecx
      ret 0008
      jmp return
    
    HEALTH:
      jmp newmem
      nop
      nop
    return:
    registersymbol(HEALTH)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    HEALTH:
      db 8B 08 89 0A C2 08 00
    
    unregistersymbol(HEALTH)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "Core.dll"+6D980
    
    "Core.dll"+6D964: 8B 54 24 04           -  mov edx,[esp+04]
    "Core.dll"+6D968: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6D96A: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6D96C: C2 08 00              -  ret 0008
    "Core.dll"+6D96F: 90                    -  nop 
    "Core.dll"+6D970: 8B 49 34              -  mov ecx,[ecx+34]
    "Core.dll"+6D973: 83 F9 01              -  cmp ecx,01
    "Core.dll"+6D976: 75 0F                 -  jne Core.dll+6D987
    "Core.dll"+6D978: 8B 44 24 08           -  mov eax,[esp+08]
    "Core.dll"+6D97C: 8B 54 24 04           -  mov edx,[esp+04]
    // ---------- INJECTING HERE ----------
    "Core.dll"+6D980: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6D982: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6D984: C2 08 00              -  ret 0008
    // ---------- DONE INJECTING  ----------
    "Core.dll"+6D987: 85 C9                 -  test ecx,ecx
    "Core.dll"+6D989: 7E 0E                 -  jle Core.dll+6D999
    "Core.dll"+6D98B: 56                    -  push esi
    "Core.dll"+6D98C: 8B 74 24 0C           -  mov esi,[esp+0C]
    "Core.dll"+6D990: 57                    -  push edi
    "Core.dll"+6D991: 8B 7C 24 0C           -  mov edi,[esp+0C]
    "Core.dll"+6D995: F3 A5                 - repe  movsd 
    "Core.dll"+6D997: 5F                    -  pop edi
    "Core.dll"+6D998: 5E                    -  pop esi
    "Core.dll"+6D999: C2 08 00              -  ret 0008
    }

     

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

  19. В 25.04.2017в13:17, Garik66 сказал:

    :D Игра, после отключения скрипта - не вылетала? 

    Нет. 0 реакции, побегал, поиграл – без проблем.

     

    P.S.

    Это привет от CE остался.

  20. 2 минуты назад, what228 сказал:

    Потому что ("BEANS+6380DA8") означает прыжок на "6380DA8" байт после чего идет инъекция в том месте.
    Тебе нужно удалить ("
    +6380DA8").

    Уже дошло. НЯП, нужно удалить в двух местах:

    Скрытый текст
    
    BEANS:
      jmp newmem
      nop
      nop
    return:
    registersymbol(BEANS)
    
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    BEANS:
      db 8B 08 89 0A C2 08 00

     

     

  21. 1 час назад, Garik66 сказал:

    Качнул версию -- Релиз группы: R.G.Creative -- Автор репака: K0RW1N

    Плагин или вручную.

    Вроде сработал, вот он что дал:

      Показать содержимое
    
    
    { Game   : HP.exe
      Version: 1.0
      Date   : 04-25-17
      Author : Garik66
      This script does blah blah blah
      
      Make by aamaker Lua plagin :)
      Link - http://forum.gamehacklab.ru/index.php?/files/file/329-ce-plugin-aa-maker/
    }
    [ENABLE]
    aobscanmodule(Primer,Core.FRegistryObjectInfo::FRegistryObjectInfo+69899,8bxx89xxc2xxxx85xx7exxxx8bxxxxxxxx8bxxxxxxf3xxxxxxc2xxxxxxxxxxxx8bxxxxxx85xx74xx8bxxxxxx8bxxxx33xx8bxx3bxxxx0f94xx8bxxc2xxxx8bxxxxxxxx33xx33xx8bxx3bxxxx0f94xx8bxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxx6a)
    alloc(newmem,$1000)
    label(code)
    label(return)
    registersymbol(Primer)
    
    newmem:
    
    code:
    	
    	mov ecx,[eax]
    	mov [edx],ecx
    	ret 0008
    	jmp return
    
    Primer:
    	jmp newmem
    	nop
    	nop
    return:
    
    [DISABLE]
    Primer:
    	db 8B 08 89 0A C2 08 00
    
    unregistersymbol(Primer)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: Core.FRegistryObjectInfo::FRegistryObjectInfo+68FED
    
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FD7: 8B 5D 08  - mov ebx,[ebp+08]
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDA: 0FAF C3  - imul eax,ebx
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDD: 8B 56 48  - mov edx,[esi+48]
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE0: 03 C2  - add eax,edx
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE2: 3B F9  - cmp edi,ecx
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE4: 74 03 - je 1016C690
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE6: 8D 0C 38   - lea ecx,[eax+edi]
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE9: 8B 16  - mov edx,[esi]
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEB: 51 - push ecx
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEC: 8B 4D 10  - mov ecx,[ebp+10]
    // ---------- INJECTING HERE ----------
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEF: 03 C1  - add eax,ecx
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF1: 8B CE  - mov ecx,esi
    // ---------- DONE INJECTING  ----------
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF3: 50 - push eax
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF4: FF 52 70  - call dword ptr [edx+70]
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF7: 85 C0  - test eax,eax
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF9: 74 18 - je 1016C6BA
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFB: 33 C0  - xor eax,eax
    Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFD: 8B 4D F4  - mov ecx,[ebp-0C]
    Core.FRegistryObjectInfo::FRegistryObjectInfo+69000: 64 89 0D 00000000  - mov fs:[00000000],ecx
    Core.FRegistryObjectInfo::FRegistryObjectInfo+69007: 5F - pop edi
    Core.FRegistryObjectInfo::FRegistryObjectInfo+69008: 5E - pop esi
    Core.FRegistryObjectInfo::FRegistryObjectInfo+69009: 5B - pop ebx
    }

     

    SergBrNord, потесть, полученную сигну. 

     

    У меня полная антология от R.G.Recoding, но сигнатура подошла как родная.

    А вот что я получил (делал ручками):

    Скрытый текст
    
    { Game   : game.exe
      Version: 1.0
      Date   : 2017-04-24
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
    aobscanmodule(BEANS,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 16 8B XX XX XX 8B XX 56 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 8B XX XX XX 56 33 XX 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 90 90 90 90 90 90 90 90 90 90 90 90 8B XX XX XX 8B XX XX XX 6A 04 52 8B XX FF XX XX C2 XX XX) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      cmp [eax+10], 65 //101
      jne code
      cmp [flag], 0
      jne code
      mov [eax], C8 //200
      mov [flag], 1
    
    code:
      mov ecx,[eax]
      mov [edx],ecx
      ret 0008
      jmp return
    
    flag:
      db 0
    
    BEANS+6380DA8:
      jmp newmem
      nop
      nop
    return:
    registersymbol(BEANS)
    
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    BEANS+6380DA8:
      db 8B 08 89 0A C2 08 00
    
    unregistersymbol(BEANS)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "Core.dll"+6CF40
    
    "Core.dll"+6CF24: 8B 54 24 04           -  mov edx,[esp+04]
    "Core.dll"+6CF28: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6CF2A: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6CF2C: C2 08 00              -  ret 0008
    "Core.dll"+6CF2F: 90                    -  nop 
    "Core.dll"+6CF30: 8B 49 34              -  mov ecx,[ecx+34]
    "Core.dll"+6CF33: 83 F9 01              -  cmp ecx,01
    "Core.dll"+6CF36: 75 0F                 -  jne Core.dll+6CF47
    "Core.dll"+6CF38: 8B 44 24 08           -  mov eax,[esp+08]
    "Core.dll"+6CF3C: 8B 54 24 04           -  mov edx,[esp+04]
    // ---------- INJECTING HERE ----------
    "Core.dll"+6CF40: 8B 08                 -  mov ecx,[eax]
    "Core.dll"+6CF42: 89 0A                 -  mov [edx],ecx
    "Core.dll"+6CF44: C2 08 00              -  ret 0008
    // ---------- DONE INJECTING  ----------
    "Core.dll"+6CF47: 85 C9                 -  test ecx,ecx
    "Core.dll"+6CF49: 7E 0E                 -  jle Core.dll+6CF59
    "Core.dll"+6CF4B: 56                    -  push esi
    "Core.dll"+6CF4C: 8B 74 24 0C           -  mov esi,[esp+0C]
    "Core.dll"+6CF50: 57                    -  push edi
    "Core.dll"+6CF51: 8B 7C 24 0C           -  mov edi,[esp+0C]
    "Core.dll"+6CF55: F3 A5                 - repe  movsd 
    "Core.dll"+6CF57: 5F                    -  pop edi
    "Core.dll"+6CF58: 5E                    -  pop esi
    "Core.dll"+6CF59: C2 08 00              -  ret 0008
    }

     

     

    Что интересно, после доработки сигнатуры, место в коде находится точно, но переход не прописывается никак.

    Вот как это выглядит:

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

    8553989.jpg

     

     

     

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

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

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