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

Как заменить код операции в скрипте на nop?


Рекомендуемые сообщения

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

 

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

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

{ 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. Если способ сделать эти действия (правка секций ручками) немного более автоматизированными?
Ссылка на комментарий
Поделиться на другие сайты

nop = 90 ( byte )

Чтобы вписать nop нужно вписать nop xD 
Либо в виде строки -> nop
Либо в виде байт -> db 90

Примечание: кол-во нопов должно быть равно кол-во байт инструкции.

 

1. Да.

2. Почему нет? Это же обычная сигнатура. Просто при активации ищется сигнатура и делается прыжок на 1 байт и после уже происходит инъекция.
3. Ты можешь убрать все но оставить лишь эти вещи -> 

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

[ENABLE]
aobscanmodule(INJECT,ailogic.dll,00 D9 96 A8 00 00 00)
INJECT+01:
  db 90 90 90 90 90 90
registersymbol(INJECT)
[DISABLE]
INJECT+01:
  db D9 96 A8 00 00 00
unregistersymbol(INJECT)

4. Да. Пиши скрипт для CE.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

11 час назад, SergBrNord сказал:

Если способ сделать эти действия (правка секций ручками) немного более автоматизированными?

В плагине, я добавлял этот скрипт. (см. п.6 - там как раз примеры скриптов с nop)

Ссылка на комментарий
Поделиться на другие сайты

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

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

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