Я пытаюсь внедрить 64-битную DLL в 64-битный процесс (проводник по этому вопросу).
Я пытался использовать методы Remote-thread \ Window Hooks, но некоторые антивирусы обнаруживают мой загрузчик как ложныйположительный.
После прочтения этой статьи: Dll Injection от Darawk , я решил использовать кодовые пещеры.
Он отлично работал для 32-битных, но потому что VS не поддерживает встроенную сборку для 64-битных, которые у меня быличтобы писать оп-коды и операнды в явном виде.
Я смотрел на эту статью: 64-битное внедрение с использованием пещеры кода , как говорится в статье, есть некоторые различия:
Здесь есть несколько отличий:
- MASM64 использует fastcall, поэтому аргумент функции должен передаваться в регистре, а не в стеке.
- Длина адресов - 32 против 64 бит - должна быть принята во внимание.
- MASM64 не имеет инструкции, которая помещает все регистры в стек (например, pushad в 32-битной системе), поэтому это должно было быть сделано путем явного нажатия всех регистров.
Я следовал этим рекомендациям и запустил пример статьи, но ничего из того, что я сделал, не сработало.
В тот момент, когда я возобновил основной поток, произошел сбой целевого процесса, и я этого не сделалзнать, как на самом деле разобраться в этом, потому что у ollydbg нет поддержки 64 бит.
Вот как выглядит код до того, как я его ввел:
codeToInject:
000000013FACD000 push 7741933Ah
000000013FACD005 pushfq
000000013FACD006 push rax
000000013FACD007 push rcx
000000013FACD008 push rdx
000000013FACD009 push rbx
000000013FACD00A push rbp
000000013FACD00B push rsi
000000013FACD00C push rdi
000000013FACD00D push r8
000000013FACD00F push r9
000000013FACD011 push r10
000000013FACD013 push r11
000000013FACD015 push r12
000000013FACD017 push r13
000000013FACD019 push r14
000000013FACD01B push r15
000000013FACD01D mov rcx,2CA0000h
000000013FACD027 mov rax,76E36F80h
000000013FACD031 call rax
000000013FACD033 pop r15
000000013FACD035 pop r14
000000013FACD037 pop r13
000000013FACD039 pop r12
000000013FACD03B pop r11
000000013FACD03D pop r10
000000013FACD03F pop r9
000000013FACD041 pop r8
000000013FACD043 pop rdi
000000013FACD044 pop rsi
000000013FACD045 pop rbp
000000013FACD046 pop rbx
000000013FACD047 pop rdx
000000013FACD048 pop rcx
000000013FACD049 pop rax
000000013FACD04A popfq
000000013FACD04B ret
Мне кажется, это нормально, но я предполагаю, что что-то упустил.
Мой полный код можно найти здесь: Исходный код
Любые идеи \ предложения \ альтернативы?