Попробуем сделать форс аут, т.к. сказать, из подручных средств.
Думаю, у всех есть [Ссылки могут видеть только зарегистрированные пользователи. ] и [Ссылки могут видеть только зарегистрированные пользователи. ] (понадобятся обе программы). Ну а если нету, то ссылки, надеюсь, вы увидели.
Сразу скажу, что отправлять никаких пакетов мы не будем. Способ я расскажу сложноватый, сделать его быстро не получится. Но для обучения подойдёт
Наш форс аут будет просто отключать процесс по нажатию горячих клавиш.
Для начала потренируемся на обычном калькуляторе. Запустите калькулятор.
Теперь открываем CE, жмём в левом верхнем углу мониторчик, выбираем процесс. В нашем случае - calc.exe Скрин 1
Перед нами отладчик CE. Подробно рассматривать сейчас мы его не будем.
В выпадающем меню Tools выберите Allocate Memory. Сейчас нужно выделить память для кода нашего форс аута. Скрин 3
Небольшое лирическое отступление.
Так как мы будем сейчас работать с инструкциями ассемблера, я немного расскажу про сейчас нам необходимые.
JMP - безусловный прыжок к определённому адресу в памяти. Например: JMP 00100002. После этой инструкции код будет исполнятся с адреса 00100002.
NOP - инструкция, которая ничего не делает. Используется для забивания ненужных кодов.
CALL - инструкция вызова подпрограммы. Как подпрограмма заканчивается, продолжает исполняться код после CALL.
PUSH - инструкция заносит в стек определённое число или регистр. Используется для вызовов некоторых подпрограмм. К примеру, в некоторых языках программирования используется конструкция invoke. В частности, для вызова WinAPI.
Например:
Код:
invoke asdsas,1,0,2,1
превратится в:
Код:
push 1
push 2
push 0
push 1
call asdas
Продолжим:
Нас спросят, хотим ли мы установить на текущем адресе прыжок (вспомнили JMP) на новый, где мы выделяем память. Жмём No, нам это не нужно. Скрин 5
Нас спросят, хотим ли мы перейти к адресу выделенной памяти. Мы хотим. Скрин 6
Теперь нам нужно вставить наш код в память. Вот наш код:
Код:
jmp текущий адрес
push 0
call exitprocess
Все уже заметили дизассембл таблицу. Чтобы вставить наш код, нужно открыть окошко ассемблера. Это не трудно, нужно всего лишь нажать два раза ЛКМ по желаемому адресу в таблице. В появившемся окошке вводим нужную инструкцию. И так заносим три инструкции. Скрин 7
CE может спросить нас, хотим ли мы занопить неполные коды, которые мы порезали из-за того, что наша инструкция оказалась 5-ти байтная, а щёлкали мы по 2-х байтной. Скрин 8
Теперь нужно запустить на исполнение наш код. Для этого создадим Thread. В появившемся окошке должен быть адрес начала нашего кода. В следующем окне ничего писать не нужно, оставьте ноль. Скрин 9
Новый трид постоянно будет исполнять код JMP, потому что мы указали прыжок на этот же адрес. Чтобы процесс заверщился, нужно исполнить следующий код
Код:
push 0
call exitprocess
Для этого мы потрём джамп и код после потёртого джампа будет исполняться. Чтобы потереть джамп, мы используем его адрес в памяти и добавляем в артмани. В CE нельзя, будет выдавать ошибку. Нам нужно установить на наш адрес (не забудьте поставить 2-х байтное значение) горячую клавишу, по нажатии которой, код EBFE превратится в 9090 (90 - машинный код NOP). Не сложным действием в том же калькуляторе мы узнаём, что 9090 в шестнадцатиричной СС равно 37008 в ДСС. Ставим горячую клавишу. Скрин 10
Теперь по нажатию этой клавиши процесс будет завершаться.
Важное замечание: все, наверное, заметили, что процесс начинает хавать 99% проца. Я сам это заметил, но во время писания гайда, и скрины мне переделывать неохота было. Может это и к лучшему - сами попробуете. Чтобы от этого избавиться, нужно перед JMP добавить sleep,1, т.е.
Код:
push 1
call sleep
Или любое другое число. Эта команда будет брать из стека число и принимать это число за милисекунды. Пока эти милисекунды не пройдут, исполняться код дальше не будет. Вроде очень маленькая задержка, а нагрузка на ЦП исчезает. Вот код, который должен быть: