SergBrNord Опубликовано 23 января, 2021 Поделиться Опубликовано 23 января, 2021 Всем салют. Ломая игру, у меня получился скрипт следующего вида: Спойлер { 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] Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 24 января, 2021 Поделиться Опубликовано 24 января, 2021 Привет! Если работает в скрипте СЕ, то в чем вопрос? )) ЗЫ. Но некоторое количество опкодов 90, как по мне, нагляднее ) Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 25 января, 2021 Поделиться Опубликовано 25 января, 2021 fstp dword ptr [eax+00000130] замени Fld dword ptr [eax+00000130] так будет проще))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 января, 2021 Поделиться Опубликовано 25 января, 2021 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) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 января, 2021 Поделиться Опубликовано 26 января, 2021 А так будет еще лучше! и стек не сломаешь. - 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 26 января, 2021 Поделиться Опубликовано 26 января, 2021 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] < Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 января, 2021 Поделиться Опубликовано 26 января, 2021 1 час назад, gmz сказал: ставить Ну так.. там всё поставлено и запись в +130 - сколько там ? 1 что ли. Хотя он не сказал даже что там Мне кажется его интересует именно подход СЕ вот с такими затираниями в строчку, а не столбик. Я тут в байт виде и написал. fstp st(0) mov dword [xxx+130],1.0 хотя как и писал выше - не знай, что он задумал.. и что там в функции. Но туда и 0 же писать можно и всё что угодно. Просто судил по fld1 значит 1.0 и вычитает. По этому и решил туда 1 вписать.. Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 14 февраля, 2021 Автор Поделиться Опубликовано 14 февраля, 2021 Прошу прощения за поздний ответ. В 26.01.2021 в 18:34, LIRW сказал: Ну так.. там всё поставлено и запись в +130 - сколько там ? 1 что ли. Хотя он не сказал даже что там Мне кажется его интересует именно подход СЕ вот с такими затираниями в строчку, а не столбик. Всё верно, просто стало интересно, какие ещё варианты могут быть. Происходит в этой функции игры следующее: есть какое-то количество бомб, при использовании которых это количество уменьшается на единицу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения