SergBrNord Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Всем привед! Продолжаю ломать старенькую игрушку "Гарри Поттер и Философский камень" =) Сейчас взламываю здоровье. И возникла проблема с инструкцией 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 } Почему-то не срабатывает и отладить не могу - при попытке запустить игру в окне крашится напрочь. Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 (изменено) Эти инструкции работают со стеком FPU, стеком хранящим и оперирующим значениями с плавающей точкой. В CE его можно увидеть во время дебаггинга - справа в окне регистров будет кнопка со стрелкой ">": Spoiler Собственно значения в этом окне и будут st(0), st(1) и т.д. Подебажив увидишь как они изменяются. Инструкция fstp dword ptr [eax] которую ты нашел - это запись здоровья из регистра st(0) в Health структуры игрока. Причем можно заметить, что попадает он в st(0) буквально на инструкцию выше - из fld dword ptr [esp+08] - эта инструкция берет значение из стека и пушит его в стек FPU. Из этого следует, что где-то раньше взяли твое текущее здоровье, отняли его и записали в [esp+08]. Можно попытаться найти это место, а можно просто после fstp (в целом я думаю можно даже не делать fstp) сделать push [MAX_HEALTH] и pop [eax]. Увы mov [eax],[MAX_HEALTH] сделать нельзя, поэтому приходится через push. Но ты можешь сделать и fld [MAX_HEALTH] и fstp [eax]. Возможно фильтры будут нужны, но у меня есть сохранение только уже на Волан де Морте, поэтому проверить быстро не могу Быстроскрипт без aobscan и фильтров: Spoiler [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,64) label(returnhere) label(originalcode) label(exit) label(max_health) newmem: //this is allocated memory, you have read,write,execute access //place your code here originalcode: fstp dword ptr [eax] // записываем всегда 50, ничего не вычитаем push [max_health] pop [eax] pop ecx ret 0008 exit: jmp returnhere max_health: dd (float)50 "Core.dll"+39709: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "Core.dll"+39709: fstp dword ptr [eax] pop ecx ret 0008 //Alt: db D9 18 59 C2 08 00 Изменено 30 апреля, 2017 пользователем srg91 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 53 минуты назад, SergBrNord сказал: Почему-то не срабатывает 1. Потому что значение НР у тебя во float как я понял, судя по первому скрипту. Или в этой инструкции оно 4 байта? 2. В честь чего ты используешь EBX по логам не видно же свободный он или нет, скорее всего после ret 008 значение из EBX используется, но зато ты смело мог использовать ЕСХ. Ответ на 1 вопрос, поправлю скрипт.. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Короче, если во FLOAТ, то можно так: Скрытый текст newmem: cmp [eax+4], 32 //50 jne code fild [eax+4] fstp [eax] code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 30 апреля, 2017 Автор Поделиться Опубликовано 30 апреля, 2017 (изменено) 8 минут назад, srg91 сказал: Эти инструкции работают со стеком FPU, стеком хранящим и оперирующим значениями с плавающей точкой. В CE его можно увидеть во время дебаггинга - справа в окне регистров будет кнопка со стрелкой ">": Возможно фильтры будут нужны, но у меня есть сохранение только уже на Волан де Морте, поэтому проверить быстро не могу 1. При попытке запустить в окошке эта собака крашится. 2. https://cloud.mail.ru/public/FxZJ/VXcMsjAB5 Сэйвы: бежим вперёд и огребаем; просто кинуть в документы; в архиве 2 варианта. Изменено 30 апреля, 2017 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 30 апреля, 2017 Автор Поделиться Опубликовано 30 апреля, 2017 7 минут назад, Garik66 сказал: 2. В честь чего ты используешь EBX по логам не видно же свободный он или нет, скорее всего после ret 008 значение из EBX используется, но зато ты смело мог использовать ЕСХ. Ответ на 1 вопрос, поправлю скрипт.. Он пустой. Там ничего нет на момент срабатывания инструкции. Если бы что-то было, вложил бы в стек. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Только что, SergBrNord сказал: Он пустой. Ты этот вариант проверил? Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 4 minutes ago, SergBrNord said: При попытке запустить в окошке эта собака крашится. Норм, на всяких Пивзах и Волан-де-Мортах работает без фильтрации. А есть уровни с мобами? У меня какой-то супер дебаг режим включен, он и в окне запускается и могу по уровням прыгать. Попробую поискать еще отдельных мобов, не боссов. Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 30 апреля, 2017 Автор Поделиться Опубликовано 30 апреля, 2017 (изменено) 5 минут назад, Garik66 сказал: Ты этот вариант проверил? Сейчас указатель на таймер найду и опробую. 4 минуты назад, srg91 сказал: Норм, на всяких Пивзах и Волан-де-Мортах работает без фильтрации. А есть уровни с мобами? У меня какой-то супер дебаг режим включен, он и в окне запускается и могу по уровням прыгать. Попробую поискать еще отдельных мобов, не боссов. Есть, там, где в теплицу чешешь, это сразу после Пивза. В лабиринте есть как и растения хищные, так и гнумы в секретках. P.S. У тебя, скорее всего, консоль включена. Это как-то через файлы конфигурации производится. Изменено 30 апреля, 2017 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 1 час назад, SergBrNord сказал: cmp [eax+4], 32 //50 jne code Ну и использование MAX характеристик ГГ в качестве фильтра не совсем корректно (не учи плохому новичков ). Это может в Гарри Поттере. только у него здоровье 50 и он не развивается далее по игре, в других же играх не так. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 9 минут назад, SergBrNord сказал: Он пустой. Там ничего нет на момент срабатывания инструкции. Если бы что-то было, вложил бы в стек. Вот переделал скрипт, он ничего не трогает, кроме 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) Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 (изменено) 58 minutes ago, SergBrNord said: Есть, там, где в теплицу чешешь, это сразу после Пивза Да, слушай, можешь без фильтров - гномы умирают, улитки засыпают, хп не уменьшается. Просто записывай в [eax] после fstp 50 во флоате и будет отлично: Да, через следующую запись хп не уменьшается, но нужно использовать фильтры, чтобы выйти на хп игрока, а не на иную характеристику: fstp dword ptr [eax] // записываем всегда 50, ничего не вычитаем push (float)50 pop [eax] Изменено 30 апреля, 2017 пользователем srg91 Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Привет! На игру есть чит-коды, попробуй от них найти код. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 11 минуту назад, srg91 сказал: Да, слушай, можешь без фильтров @srg91, так же нельзя. Судя по игровому коду это контейнер, т.е. инструкция работает со многими адресами. Если другие не умирают, то скорее всего работает с характеристиками Гарри, но не только с НР. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 1 час назад, SergBrNord сказал: 4 – максимальное здоровье, в начале – текущее здоровье; всё типа float; Как я понял у тебя макс НР тоже во флоат, тогда у тебя первый скрипт не верный и моя поправка тоже. Нужно так: 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 } 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 6 minutes ago, Garik66 said: так же нельзя Ну, если есть возможность или делаешь не для себя, то конечно. Но если чисто игру пройти, то мне кажется можно и так. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Только что, srg91 сказал: Но если чисто игру пройти, то мне кажется можно и так. Так поплывут характеристики, они могут быть и в 4 байта, а ты везде пишешь 50 во float. Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Just now, Garik66 said: Так поплывут характеристики, они могут быть и в 4 байта, а ты везде пишешь 50 во float. Никто же не спорит. Я сразу и написал, что возможно понадобятся фильтры, но в целом по игре побегал и значимых изменений не вижу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Так ПКМ по инструкции в отладчике и посмотри сколько во сколько адресов ты записал (float)50 Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 30 апреля, 2017 Автор Поделиться Опубликовано 30 апреля, 2017 (изменено) 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 адресам. Изменено 30 апреля, 2017 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 1 minute ago, SergBrNord said: Данный конкретный случай - инструкция работает по 5 адресам. Довольно забавно, у меня только ГГ и изредко появляющийся адрес, который использовался 2 раза. В любом случае я не спорю, что нужны фильтры, я вообще начал описывать что за fstp, просто решил попробовать побегать с простой записью и отписал по результатам. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 Только что, SergBrNord сказал: Данный конкретный случай - 5 адресов. Так как инструкция на запись не все адреса сразу сработают, не которые будут срабатывать во время действий в игре. Ну например, если нырнуть в воду, и Гарри в игре может задыхаться, появиться запас кислорода наверное, если ударить, то физ урон, если кастануть закл, то урон закла ит.д.. Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 30 апреля, 2017 Автор Поделиться Опубликовано 30 апреля, 2017 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 скрипту – во время первого здоровье прибавилось, но после получения урона игра крашнулась (я насиловал игру несколькими скриптами подряд). Во время второго запуска - полёт нормальный. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2017 Поделиться Опубликовано 30 апреля, 2017 6 минут назад, SergBrNord сказал: Во время второго запуска - полёт нормальный. Отлично. И по поводу фильтра продолжу. Что ещё можно выцепить из ЛОГОВ (Хвала Дарк Байту): 1. Инструкция работает только с Гарри: cmp ecx,01 // Это и есть ID Гарри - он первый :) jne Core.dll+6D987 2. Соответственно, уверен на 90 % ID характеристик Гарри будут ещё в каком то регистре при срабатывания, т.е. ПКМ по инструкции, смотрим значения регистров адресов и находим ID здоровья, урона и т.д. и т.л. И пишем на этой инструкции не только GodMod/ 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 30 апреля, 2017 Автор Поделиться Опубликовано 30 апреля, 2017 14 минуты назад, Garik66 сказал: Отлично. И по поводу фильтра продолжу. Что ещё можно выцепить из ЛОГОВ (Хвала Дарк Байту): 1. Инструкция работает только с Гарри: cmp ecx,01 // Это и есть ID Гарри - он первый :) jne Core.dll+6D987 2. Соответственно, уверен на 90 % ID характеристик Гарри будут ещё в каком то регистре при срабатывания, т.е. ПКМ по инструкции, смотрим значения регистров адресов и находим ID здоровья, урона и т.д. и т.л. И пишем на этой инструкции не только GodMod/ "В угол" . Garik66 1. Да, я видел эту инструкцию, но никакой толковой мысли не возникло, кроме "На кой здесь с единичкой сравнивают?" =) 2. Тут так много чего пишется в регистры. Скорее всего, завтра ещё одна тема будет с тупыми вопросами типа "как это готовить?" Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения