Partizan Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 (изменено) Есть игра Loop Hero она сделана в game maker*е Поэтому всё хранится как double. Вопрос в том как работать с double через стек? С float всё понятно fld fstp Выкрутился так Спойлер [ENABLE] aobscanmodule(_Hp,Loop Hero.exe,89 04 ? e8 ? ? ? ? 83 c4 ? 85 c0 7e ? c7 46 2c) alloc(newmem,$1000) label(doub) label(return) registersymbol(doub) registersymbol(_Hp) newmem: movsd xmm2,[doub] movsd [eax],xmm2 xorpd xmm2,xmm2 mov [esp],eax call "Loop Hero.exe"+16FC210 jmp return doub: dq (double)1000 _Hp: jmp newmem nop 3 return: [DISABLE] _Hp: db 89 04 24 E8 18 E0 AC 00 unregistersymbol(doub) unregistersymbol(_Hp) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Loop Hero.exe+C2E1F0 Loop Hero.exe+C2E1AF: C7 46 38 00 00 00 00 - mov [esi+38],00000000 Loop Hero.exe+C2E1B6: C7 86 68 05 00 00 A6 00 00 00 - mov [esi+00000568],000000A6 Loop Hero.exe+C2E1C0: F3 0F 7E 05 28 9B BB 01 - movq xmm0,["Loop Hero.exe"+1B69B28] Loop Hero.exe+C2E1C8: C7 46 2C 4A 00 00 00 - mov [esi+2C],0000004A Loop Hero.exe+C2E1CF: 83 EC 14 - sub esp,14 Loop Hero.exe+C2E1D2: 8B 86 EC 01 00 00 - mov eax,[esi+000001EC] Loop Hero.exe+C2E1D8: 66 0F D6 44 24 08 - movq [esp+08],xmm0 Loop Hero.exe+C2E1DE: C7 44 24 10 01 00 00 00 - mov [esp+10],00000001 Loop Hero.exe+C2E1E6: 89 44 24 04 - mov [esp+04],eax Loop Hero.exe+C2E1EA: 8B 86 10 01 00 00 - mov eax,[esi+00000110] // ---------- INJECTING HERE ---------- Loop Hero.exe+C2E1F0: 89 04 24 - mov [esp],eax // ---------- DONE INJECTING ---------- Loop Hero.exe+C2E1F3: E8 18 E0 AC 00 - call "Loop Hero.exe"+16FC210 Loop Hero.exe+C2E1F8: 83 C4 14 - add esp,14 Loop Hero.exe+C2E1FB: 85 C0 - test eax,eax Loop Hero.exe+C2E1FD: 7E 30 - jle "Loop Hero.exe"+C2E22F Loop Hero.exe+C2E1FF: C7 46 2C 4A 00 00 00 - mov [esi+2C],0000004A Loop Hero.exe+C2E206: FF 35 20 E7 C4 01 - push ["Loop Hero.exe"+1BFE720] Loop Hero.exe+C2E20C: E8 EF E1 AB 00 - call "Loop Hero.exe"+16EC400 Loop Hero.exe+C2E211: 83 C4 04 - add esp,04 Loop Hero.exe+C2E214: 8B 8E 10 01 00 00 - mov ecx,[esi+00000110] Loop Hero.exe+C2E21A: FF B6 EC 01 00 00 - push [esi+000001EC] } xmm2 изначально был равен нулю как в [eax] правильно записать 1000 double???? Изменено 11 марта, 2021 пользователем Partizan Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 33 минуты назад, Partizan сказал: Вопрос в том как работать с double через стек? Через какой стек? Стек FPU? fld qword ptr, например. 34 минуты назад, Partizan сказал: как в [eax] правильно записать 1000 double???? сначала в фпу стек загоняешь дабл, а затем пишешь его fstp qword ptr [eax] Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 1 час назад, Partizan сказал: как в [eax] правильно записать 1000 double???? тебе же не в [eax]. нужно а в eax вроде Спойлер newmem: // movsd xmm2,[doub] - т.е. // movsd [eax],xmm2 - не // xorpd xmm2,xmm2 - так movsd eax,[doub] mov [esp],eax Зы: хотя не так Попробуй так: Спойлер mov eax,(float)1000 mov [esp],eax Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 13 минут назад, Garik66 сказал: movsd eax,[doub] Хорошая попытка затолкать 8 байт в 4-байтный регистр. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 2 минуты назад, Xipho сказал: Хорошая попытка затолкать 8 байт в 4-байтный регистр. :))) я поправился просто больше смотрел на [eax] Ссылка на комментарий Поделиться на другие сайты Поделиться
Partizan Опубликовано 11 марта, 2021 Автор Поделиться Опубликовано 11 марта, 2021 Всем спасибо. вот так сработало fld qword ptr [doub] fstp qword ptr [eax] просто если не указать qword ptr СЕ думает что это float в этом и был весь затык а так это тепер рабочий скрипт для Loop hero версии 1.0 Спойлер [ENABLE] aobscanmodule(_Hp,Loop Hero.exe,89 04 ? e8 ? ? ? ? 83 c4 ? 85 c0 7e ? c7 46 2c) alloc(newmem,$1000) label(doub) label(return) registersymbol(doub) registersymbol(_Hp) newmem: fld qword ptr [doub] fstp qword ptr [eax] mov [esp],eax call "Loop Hero.exe"+16FC210 jmp return doub: dq (double)1000 _Hp: jmp newmem nop 3 return: [DISABLE] _Hp: db 89 04 24 E8 18 E0 AC 00 unregistersymbol(doub) unregistersymbol(_Hp) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Loop Hero.exe+C2E1F0 Loop Hero.exe+C2E1AF: C7 46 38 00 00 00 00 - mov [esi+38],00000000 Loop Hero.exe+C2E1B6: C7 86 68 05 00 00 A6 00 00 00 - mov [esi+00000568],000000A6 Loop Hero.exe+C2E1C0: F3 0F 7E 05 28 9B BB 01 - movq xmm0,["Loop Hero.exe"+1B69B28] Loop Hero.exe+C2E1C8: C7 46 2C 4A 00 00 00 - mov [esi+2C],0000004A Loop Hero.exe+C2E1CF: 83 EC 14 - sub esp,14 Loop Hero.exe+C2E1D2: 8B 86 EC 01 00 00 - mov eax,[esi+000001EC] Loop Hero.exe+C2E1D8: 66 0F D6 44 24 08 - movq [esp+08],xmm0 Loop Hero.exe+C2E1DE: C7 44 24 10 01 00 00 00 - mov [esp+10],00000001 Loop Hero.exe+C2E1E6: 89 44 24 04 - mov [esp+04],eax Loop Hero.exe+C2E1EA: 8B 86 10 01 00 00 - mov eax,[esi+00000110] // ---------- INJECTING HERE ---------- Loop Hero.exe+C2E1F0: 89 04 24 - mov [esp],eax // ---------- DONE INJECTING ---------- Loop Hero.exe+C2E1F3: E8 18 E0 AC 00 - call "Loop Hero.exe"+16FC210 Loop Hero.exe+C2E1F8: 83 C4 14 - add esp,14 Loop Hero.exe+C2E1FB: 85 C0 - test eax,eax Loop Hero.exe+C2E1FD: 7E 30 - jle "Loop Hero.exe"+C2E22F Loop Hero.exe+C2E1FF: C7 46 2C 4A 00 00 00 - mov [esi+2C],0000004A Loop Hero.exe+C2E206: FF 35 20 E7 C4 01 - push ["Loop Hero.exe"+1BFE720] Loop Hero.exe+C2E20C: E8 EF E1 AB 00 - call "Loop Hero.exe"+16EC400 Loop Hero.exe+C2E211: 83 C4 04 - add esp,04 Loop Hero.exe+C2E214: 8B 8E 10 01 00 00 - mov ecx,[esi+00000110] Loop Hero.exe+C2E21A: FF B6 EC 01 00 00 - push [esi+000001EC] } Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 4 минуты назад, Partizan сказал: а так это тепер рабочий скрипт т.е. все-таки [еах]. Вот когда не полная информация :))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2021 Поделиться Опубликовано 11 марта, 2021 11 минут назад, Partizan сказал: просто если не указать qword ptr СЕ думает что это float В СЕ по умолчанию [ ] - это 4 байта Если нужно другое то нужно указывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Partizan Опубликовано 11 марта, 2021 Автор Поделиться Опубликовано 11 марта, 2021 Почему писал в [eax] а не в [esp] Я уже говорил игра на гейм мейкере. Поэтому в инструкции на теже хп куча адресов Поэтому поставил трейс с условием ESI==0x0CEF17F0 Если крутить вниз и следить за регистрами то наткнёмся на это В регистре еах будет адресс хп. И инструкция работает только с одним адрессом Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения