 |

12.02.2026, 20:55
|
|
Новичок
Регистрация: 03.01.2026
Сообщений: 0
С нами:
192549
Репутация:
0
|
|
C:
Код:
format PE64 GUI
4.0
DLL
entry DllEntryPoint
include
'C:\FLAT\INCLUDE\win64ax.inc'
section
'.data'
data writeable
Message db
"hack"
,
0
caption db
"hook"
,
0
user32_dll db
"user32.dll"
,
0
function db
"MessageBoxA"
,
0
dosHeader dq
0
ntHeaders dq
0
section
'.text'
code executable
proc DllEntryPoint hinstDLL
,
reason
,
reserved
cmp edx
,
1
jne
.
skip
call installIAT
.
skip
:
mov eax
,
1
ret
endp
// тут хук ставлю без возврата оригинала, для проверки
proc HookMessageBoxA hWnd
,
lpText
,
lpCaption
,
uType
sub rsp
,
28
h
xor rcx
,
rcx
lea rdx
,
[
Message
]
lea r8
,
[
caption
]
xor r9
,
r9
call
[
MessageBoxA
]
add rsp
,
28
h
endp
// парсинг IAT
installIAT
:
sub rsp
,
28
h
xor rcx
,
rcx
call
[
GetModuleHandle
]
mov
[
dosHeader
]
,
rax
mov edi
,
dword
[
rax
+
3
Ch
]
add rax
,
rdi
mov
[
ntHeaders
]
,
rax
mov eax
,
dword
[
rax
+
90
h
]
add rax
,
[
dosHeader
]
mov rsi
,
rax
.
dll_loop
:
mov eax
,
dword
[
rsi
+
12
h
]
test eax
,
eax
jz
.
error
mov rdi
,
[
dosHeader
]
add rdi
,
rax
mov rbx
,
[
dosHeader
]
add ebx
,
dword
[
rsi
+
10
h
]
.
loop_IAT
:
invoke GetProcAddress
,
,
function
cmp
[
rbx
]
,
rax
je
.
patch
add rbx
,
8
jmp
.
loop_IAT
.
patch
:
lea r9
,
[
ntHeaders
]
mov rcx
,
rbx
mov rdx
,
8
mov r8
,
40
h
call
[
VirtualProtect
]
lea rax
,
[
HookMessageBoxA
]
mov
[
rbx
]
,
rax
jmp
.
error
.
error
:
add rsp
,
28
h
ret
section
'.idata'
import data readable
library kernel32
,
'KERNEL32.DLL'
,
\
user32
,
'USER32.DLL'
import kernel32
,
\
GetModuleHandle
,
'GetModuleHandleA'
,
\
GetProcAddress
,
'GetProcAddress'
,
\
VirtualProtect
,
'VirtualProtect'
import user32
,
\
MessageBoxA
,
'MessageBoxA'
section
'.reloc'
fixups data readable discardable
Всем привет.
Вопрос, почему не хукается?
IAT спарсил я вроде правильно.
Заранее благодарен если кто поможет решить.
|
|
|

12.02.2026, 22:28
|
|
Постоянный
Регистрация: 01.09.2019
Сообщений: 378
С нами:
3526561
Репутация:
0
|
|
Gemfory сказал(а):
Вопрос, почему не хукается?
1. Нужна секция экспорта в DLL, иначе она не загрузится в процесс родителя.
2. Если до ".loop_IAT" всё нормально, то сохраняйте регистр RBX на входе, т.к. GetProcAddress() и VirtualProtect() могут его испортить.
3. Посмотрите, что происходит в отладчике x64dbg. Предварительно зайдите в его параметры, и установите чекбокс на "UserDllEntry".
4. На вкладке "Карта памяти" отладчика можно узнать, по какому адресу загрузилась ваша либа, и правой клавишей перейти в её дизасм.листинг, чтобы поставить куда-нибудь бряк.
|
|
|

12.02.2026, 23:13
|
|
Новичок
Регистрация: 03.01.2026
Сообщений: 0
С нами:
192549
Репутация:
0
|
|
Marylin сказал(а):
1. Нужна секция экспорта в DLL, иначе она не загрузится в процесс родителя.
2. Если до ".loop_IAT" всё нормально, то сохраняйте регистр RBX на входе, т.к. GetProcAddress() и VirtualProtect() могут его испортить.
3. Посмотрите, что происходит в отладчике x64dbg. Предварительно зайдите в его параметры, и установите чекбокс на "UserDllEntry".
4. На вкладке "Карта памяти" отладчика можно узнать, по какому адресу загрузилась ваша либа, и правой клавишей перейти в её дизасм.листинг, чтобы поставить куда-нибудь бряк.
Спасибо вам огромное, пофиксил.
|
|
|

12.02.2026, 23:34
|
|
Постоянный
Регистрация: 01.09.2019
Сообщений: 378
С нами:
3526561
Репутация:
0
|
|
В хвосте процедуры "HookMessageBoxA" после
поставьте
.
Да и
в ней отфутболивает непонятно куда.
В общем нужно в отладчике смотреть..
|
|
|

12.02.2026, 23:59
|
|
Постоянный
Регистрация: 01.09.2019
Сообщений: 378
С нами:
3526561
Репутация:
0
|
|
Короче вот такой вариант работает..
Свою dll загружайте в процесс динамически
,
а проблема была внутри
Код:
proc HookMessageBoxA
:
C-подобный:
Код:
format PE64 GUI
4.0
DLL
entry DllEntryPoint
include
'win64ax.inc'
section
'.data'
data writeable
Message db
"hack"
,
0
Caption db
"hook"
,
0
user32_dll db
"user32.dll"
,
0
function
db
"MessageBoxA"
,
0
dosHeader dq
0
ntHeaders dq
0
section
'.text'
code executable
proc DllEntryPoint hinstDLL
,
reason
,
reserved
cmp edx
,
1
jne
.
skip
call installIAT
.
skip
:
mov eax
,
1
ret
endp
;
//--------------
proc HookMessageBoxA hWnd
,
lpText
,
lpCaption
,
uType
mov rax
,
[
rsp
]
push rbp rax
invoke MessageBoxA
,
0
,
Message
,
Caption
,
0
ret
endp
;
//--------------
installIAT
:
sub rsp
,
28
h
xor rcx
,
rcx
call
[
GetModuleHandle
]
mov
[
dosHeader
]
,
rax
mov edi
,
dword
[
rax
+
3
Ch
]
add rax
,
rdi
mov
[
ntHeaders
]
,
rax
mov eax
,
dword
[
rax
+
90
h
]
add rax
,
[
dosHeader
]
mov rsi
,
rax
.
dll_loop
:
mov eax
,
dword
[
rsi
+
12
h
]
test eax
,
eax
jz
.
error
mov rdi
,
[
dosHeader
]
add rdi
,
rax
mov rbx
,
[
dosHeader
]
add ebx
,
dword
[
rsi
+
10
h
]
.
loop_IAT
:
invoke GetProcAddress
,
,
function
cmp
[
rbx
]
,
rax
je
.
patch
add rbx
,
8
jmp
.
loop_IAT
.
patch
:
lea r9
,
[
ntHeaders
]
mov rcx
,
rbx
mov rdx
,
8
mov r8
,
40
h
call
[
VirtualProtect
]
lea rax
,
[
HookMessageBoxA
]
mov
[
rbx
]
,
rax
.
error
:
add rsp
,
28
h
ret
;
//------------------------------------
section
'.idata'
import data readable
library kernel32
,
'KERNEL32.DLL'
,
\
user32
,
'USER32.DLL'
import kernel32
,
\
GetModuleHandle
,
'GetModuleHandleA'
,
\
GetProcAddress
,
'GetProcAddress'
,
\
VirtualProtect
,
'VirtualProtect'
import user32
,
\
MessageBoxA
,
'MessageBoxA'
section
'.reloc'
fixups data readable discardable
|
|
|

13.02.2026, 00:22
|
|
Новичок
Регистрация: 03.01.2026
Сообщений: 0
С нами:
192549
Репутация:
0
|
|
Marylin сказал(а):
Короче вот такой вариант работает..
Свою dll загружайте в процесс динамически
,
а проблема была внутри
Код:
proc HookMessageBoxA
:
C-подобный:
Код:
format PE64 GUI
4.0
DLL
entry DllEntryPoint
include
'win64ax.inc'
section
'.data'
data writeable
Message db
"hack"
,
0
Caption db
"hook"
,
0
user32_dll db
"user32.dll"
,
0
function
db
"MessageBoxA"
,
0
dosHeader dq
0
ntHeaders dq
0
section
'.text'
code executable
proc DllEntryPoint hinstDLL
,
reason
,
reserved
cmp edx
,
1
jne
.
skip
call installIAT
.
skip
:
mov eax
,
1
ret
endp
;
//--------------
proc HookMessageBoxA hWnd
,
lpText
,
lpCaption
,
uType
mov rax
,
[
rsp
]
push rbp rax
invoke MessageBoxA
,
0
,
Message
,
Caption
,
0
ret
endp
;
//--------------
installIAT
:
sub rsp
,
28
h
xor rcx
,
rcx
call
[
GetModuleHandle
]
mov
[
dosHeader
]
,
rax
mov edi
,
dword
[
rax
+
3
Ch
]
add rax
,
rdi
mov
[
ntHeaders
]
,
rax
mov eax
,
dword
[
rax
+
90
h
]
add rax
,
[
dosHeader
]
mov rsi
,
rax
.
dll_loop
:
mov eax
,
dword
[
rsi
+
12
h
]
test eax
,
eax
jz
.
error
mov rdi
,
[
dosHeader
]
add rdi
,
rax
mov rbx
,
[
dosHeader
]
add ebx
,
dword
[
rsi
+
10
h
]
.
loop_IAT
:
invoke GetProcAddress
,
,
function
cmp
[
rbx
]
,
rax
je
.
patch
add rbx
,
8
jmp
.
loop_IAT
.
patch
:
lea r9
,
[
ntHeaders
]
mov rcx
,
rbx
mov rdx
,
8
mov r8
,
40
h
call
[
VirtualProtect
]
lea rax
,
[
HookMessageBoxA
]
mov
[
rbx
]
,
rax
.
error
:
add rsp
,
28
h
ret
;
//------------------------------------
section
'.idata'
import data readable
library kernel32
,
'KERNEL32.DLL'
,
\
user32
,
'USER32.DLL'
import kernel32
,
\
GetModuleHandle
,
'GetModuleHandleA'
,
\
GetProcAddress
,
'GetProcAddress'
,
\
VirtualProtect
,
'VirtualProtect'
import user32
,
\
MessageBoxA
,
'MessageBoxA'
section
'.reloc'
fixups data readable discardable
Боже, спасибо огромное, помогло.
Дня два искал фикс, ставить хуки на ассемблере это конечно тот еще кошмар, особенно муторство с ABI...
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|