Перейти к содержанию
Авторизация  

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

Всем салют.

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

Спойлер

{ 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]

 

Поделиться сообщением


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

Привет! Если работает в скрипте СЕ, то в чем вопрос? )) 

 

ЗЫ. Но некоторое количество опкодов 90, как по мне, нагляднее ) 

Поделиться сообщением


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

fstp dword ptr [eax+00000130] замени Fld dword ptr [eax+00000130] так будет проще)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, krocki сказал:

fstp dword ptr [eax+00000130] замени Fld dword ptr [eax+00000130] так будет проще)))

Так ИМХО еще проще:

Спойлер

[ENABLE]
aobscan(BOMB,D9 98 30 01 00 00 D9 43)
alloc(newmem,$1000)
label(return)
registersymbol(BOMB)

BOMB:
  jmp return
  nop
return:

[DISABLE]
BOMB:
  db D9 98 30 01 00 00

unregistersymbol(BOMB)
dealloc(newmem)

 

 

Поделиться сообщением


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

А так будет еще лучше! и стек не сломаешь.

- fld1 <- на это
- fsubr dword ptr [eax+00000130]
- fstp dword ptr [eax+00000130]

 

db 90 90 DD D8 C7 80 30 01 00 00 00 00 80 3F  > patch
db D9 E8 D8 A8 30 01 00 00 D9 98 30 01 00 00  > original 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, LIRW сказал:

А так будет еще лучше! и стек не сломаешь.

там надо на fstp dword ptr [eax+00000130] ставить

fstp st0

nop [eax+eax]

 

или

fld1 < jmp
fsubr dword ptr [eax+00000130]
fstp dword ptr [eax+00000130]
fld dword ptr [ebx+30] <

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, gmz сказал:

ставить

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

Я тут в байт виде и написал.

fstp st(0)
mov dword [xxx+130],1.0

хотя как и писал выше - не знай, что он задумал.. и что там в функции. Но туда и 0 же писать можно и всё что угодно. Просто судил по fld1 значит 1.0 :D и вычитает. По этому и решил туда 1 вписать..

Поделиться сообщением


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

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

 

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

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

 

 

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

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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