Ладно, вброшу сюда свой low-level бред для начинающих.
Простейшая stdcall-ная функция установки хука на асме имеет вид:
Code:
mov eax, [esp + 0x0C]
lea eax, [eax + 0xE8]
mov ecx, [esp + 8]
mov edx, [esp + 4]
mov [edx], al
lea eax, [edx + 5]
sub ecx, eax
mov [edx + 1], ecx
ret 0xC
3 параметра: адрес для помещения хука, адрес dll-процедуры, тип хука (0 - call, 1 - jump).
Некоторые люди ещё юзают VirtualProtect до и после установки хука, но в Воге это не нужно.
Ещё бывает, что остаток изменённого кода затирают nop-ами, но мне лично это ни разу не понадобилось: call-ом обычно замещается тоже вызов функции, так что длина опкода остаётся той же, а jump позволяет всё равно прыгать после возврата на корректный адрес. Вообще, куда и как ставить хук - отдельная история, но сам стараюсь ставить так, чтобы он менял только 5 байт.
Ещё более минималистская форма (без процедуры) массовой установки хуков - из Drew.dll:
Code:
...
mov esi, offset Hook_Table
LoopHooks:
mov al, [esi+8]
mov ecx, [esi+4]
mov edx, [esi]
mov [edx], al
lea eax, [edx+5]
sub ecx, eax
mov [edx+1], ecx
add esi, 9
cmp esi, End_Hook_Table
jl LoopHooks
...
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
TJump equ 0E9h
TCall equ 0E8h
Hook MACRO ExeAdress, ProcDrew, TypeHook
dd ExeAdress
dd ProcDrew
db TypeHook
ENDM
Hook_Table:
; 1. ДИАЛОГ СТАРТОВЫХ ХАРАКТЕРИСТИК ГЕРОЯ
Hook 569DECh, StartHeroDialog, TCall
Hook 5826ACh, StartHeroDialog, TCall
Hook 5828C6h, StartHeroDialog, TCall
; 2. ОПЦИЯ ЗАПРЕТА ОТОБРАЖЕНИЯ ЭКРАНА ЗАГРУЗКИ КАРТЫ
Hook 4ED9E0h, change_LoadScreen, TJump
Hook 4EF83Ch, change_LoadScreen1, TJump
; 3. ВСТАВКА ТЕКСТА ИЗ БУФЕРА ОБМЕНА
Hook 5BB500h, MainKeyboard, TJump
; 4. ИМЕНА ИГРОКОВ ДЛЯ ХОТ-СИТА
Hook 51231Fh, MultiPlayerButtons, TJump
Hook 512221h, MultiPlayerload_file_10_mop, TJump
Hook 512276h, MultiPlayerStrings_realize, TJump
Hook 512696h, MultiPlayerDialogresult, TJump
Hook 50E229h, MultiPlayerInterdiction, TJump
; 5. УВЕЛИЧЕНИЕ КОЛИЧЕСТВА ЗАКЛИНАНИЙ В ИГРЕ
Hook 59CD5Bh, SpellsExpand1, TJump
Hook 4D8F77h, SpellsExpand2, TJump
Hook 4D8B6Ah, SpellsExpand3, TJump
Hook 4D95A8h, SpellsExpand4, TJump
End_Hook_Table:
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
|