ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   С++ 64bit dll - Inline Assembly (https://forum.antichat.xyz/showthread.php?t=1320990)

akatosh 31.03.2018 19:22

Появилась потребность перевести свой dll с 32 бит на 64 (т.к. для инъекции в x64 приложение нужна 64 битная dll).

Простые функции записи значения в адрес и изменения инструкции (например заполнение кода NOP'ами) перевелись и работают нормально, но на ассемблерную вставку (__asm) компилятор ругается - гугл говорит, что в VS 64 битной версии такой возможности нет. Но мне это нужно для инъекции кода.

Хотел бы узнать, как это все делается для 64 бит в Visual Studio?

P.S. Пример на 32 битной версии:

C++:





Код:

DWORD jumpBack
;
void
_declspec
(
naked
)
hpFilter
(
)
{
__asm
{
cmp
[
ebx
+
10
]
,
1
je sled
        mov
[
ebx
+
4
]
,
eax
        sled
:
fldz
        jmp
[
jumpBack
]
}
}
bool
Hook
(
void
*
toHook
,
void
*
ourFunct
,
int
len
)
{
DWORD curProtection
;
DWORD temp
;
VirtualProtect
(
toHook
,
len
,
PAGE_EXECUTE_READWRITE
,
&
curProtection
)
;
memset
(
toHook
,
0x90
,
len
)
;
DWORD relativeAddress
=
(
(
DWORD
)
ourFunct
-
(
DWORD
)
toHook
)
-
5
;
*
(
BYTE
*
)
toHook
=
0xE9
;
*
(
DWORD
*
)
(
(
DWORD
)
toHook
+
1
)
=
relativeAddress
;
VirtualProtect
(
toHook
,
len
,
curProtection
,
&
temp
)
;
return
true
;
}
.
.
.
if
(
GetAsyncKeyState
(
VK_NUMPAD1
)
)
{
DWORD hookAddress
=
(
(
uint32_t
)
BASEADDR
)
+
0x265B7
;
// Адрес инструкции ( mov [ebx+4],eax)
jumpBack
=
hookAddress
+
5
;
Hook
(
(
void
*
)
hookAddress
,
hpFilter
,
5
)
;
}
.
.
.


FYP 31.03.2018 20:51

проще всего перенести код хука в .asm файл


Время: 23:36