Дмитрий
Ну, судя по информации в гугле - вышла.
Сергей
Аналогично тоже ищу
Сергей
Пока старую читаю
Дмитрий
Аа
Сергей
Anonymous
push rcx
push rdx
push r8
mov rcx, ImageBase
mov rdx, DLL_PROCESS_ATTACH
mov r8, ImageSize
sub rsp, 0x28
mov rax, DllMain
call rax
add rsp, 0x28
pop r8
pop rdx
pop rcx
push rbx
push rsi
mov rsi, OriginalFunction
call rsi
mov rbx, pFunction
mov [rbx], rsi
pop rsi
pop rbx
ret
данный шеллкод должен вызывать x64 DllMain, вызвать абстрактную оригинальную функцию OriginalFunction, и заменить значение указателя pFunction на OriginalFunction. Все тут намально, все арги сохранены, итп?
Anonymous
просто чекните плез
Anonymous
r9 может ещё сохранить. на случай если в дллмейн что-то вызывается с >=4 параметрами его может перезаписать
Anonymous
push r9
Anonymous
OriginalFunction = PeekMessage ?
Anonymous
еще короче
Anonymous
допустим это PeekMessage, тогда у неё 5 аргов, последний на стеке
Anonymous
скорее всего ваще рандомная функция
Anonymous
Надо перед её вызовом стек поправить
Anonymous
а зачем его править если по факту я его не трогал
Anonymous
хотя стоп
Anonymous
Ну как я понял, была апи да, пускай PeekMessage, ты выставил хук верно?
Anonymous
её кто-то вызвал, в духе:
Anonymous
PeekMessage(1,2,3,4,5)
Anonymous
дада
Anonymous
Попало на твой шеллкод, 5ый арг на стеке ща
Anonymous
Ты делаешь пуши
Anonymous
а вызвался бы moishellkod(12345)
Anonymous
понял к чему
Anonymous
5ый арг на стеке проёбывается
Anonymous
Перед вызовом оригинал надо к rsp добавит скока там
Anonymous
16?
Anonymous
изза пуш рси, пуш рбх
Anonymous
?
Anonymous
Ну да. Их можно пушнуть, но перед вызовом стек поправить надо
Anonymous
а если их не пушить то все намально
Anonymous
?
Anonymous
rdx, rcx, r8, r9 это первые 4 арга остальное на стеке
Anonymous
Если их не пушить, то по идее надо добавить еще 8 к стеку. Потому что был 1 колл, но он попал на шеллкод. PeekMessage должен доставать арг пятый из стека как [rsp+28] по идее. Ну то есть идёт аргумент, потом на стеке шадоу спейс. Получается перед вызовом PeekMessage стек на шадов указывать должен
Anonymous
потом туда сверху при call ляжет адрес возврата
Anonymous
поскольку тут уже был вызов шеллкода ща ситуация такая
Anonymous
адрес возврата
шадов который создал вызыватель
аргумент PeekMessage
Anonymous
и при call OriginalFunction ещё один адрес возврата добавится
Anonymous
смотри, при ret поидее адрес возврата удаляется, не?
Anonymous
да
Anonymous
стек фиксится там
Anonymous
получается.. два пуша
Anonymous
плюс адр возврата
Anonymous
24 байта
Anonymous
а вот смотри, гетмессейдж имеет меньше параметров, 4.. получается если юзать гетмессейдж, то для него этот шеллкод будет валиден
Anonymous
Впринципе да
Anonymous
Да на самом деле и Peek прокатит
Anonymous
Там последний арг это инт
Anonymous
Просто он отработает некорректно, но не крашнет ниче
Anonymous
угу, понял. вообще же поидее я хуй могу забить на эти два пуша и просто не делать их. rbx и rsi - не юзаются под арги и сохранять восстанавливать их смысла нет(лол)
Anonymous
Ну впринципе да
Anonymous
бывает апи сами сохраняют арги если модифицируют
Anonymous
аа хмм
Anonymous
вообще по идее может быть такое, что код вызывющий дальше будет с rbx/rsi работать а они перезаписаны
Anonymous
лучше восстановить
Anonymous
а ты сделай через rax
Anonymous
а в rax return value
Anonymous
какой то третий регистр типо rbx все равно понадобится
Anonymous
да, написано RBX, RSI, RDI должны быть сохранены вызываемой функцией
Anonymous
mov rax, orig
;add rsp,8 опционально
call rax
;sub rsp,8
push rbx
push rsi
mov rsi,orig
mov rbx,pfunc
mov rbx,rsi
pop rsi
pop rbx
Anonymous
просто чтоб не пушить перед вызовом ориганало дополнительно в стек
Anonymous
внатуре
Anonymous
ебать че я такой тупой
Anonymous
Anonymous
а что вообще либа делать то будет ?
Anonymous
да пилю универсальный х64 инжектор
Anonymous
Через NtMapViewOfSection как я понял?
Anonymous
А createremotethread палица значит..
Anonymous
а напрямую если вызывать? как там
Anonymous
NtCreateThreadEx?
Anonymous
Ну нелезет же античит в ядро, чтоб следить за созданием потоков, это жёсткая тема чёт
Anonymous
Если хукает просто Kernel32 глобально... то через ntdll можно попробовать.. если хукает ntdll можно попробовать syscall/sysenter
Anonymous
а хде ему еще сидеть как на убогих виндоколлбеках ака SetThreadCreateNotifyRoutine
Anonymous
у БЕ свой друйвер есть
Anonymous
аааа
Anonymous
который с БЕсервисе р3 процемсом общается через пайп
Anonymous
push rcx
push rdx
push r8
mov rcx, ImageBase
mov rdx, DLL_PROCESS_ATTACH
mov r8, ImageSize
sub rsp, 0x28
mov rax, DllMain
call rax
add rsp, 0x28
pop r8
pop rdx
pop rcx
push rbx
mov rax, OriginalFunc
mov rbx, pFunction
mov [rbx], rax
pop rbx
call OriginalFunc
ret
Anonymous
вот, щас адекватно вроде