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

R-X шеллкод, обсуждение

Quake3

TPU unit
Забанен
Регистрация
03.11.2010
Сообщения
4 529
Решения
4
Реакции
5 305
Депозит
0.046
Пожалуйста, обратите внимание, что пользователь заблокирован
Понадобилось написать шеллкод, который будет работать в R-X памяти (т.к. чтение-исполнение, без записи). На Ассемблере, т.к. Сишный компилер врядли поможет. Соответственно, встал вопрос о переменных, т.к. теперь нельзя просто взять и объявить что-то вида alloc_fn dq ? и туда писать.
Регистров, понятно дело, на всё не хватает. На 32 бит проблема решается достаточно легко, с помощью стека - т.е. push pop регистры. На 64 бит стек это головная боль, кто кодил тот знает, кто нет, то объяснять долго. В общем, как быть? Пока наметил для себя три варианта:
1. выделять память через хип, и там размещать все нужные структуры и переменные;
2. экспериментировать со стеком, т.к. оно не так сложно, просто нужна внимательность и отладка;
3. пусть RX шеллкод выделит RWX память и туда запишет следующий, уже "нормальный" ШК; который можно закодить на Си без всех извратов.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На Ассемблере, т.к. Сишный компилер врядли поможет
У меня вполне себе RX шеллкод на Плюсах написан (пришлось его делать RX из-за Лисы, если вы понимаете, о чем я). Скорее наоборот проще на плюсах, так как можно образно сделать класс, в котором будут все необходимые переменный, сразу выделить его на стеке и быть довольным, за счет того, что this неявно передается по всем методам. Тоже самое можешь сделать на асме, но нужно все оффсеты в стеке в голове держать. Ну и если вдруг понадобится большой буффер, то само собой надо на куче его выделять, опять же тут Плюсы могут помочь его не проебать за счет RAII и аналога defer.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
сразу выделить его на стеке и быть довольным
Да, я чето не в ту сторону думал, видимо. Ну плюсы не знаю, но может и правда на Си попробовать; потому что стек на Асме 64 бит это дурдом.
 
3 вариант мне кажется оптимальным, "основа" будет отвязана от ограничения RX и дополнительного кода для обхода ограничений будет меньше.
UPD: VirtualProtect нельзя? Хотя и ей нужна память под old...
В таких случаях я стараюсь обеспечить нормальное исполнение коду который привык писать, без извратов, поэтому хер с ней с прослойкой в виде шк в шк, я бы этим путем пошел
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Да, я чето не в ту сторону думал, видимо. Ну плюсы не знаю, но может и правда на Си попробовать; потому что стек на Асме 64 бит это дурдом.
Ну да сделай условную структуру Globals, выдели ее на стеке, проинициализируй и передавай указателем по процедурам.
 
Ну да сделай условную структуру Globals, выдели ее на стеке, проинициализируй и передавай указателем по процедурам.
Тоже годится, но мыж тут околомалварку кодим я так понимаю) Никаких глобалсов между процедурами быть не может (может), только локально, поюзал и убил внутри процедуры
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
UPD: VirtualProtect нельзя? Хотя и ей нужна память под old...
да можно на стеке выделить 8 байт, вопрос в том, что полноценно это все хреново работает; все же Си проще , особенно на 64 бит.

Спасибо за ответы, решено.
 


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