• XSS.stack #1 – первый литературный журнал от юзеров форума

Изменение регистра хранения стека

xChimera

Malware...
Пользователь
Регистрация
19.08.2024
Сообщения
778
Реакции
552
Гарант сделки
2
Депозит
0.0282
Давненько читал опции компилятора gcc, сейчас вспоминаю, что там было опция, благодаря которой можно изменить использование регистров по умолчанию
к примеру по умолчанию функции возвращают результат своего выполнения в регистре eax (rax x64)

Код:
push ebp
mov ebp, esp

sub esp, 60

...

call func
mov [ebp - 4], eax

при включении опции, можно настроить кодогенерацию пользовательствого кода так, чтобы результат хранился в ebx, edx и так далее

ну а если ближе к сути моих мыслей:

меня интересует вопрос изменения регистра хранения стека
например меняем ролями регистры esp и edi

при вызове функции в x86 аргументы помещаются на стек справа налево

а что если псевдокод будет выглядеть примерно так:


Код:
C code:

// stack in edi
// winapi need args in esp

char test[] = "test";

void* mini_stack = calloc(10, 4);

ministack[0] = retaddr;

ministack[1] = 0;
ministack[2] = test;
ministack[3] = test;
ministack[4] = 0;

asm{
   mov esp, ministack
   jmp __imp__MessageBoxA@16

   ...
}

...

прежде чем пытаться что то такое реализовать, решил спросить может ли иметь место эта идея?

что будет по детекту, и как к этому отнесутся аверы
 
А им какая разница, как ты в стек будешь параметры запихивать, в итоге они заедут в хук апишки и там будет отдельно рассмотрены. Ну и к тому же, вот такие закидоны легче в сигнатуры загнать, т.к в обычном коде никто не будет так делать.
 
Придумай свою ВМ и храни стек где угодно, а можешь вообще его не реализовывать, богохульник.
У меня и так обходятся почти все EDR + XDR, от нечего делать размышляю)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх