Size: a a a

Ассемблер

2021 November 10

O

Ozaron in Ассемблер
Я только смог найти вот такую шляпу
__declspec(naked) void __KiFastSystemCall()
{
   __asm
   {
       mov edx, esp

       _emit 0x0F
       _emit 0x34

       ret

   }

}
источник

CB

Cyber Bully in Ассемблер
не, это вообще не то. Прочти по ссылке статейку внимательно и там есть код который делает транзишн, код заключается в копировании значения 0x33 в регистр cs
источник

O

Ozaron in Ассемблер
#define EM(a) __asm __emit (a)

#define X64_Start_with_CS(_cs) \
{ \
 EM(0x6A) EM(_cs)                     /*  push   _cs                   */ \
 EM(0xE8) EM(0) EM(0) EM(0) EM(0)     /*  call   $+5                   */ \
 EM(0x83) EM(4) EM(0x24) EM(5)        /*  add    dword [esp], 5        */ \
 EM(0xCB)                             /*  retf                         */ \
}

#define X64_End_with_CS(_cs) \
{ \
 EM(0xE8) EM(0) EM(0) EM(0) EM(0)     /*  call   $+5                   */ \
 EM(0xC7) EM(0x44) EM(0x24) EM(4)     /*                               */ \
 EM(_cs) EM(0) EM(0) EM(0)            /*  mov    dword [rsp + 4], _cs  */ \
 EM(0x83) EM(4) EM(0x24) EM(0xD)      /*  add    dword [rsp], 0xD      */ \
 EM(0xCB)                             /*  retf                         */ \
}

#define X64_Start() X64_Start_with_CS(0x33)
#define X64_End() X64_End_with_CS(0x23)

Это оно ?
источник

CB

Cyber Bully in Ассемблер
да это оно, но этого не хватит
источник

CB

Cyber Bully in Ассемблер
Там хитрO надо запилить через EMIT 64 битный код, который уже сделает syscall в х64 контексте
источник

CB

Cyber Bully in Ассемблер
чем так париццо, проще просто вызвать NtWriteVirtualMemory через экспорт, зачем тебе сискол
источник

D

Dr.web in Ассемблер
что?
источник

O

Ozaron in Ассемблер
мне нужен сискол чтобы при реверсе не было видно
я конечно понимаю что все равно можно понять какая функция вызывается и найти этот сикол по mov edx
Но все таки хочется научиться делать сисколлы
источник

CB

Cyber Bully in Ассемблер
Ну тогда придется прочесть внимательно че там написано сначала
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
без матов плиз, поправь
источник

CB

Cyber Bully in Ассемблер
еще надо будет вот тут https://github.com/rwfpl/rewolf-wow64ext/blob/fd28b57fe926f3e57540850c37cdbcc766173dba/src/wow64ext.cpp#L154 через эмит вставить опкоды х64
mov r10,rcx
mov eax,syscall_number
syscall
источник

CB

Cyber Bully in Ассемблер
а call func убрать
источник

O

Ozaron in Ассемблер
А стоп. Т.е мне нужно фактически сделать syscall как в х64, но при этом в х86 ?
источник

CB

Cyber Bully in Ассемблер
да
источник

CB

Cyber Bully in Ассемблер
Надо переключить контекст и выполнить х64 код который сделает инструкцию syscall по всем правилам
источник

O

Ozaron in Ассемблер
Ох, ну и жесть
источник

CB

Cyber Bully in Ассемблер
ну впринципе там уже почти все написано, надо только подправить код его чтоб он не стаб вызывал, а сразу выполнял инстр. syscall там пару строк подправить с гитхаба
источник

CB

Cyber Bully in Ассемблер
и все аргументы будут DWORD64
источник

CB

Cyber Bully in Ассемблер
Номер куда-то прятать тогда надо)
источник

CB

Cyber Bully in Ассемблер
А что, в винде как и в линуксе у сисколлов всегда одни и теже индексы? ну всмысле номера)
источник