Professional Documents
Culture Documents
Art of Number's
Art of Number's
by TwistedX
I.
BROJNI SISTEMI
Danas su razvijeni razliciti brojni sistemi i svaki od njih ima svoje osobine i
prednosti nad drugim. U svakodnevnom zivotu, za prikazivanje brojnih podataka
covjek najvise koristi dekadski ili binarni brojni sistem. Sa druge strane, binarni brojni
sistem je od velike vaznosti za informatiku. Pored ova dva brojna sistema postoje i
mnogi drugi kao sto su oktalni, heksadecimalni i dr.
Nazivi svih brojnih sistema poticu od grckih ili latinskih rijeci koje oznacavaju
broj mogucih cifara brojnog sistema.
Prikaz brojeva u bilo kojem brojnom sistemu u principu je isti. To znaci da neki
broj K moze da se predstavi u bilo kojem brojnom sistemu prema sljedecem izrazu:
X = a-m* B-m + a-m+1* B-m+1 + a-m+2* B-m+2 + ... + a-2* B-2
+ a-1* B-1 +a0* B0 + a1* B1 + a2* B2 + ... + an-1* Bn-1
+ an* Bn
ili krace
B- baza sistema
aj- cifre brojnog sistema, koje mogu biti pozitivne cjelobrojne vrijednosti (0, 1, 2 ... )
Ocigledno je da se mogu dobiti razliciti brojni sistemi odabiranjem razlicitih
pozitivnih vrijednosti za bazu B.
RESET I PRENOS
Dva vazna pojma za racunare i opste u informatici su reset i prenos. Mozemo ih shvatiti npr.
kod brojanja u decimalnom brojnom sistemu. Kada brojimo u decimalnom sistemu pocinjemo
sa 0 na mjestu jedinica i uzmemo sve cifre po redu do 9. Da bi smo brojali dalje od 9
resetujemo poziciju jedinica (pocnemo iznova) i prenosimoj 1 na poziciju desetica. N-cifrenih
brojeva mozemo nabrojati 10N pocevsi od 0. Najveci broj ce biti 10N-1.
Npr. najveci trocifreni broj je 999, a pocevsi sa 0 nabrojali smo 1000 brojeva.
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
II.
10
11
12
stoji
13
14
III. KODOVI
Rekli smo da svi podaci u informatici uglavnom predstavljaju pomocu dvije cifre 0 i 1.
Pokazali smo kako se predstavljaju u binarnom brojnom sistemu. Medjutim, potrebno je
koristeci 0 i 1 (byte) predstaviti i brojeve date u drugim brojnim sistemima, zatim slovne
simbole, posebno znakove, varijable, instrukcije itd. Da bismo to uradili koristimo kodove.
Naime, odredjena kombinacija bita dodjeljuje se nekom objektu tako da ta kombinacija bita
predstavlja KOD tog objekta. To znaci, da brojevi u binarnom brojnom sistemu i kodovi
predstavljaju dvije potpuno razlicite stvari, iako su i jedan i drugi sastavljeni od niza bita (0 i
1). Kombinacija bita u binarnom brojnom sistemu predstavlja odredjeni broj, a kombinacija
bita u kodu predstavlja neki podatak.
Posebna oblast, koja se bavi kodiranjem podataka u svrhu njihove zastite od
nedozvoljenog pregleda, naziva se KRIPTOGRAFIJA. Kod ove metode osnov je da se
neprestano mijenja pridruzena kodna zamjena za pojedine kodne elemente pod kontrolom
generatora kljuca koji na taj nain SIFRIRA podatke pred slanje poruke ili tokom samog
slanja. Isti generator u postupku prijema podataka vrsi DESIFRIRANJE podataka.
Raznolikost u mijesanju kodnih elemenata i velicina raspona bez ponavljanja sekvence
postupka kodiranja, parametri su prema kojima se ocijenjuje kvalitet generatora kljuca.
Radi breg prijenosa podataka na daljinu posebnim metodama kodiranja mogue je
ostvariti i njihovo SMANJIVANJE (KOMPRESIJU). Dobar kompresor moe i do 6 puta
smanjiti ukupni obim podataka pred slanja poruke. U odreditu se vri postupak
DEKOMPRESIJE, odnosno podaci se "raspakiraju" u izvorni oblik. Na taj nain u velikoj
mjeri se smanjuje vrijeme prijenosa podataka na daljinu.
Kompresija je od velikog znacaja i u postupcima ARHIVIRANJA podataka na medije za
trajno pamcenje, jer se na taj nacin visestruko povecava kapacitet medija za pohranjivanje
podataka. Metode kompresija raznolike su ali svima je temelj skracivanje kodova koji se
ponavljaju npr. sadrzaj "xxxxxxxxxxxxx" bi se pretvorio u "13x" te time visestruko skratio
obim podataka za prijenos ili pohranu.
Posebno je znacajan nacin kodiranja podataka slike. Kako je kvalitet slike u uskoj vezi
s brojem elemenata slike i njihovim atributima (kao svjetlina, boja i slicno), obim podataka
koji opisuju sliku vrlo je velik. Danasnja racunala mogu obraditi sliku i do rezoluciji od preko
1280x1200 elemenata u hiljadama boja, te su se radi prijenosa i pohrane slike razvile razne
metode kodiranja pojedinih elemenata i kompresije cjelokupnog sadrzaja. Udruzenje
proizvodjaa racunalne opreme VESA (Video Electronic Standards Association) u USA u
tom smislu razvilo je standard kojeg se mnogi pridrzavaju. Vecinu navedenog opisuje i
objedinjava standard pod nazivom ISO (International Standards Organization)
medjunarodnog udruzenja u Zenevi, kojemu je zadaca donosenje medjunarodnog standarda za
naucne i tehnicke doprinose.
Posebnu grupu kodova cini PRUGASTI KOD (BAR-CODE), poseban raspored
debljih i tanjih crta kojim je opisana brojana, slovna ili obje informacije. Takav zapis koristi
se za automatsku identifikaciju, a mogue ga je ocitati pomocu citaca BAR koda koje u radu
koristi opticke principe, i koje ce racunalu proslijediti odgovarajuce binarne podatke temeljem
ocitanog. Cesto je u uporabi kod oznaavanja robe siroke potrosnje u trgovinama, skladistima,
automatskoj proizvodnji i slicno. Nije od znacaja ovdje ga prikazati kad ga se moze vidjeti
gotovo na svim proizvodima u trgovini.
15
BCD KODOVI
Binarno decimalni kodovi ili BCD kodovi (Binary-Coded Decimal) su kodovi pomocu
kojih se koristeci binarne kombinacije kodiraju cifre dekadskog brojnog sistema. Obzirom da
dekadski brojni sistem ima deset cifri, koristeci tri bita ne mozemo predstaviti sve cifre jer
imamo 23 = 8 kombinacija.
Zato su BCD kodovi cetvero bitni kodovi jer koriste cetiri bita za prikaz brojeva
dekadskog brojnog sistema. To znaci imamo na raspolaganju 24 = 16 kombinacija, a koristi se
samo 10 tako da je moguce konstruisati ogroman broj razlicitih 4-bitnih BCD kodova.
Ipak u praksi se koristi samo manji broj.
Kada bi smo 4 binarna bita zamijenili heksadecimalnim brojem imali bi smo binarno
kodirani heksadecimalni broj BCH koji je direktan kod. Takodjer imamo i zabranjene kodne
rijeci, a to su: 1010, 1011, 1100, 1101, 1110 i 1111.
Kada god se poravi zabranjena rijec u masini koja koristi BCD kod , na displeju se
pojavi informacija da je nastupola greska ERROR. Vazno je imati na umu da BCD i binarni
brojevi nisu isti.
Primjer1. Pretvori slijedece BCD brojeve u njihove decimalne brojeve.
a) 0110 1000 0101BCD = 68510
b) 1001 1010 0000BCD = 9A010 (ERROR)
Primjer2. Kodiraj slijedece decimalne brojeve koristeci BCD kod.
a) 82410 = 1000 0010 0100BCD
b) 61,7510 = 0110 0001, 0111 0101BCD
Kodovi mogu ali i ne moraju biti pozicioni. Pozicioni kod je onaj kod kojeg se svakom
mjestu moze dati odredjena pozicija, pa ako se pozicije mnoze s pripadnim bitom i sve skupa
sabere dobija se iznos pripadne dekadske cifre.
U tabeli prirodni binarni kod (Natural Binary Coded Decimal) ili NBCD kod i
Aikenov kod su poricioni kodovi.
U tabeli su prikazane pozicione vrijednosti bita: za NBCD kod 8421, a za Aikenov
kod 2421. Npr. u NBCD kodu dekadskoj cifri 9 odgovara kodna kombinacija 1001 tj.
1001 = 1*8 + 0*4 + 0*2 + 1*1 = 9
Dok u Aikenovom kodu 9 odgovara kodna kombinacija 1111 tj.
1111 = 1*2 + 1*4 + 1*2 + 1*1 = 9
16
NBCD kod je dobijen tako sto su uzete redom kombinacije prirodnog binarnog
cetverobitnog niza, osim zadnjih sest koje su odbacene. Zato se ovaj kod i naziva prirodni
binarno-decimalni kod.
Aikenov kod se dobije iz prirodnog binarnog cetverobitnog niza odbacivanjem
srednjih sest kombinacija, odnosno prvih pet i zadnjih pet kombinacija.
XS-3 (excess-3) kod nastaje odbacivanjem prvih tri i zadnjih tri kombinacija binarnog
cetverobitnog niza tj. uzimanjem serednjih deset kombinacija.
Glavna karakteristika grejovog koda jeste cinjenica da se redom svaka kombinacija
razlikuje od prethodne za samo jedan bit. XS-3 kod i Grejov kod nisu pozicioni.
17
ALFANUMERICKI KODOVI
Ako se zele kodovati slova, dekadske cifre, specijalni znakovi %, $, #, & i sl. koriste
se tzv. alfanumericki kodovi. Najvise upotrebljavani alfanumericki kod je americki kod za
izmjenu podataka sa oznakom ASCII (od American Standard Code for Information
Interchange).
ASCII KOD
To je sedmobitni kod sto znaci da ima 128 kombinacija a to je dovoljno za prikaz scih
cifri, znakova i slovnih simbola. Stvarno se kotisti osam bitova. Osmi bit sluzi za detekciju i
korekciju greske. Slova i brojevi pocinju sa 1, a brojevi i simboli pocinju sa 0. Ovaj kod se
koristi u prenosu podataka izmedju racunara i ulazno-izlaznih jedinica.
18
19
EBCDIC KOD
Pored spomenutog ASCII koda koji se primjenjuje kod vecine mikroracunara u praksi
se pojavio i tzv. prosireni ASCII kod koji se skraceno oznacava sa EBCDIC kod. Naziv dolazi
od Extended Binary Coded Decimal Interchange Code. U ovom slucaju postoje kodne
kombinacije od po cetiri bita. To znaci da se moze napraviti 256 kombinacija od po osam bita
za kodiranje slovnih simbola, brojeva, znakova interpunkcije, specijalnih znakova itd.
Poirenje ASCII koda (drugih 128 znakova) sadri uglavnom znakove grkog pisma, znakove
lokaliteta i znakove za kreiranje okvira.
20
21
"AND" logicki sklop ima dva ulaza A i B i jedan izlaz C. Logicka jedinica ili nula na
ulazu daje rezultat na izlazu. Prema tome obradna tabela za AND sklop izgleda ovako:
A|B|C
====
1|0|0
0|1|0
0|0|0
1|1|1
"OR" rjecica na engleskom znaci "ILI", pa kako smo vec rekli kod "AND" ("I")
sklopa rezultat logicke jedinice dobijamo ako se na na ulazima "i A i B" pojavi logicka
jedinica. Primjetimo da ovdje pod navodnicima, ulaze A i B veze slovo (veznik) "I". Tako isto
kod OR sklopa, ulaze A i B veze veznik "ILI", sto ce reci, logicku jedinicu na izlazu dobijamo
ako se na ulazu "ili A ili B" pojavi logicka jedinica. Prema tome tabela rezultata za OR sklop
izgleda ovako:
A|B|C
======
0|0|0
0|1|1
1|0|1
1|1|1
Znaci na bilo kojem ulazu A ili B da imamo jedinicu i na izlazu C imamo jedinicu.
"NAND i NOR" su negacije od postojecih AND i OR sklopova. Nazivi su nastali kao
skraceni oblik od "NOT AND" i NOT OR". U svjetu logike ovi sklopovi su nastali radi
izjednacavanja kompatibilnosti razlicitih sistema. Mnogi od proizvodjaca koriste zbivanja u
elektronici da je osnovni slucaj kad se nesto desava bez gresaka, logicko stanje "0", dok drugi
opet koriste "1" za istu stvar. Kada zelimo da te informacije prilagodimo drugom
proizvodjacu ili cak sebi i svojim sklopovima onda signale treba obrnuti pa tek tada nastaviti
raditi sa njima. NAND i NOR nisu nista drugo nego cista suprotnost AND-u i OR-u.
Evo sad ce mo tabelarno prikazati AND i OR te njihova rjesenja te paralelno sa njima NAND
i NOR, tek da lakse uocimo razliku:
AND ----- NAND
===========
A|B|C --- A|B|C
==== --- ====
1|0|0 --- 1|0|1
0|1|0 --- 0|1|1
0|0|0 --- 0|0|1
1|1|1 --- 1|1|0
22
23
"XNOR" je nista drugo nego suprotno od XOR-a. Znaci potpuno isto pravilo kao kad
smo radili AND i NAND ili OR i NOR.
A|B|C
======
0|0|1
0|1|0
1|0|0
1|1|1
10011001 XOR
01010100
-------------11001101 XNOR
11001101
-------------01010100 rezultat
"HEX Invertor" "Inverzno" sama rjec govori da je u pitanju neka suprotnost od
postojeceg. Inverzno "DA" je "NE".
Primjenjujuci to na logickim sklopovima inverzno "0" je "1" i obrnuto, inverzno "1" je "0".
Tabela binarnog rezultata na inverteru je skoro besmislena al eto pa da je vidimo:
A|C
===
1|0
0|1
24
KONSTANTE I PROMJENLJIVE
Konstanta je nesto sto ima stalno znacenje. Npr. 2; 3 ; 3,14; 100 ... itd.
U obicnoj algebri ima beskonacno mnogo mogucih konstanti. Nasuprot tome u Bulovoj
algebri postoje samo dvije konstante 0 i 1.
Vazno je takodjer uvijek imati na umu da Bulove konstante nisu brojevi. Mi ih
mozemo nazivati raznim imenima:
DA i NE
ISPRAVNO i POGRESNO
ISTINITO i LAZNO
ZATVORENO i OTVORENO ... itd.
Promjenljiva je simbol ili velicina koja moze da se mjenja, poprimivsi vrijednost bilo
koje konstante u sistemu. U bilo kojem trenutku promjenljiva ima vrijednost jedne konstante
ali kasnije moze da poprimi vrijednost neke druge konstante. Posto u Bulovoj algebri postoje
samo dvije konstante, Bulove promjenljive mogu uzeti samo jednu od dvije vrijednosti 0 i 1.
Bulova prokjenljiva se oznacava slovima, samo velika slova dolaze u obzir i moze biti istinita
ili neistinita.
Nijedna Bulova promjenljiva ne moze biti istovremeno istinita i lazna. Dakle,
Bulova algebra
1+1=1
1+1+1=1
1+1+1+1=1
25
26
Primjer3.Saberi:
00011111
00011111
-------------00111110
1 red 1 +1 = 10....Pie 0 a prenosi 1
2 red...preneeni 1 + 1 + 1 = 11 Pie 1 a prenosi 1
3 red.... preneeni 1 + + 1 = 11 Pie 1 a prenosi 1
4 red...preneeni 1 + + 1 = 11 Pie 1 a prenosi 1
5 red ..preneeni 1 + + 1 = 11 Pie 1 a prenosi 1
6 red..preneeni 1 + 0 + 0 = 1
7 red ..0 + 0 = 0
8 red . 0+ 0 = 0
27
DODATAK
PROGRAM BrojniSistemi;
USES CRT;
VAR broj:string;
baza,sistem:integer;
KrajnjiRezultat:string;
KrajPrograma:Boolean;
Znak:Char;
PROCEDURE ISPIS;
Begin
writeln('+++++++++++++++++++++++++++++++++++++++++++++');
writeln('+++++++++++++++++++++++++++++++++++++++++++++');
Writeln('+
+');
Writeln('+
+');
Writeln('+
BROJNI SISTEMI
+');
Writeln('+
+');
Writeln('+
TwistedX
+');
Writeln('+++++++++++++++++++++++++++++++++++++++++++++');
Writeln('Pritisnite tipku za pocetak....');
Readkey;
End;
FUNCTION PretvoriUVelikaSlova(VAR S:String): string;
Var i:integer;
Begin
for i:=1 to length(S) do S[i]:=Upcase(S[i]);
PretvoriUVelikaSlova:=s;
End;
FUNCTION Provjeri(VAR Br:string; B:integer):Boolean;
VAR Uslov:Boolean;
i:integer;
TB:char;
Begin
Uslov:=TRUE;
Br:=PretvoriUVelikaSlova(Br);
if (b<=9) then TB:=chr(B+48) else TB:=chr(B+55);
For i:=1 to length(Br) do
If (Br[i]>=Tb) then USlov:=False;
Provjeri:=Uslov;
ENd;
FUNCTION PretvoriUBroj(Var SBroj:string):longint;
VAR i:integer;
28
Rezultat,k:longint;
Begin
k:=1;
For i:=Length(SBroj) downto 1 Do begin
Rezultat:=rezultat+ (Ord(SBroj[i])-48)*k;
k:=k*10;
End;
PretvoriUBroj:=Rezultat;
End;
FUNCTION PretvoriIzDecimalnog(Var Br:LongInt; Var Sis:Integer):string;
Var Os:byte;
NizOstataka:array [1..50] of char;
Brojac,i:integer;
Rezultat:String;
Uslov:boolean;
Begin
Rezultat:='';
Brojac:=0;
Uslov:=TRUE;
While (Uslov) do
Begin
Brojac:=Brojac+1;
If (Br<Sis) then Begin
OS:=Br;
Uslov:=FALSE;
End
Else Os:=Br MOD Sis;
if (Os<=9) then NizOstataka[Brojac]:=chr(Os+48)
else NizOstataka[Brojac]:=chr(Os+55);
Br:=Br DIV Sis;
End;
For i:=brojac downto 1 do rezultat:=rezultat+nizostataka[i];
PretvoriIzDecimalnog:=Rezultat;
End;
FUNCTION PretvoriUDecimalni (Var SBroj:string; Var B:integer):Longint;
Var K,Rezultat:longint;
I:integer;
Begin
SBroj:=PretvoriUVelikaSlova(SBroj);
k:=1;
rezultat:=0;
for i:=length(SBroj) downto 1 do begin
if (SBroj[i]<='9') then
Rezultat:=Rezultat + (Ord(SBroj[i])-48)*k
else
Rezultat:=Rezultat + (Ord(SBroj[i])-55)*k;
29
k:=k*b;
end;
PretvoriUDecimalni:=Rezultat;
End;
FUNCTION PretvoriUSistem( Var Br:string; Var B:integer; Var S:Integer):String;
Var O:integer;
TB:Longint;
TR,Rezultat:string;
NizOstataka:array [1..50] of Byte;
Brojac,i:integer;
Begin
Rezultat:='';
Brojac:=1;
If (B=S) Then
Begin
Writeln('Broj koji ste unijeli vec se nalazi u sistemu u koji ga zelite pretvoriti');
Rezultat:=Br;
End
Else
If (B=10) then
Begin
TB:=PretvoriUBroj(Br);
rezultat:=PretvoriIzDecimalnog(TB,S)
End
Else if (B<>10) then
Begin
TB:=PretvoriUDecimalni(Br,B);
Rezultat:=PretvoriIzDecimalnog(TB,S);
End;
PretvoriUsistem:=Rezultat;
End;
BEGIN
Ispis;
Clrscr;
KrajPrograma:=FALSE;
While not (KrajPrograma) Do
Begin
writeln('Unesite broj koji zelite pretvoriti i njegovu bazu');
Write('Broj : '); Readln(Broj);
Write('Baza : '); Readln(Baza);
Write('U koji sistem zelite pretvoriti dati broj : '); Readln(Sistem);
writeln;
If (Provjeri(Broj,Baza)) then
Begin
KrajnjiRezultat:=PretvoriUSistem(Broj, Baza, Sistem);
30
31
Pogovor:
Ova knjiga predstavlja sve sto bi cracker pocetnik trebao da zna prije nego da krene
reversovati razne mete. Ovo moze ali i nemora biti obavezno stivo za sve pocetnike, ali ce
njeno razumjevanje sigurno olaksati pocetke u ovoj oblasti. Poslije citanja ove knjige
preporucujem vam citanje ap0x ovih knjiga koje ce vas uputiti u tajne reversinga raznih
meta. Pro bi trebali procitati knjigu PE and ASM for Crackers gdje je detaljno objasnjena
PE struktura i ASM komande. Druga knjiga bi trebala biti The Art of Cracking u kojoj su
detaljno objasnjene tehnike reversinga. Srecno u daljnjem radu, ali i citanju ap0x ovih
knjiga.
32