Sunteți pe pagina 1din 80

Aplicat, ii practice ale limbajului de asamblare

Arhitectura Sistemelor de Calcul

Ciprian Opris, a, PhD

Bitdefender

21 decembrie 2016
Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 2 / 29
1. Introducere

Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 3 / 29
1. Introducere

De la cod la binar

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 4 / 29
1. Introducere

De la cod la binar

← cod C

cod binar →

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 4 / 29
1. Introducere

De la cod la binar

← cod C

cod binar →

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 4 / 29
1. Introducere

Limbajul de asamblare s, i codul binar

Important
Calculatoarele ı̂nt, eleg doar codul binar.

Limbajul de asamblare este o formă inteligibilă de cod binar.


Limbajul de asamblare poate fi translatat direct ı̂n binar s, i
invers.

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 5 / 29
1. Introducere

Limbajul de asamblare s, i codul binar

Important
Calculatoarele ı̂nt, eleg doar codul binar.

Limbajul de asamblare este o formă inteligibilă de cod binar.


Limbajul de asamblare poate fi translatat direct ı̂n binar s, i
invers.
Limbaje compilate vs. interpretate:
Un limbaj compilat (C, C++, Pascal, Rust) este translatat ı̂n
Assembly / cod binar.
Un limbaj interpretat (Java, Python, C#) necesită un interpretor
care este de asemenea binar.

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 5 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 6 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
2. Fragmente de limbaj de asamblare ı̂n C

Fragmente de limbaj de asamblare ı̂n C

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 7 / 29
3. Inginerie inversă

Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 8 / 29
3. Inginerie inversă

Inginerie inversă

Definit, ie
Analiza unui program pentru a se ı̂nt, elege ce face s, i cum
funct, ionează.

analiză statică - analiza codului


analiză dinamică - analiza comportamentului programului

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 9 / 29
3. Inginerie inversă

Analiza statică
Problemă: Programele binare nu au un cod sursă de analizat.

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 10 / 29
3. Inginerie inversă

Analiza statică
Problemă: Programele binare nu au un cod sursă de analizat.
Să ne amintim: “Assembly poate fi translatat direct ı̂n binar s, i invers”.

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 10 / 29
3. Inginerie inversă

Analiza statică
Problemă: Programele binare nu au un cod sursă de analizat.
Să ne amintim: “Assembly poate fi translatat direct ı̂n binar s, i invers”.
Unealtă de analiză: IDA Pro

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 10 / 29
3. Inginerie inversă

Analiza dinamică
Depanare:
rularea instruct, iunilor Assembly pas cu pas (demo)

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 11 / 29
3. Inginerie inversă

Analiza dinamică
Depanare:
rularea instruct, iunilor Assembly pas cu pas (demo)
Interceptarea funct, iilor:

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 11 / 29
3. Inginerie inversă

Analiza dinamică
Depanare:
rularea instruct, iunilor Assembly pas cu pas (demo)
Interceptarea funct, iilor:

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 11 / 29
3. Inginerie inversă

Analiza dinamică
Depanare:
rularea instruct, iunilor Assembly pas cu pas (demo)
Interceptarea funct, iilor:

se ı̂nlocuies, te cu:
jmp interception

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 11 / 29
3. Inginerie inversă

Analiza dinamică
Depanare:
rularea instruct, iunilor Assembly pas cu pas (demo)
Interceptarea funct, iilor:

se ı̂nlocuies, te cu:
jmp interception

interception:
push ebp
mov ebp, esp
... cod de logare ...

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 11 / 29
3. Inginerie inversă

Analiza dinamică
Depanare:
rularea instruct, iunilor Assembly pas cu pas (demo)
Interceptarea funct, iilor:

se ı̂nlocuies, te cu:
jmp interception

interception:
push ebp
mov ebp, esp
... cod de logare ...
jmp fn+5

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 11 / 29
4. Înt, elegerea exploit-urilor

Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 12 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

very old EBP


...

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

&s
very old EBP
...

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

ret addr
&s
very old EBP
...

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

old EBP
ret addr
&s
very old EBP
...

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

myCopy

old EBP
ret addr
&s
very old EBP
...

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

O privire mai atentă la cadrele de stivă

myCopy

old EBP
ret addr
&s
very old EBP
...

Ce se ı̂ntâmplă dacă trimitem un string de 16 octet, i?


Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 13 / 29
4. Înt, elegerea exploit-urilor

Exploit-uri de tip buffer overflow

un buffer overflow poate fi folosit ca să se suprascrie adresa de


revenire de pe stivă
o valoare aleatoare probabil va face programul să crape

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 14 / 29
4. Înt, elegerea exploit-urilor

Exploit-uri de tip buffer overflow

un buffer overflow poate fi folosit ca să se suprascrie adresa de


revenire de pe stivă
o valoare aleatoare probabil va face programul să crape
...dar putem face mai mult de atât

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 14 / 29
4. Înt, elegerea exploit-urilor

Exploit-uri de tip buffer overflow

un buffer overflow poate fi folosit ca să se suprascrie adresa de


revenire de pe stivă
o valoare aleatoare probabil va face programul să crape
...dar putem face mai mult de atât
putem să rulăm cod arbitrar prin schimbarea adresei de revenire
ca să pointeze spre el

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 14 / 29
4. Înt, elegerea exploit-urilor

Exploit-uri de tip buffer overflow

un buffer overflow poate fi folosit ca să se suprascrie adresa de


revenire de pe stivă
o valoare aleatoare probabil va face programul să crape
...dar putem face mai mult de atât
putem să rulăm cod arbitrar prin schimbarea adresei de revenire
ca să pointeze spre el

Problemă: Data Execution Prevention

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 14 / 29
4. Înt, elegerea exploit-urilor

un program care rulează ı̂mpreună cu


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o
instruct, iune ret

Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget.

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
4. Înt, elegerea exploit-urilor

Stiva: Gadget 1

un program care rulează ı̂mpreună cu Gadget 2


bibliotecile sale cont, ine multe funct, ii
fiecare funct, ie se termină cu o Gadget 3
instruct, iune ret
Gadget 4
Definit, ie
Un grup de instruct, iuni terminat cu ret
se numes, te un gadget. Gadget 5

Putem scrie programe utile prin ı̂nlănt, uire


de gadget-uri.
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 15 / 29
5. Detect, ie de malware prin dezasamblare

Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 16 / 29
5. Detect, ie de malware prin dezasamblare

Mecanismul de detect, ie tradit, ional

| {z }

Hash(-uri)
↓?
Bază de date cu malware
. &

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 17 / 29
5. Detect, ie de malware prin dezasamblare

Calculul funct, iilor de hash

calculul funct, iilor de


hash necesită multe
operat, ii pe bit, i
mai us, or de făcut ı̂n
hardware decât ı̂n
software
limbajul de asamblare
de la Intel x86 pune la
dispozit, ie astfel de
instruct, iunea SHA1MSG2
operat, ii

figură de pe https://software.intel.com
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 18 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pmsmplpcmlpctjczczczmJ

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pmsmplpc mlpctjczczczmJ
<pmsmplpc>

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ p msmplpcm lpctjczczczmJ
<pmsmplpc>, <msmplpcm>

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pm smplpcml pctjczczczmJ
<pmsmplpc>, <msmplpcm>, <smplpcml>

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pms mplpcmlp ctjczczczmJ


<pmsmplpc>, <msmplpcm>, <smplpcml>, <mplpcmlp>

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pmsm plpcmlpc tjczczczmJ


<pmsmplpc>, <msmplpcm>, <smplpcml>, <mplpcmlp>, <plpcmlpc>

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pmsmplpcmlpctjczczczmJ
<pmsmplpc>, <msmplpcm>, <smplpcml>, <mplpcmlp>, <plpcmlpc>, . . .

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Folosirea de n-grame din OpCode-uri

| {z }

→ push, mov, sub, mov, push, lea, push, call, mov, . . .

→ pmsmplpcmlpctjczczczmJ
<pmsmplpc>, <msmplpcm>, <smplpcml>, <mplpcmlp>, <plpcmlpc>, . . .

↓?
Bază de date cu malware
. &

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 19 / 29
5. Detect, ie de malware prin dezasamblare

Similaritatea codului

Compilatorul nu ia ı̂n considerare:


comentariile s, i indentarea
numele de variabile s, i parantezele redundante
cod C similar → cod ASM similar → n-grame similare

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 20 / 29
5. Detect, ie de malware prin dezasamblare

Similaritatea codului

Compilatorul nu ia ı̂n considerare:


comentariile s, i indentarea
numele de variabile s, i parantezele redundante
cod C similar → cod ASM similar → n-grame similare
Definit, ie
Similaritatea Jaccard:
|A ∩ B|
sim(A, B) =
|A ∪ B|

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 20 / 29
5. Detect, ie de malware prin dezasamblare

Emularea codului

Cum se pot deduce ı̂n mod automat efectele unui program fără a se
rula efectiv?
crearea unui mediu virtual minimalist
dezasamblarea fiecărei instruct, iuni
emularea sa ı̂n interiorul mediului virtual

Un emulator trebuie să t, ină evident, a la


regis, tri
memorie
mediul emulat

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 21 / 29
6. MBR s, i hipervizor

Cuprins

1 Introducere

2 Fragmente de limbaj de asamblare ı̂n C

3 Inginerie inversă

4 Înt, elegerea exploit-urilor

5 Detect, ie de malware prin dezasamblare

6 MBR s, i hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 22 / 29
6. MBR s, i hipervizor

Conceptul de bootstrap
Ce se ı̂ntâmplă atunci când un
calculator pornes, te?
Cum poate un sistem de operare să
se pornească singur?

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 23 / 29
6. MBR s, i hipervizor

Conceptul de bootstrap
Ce se ı̂ntâmplă atunci când un
calculator pornes, te?
Cum poate un sistem de operare să
se pornească singur?
se “trage singur ı̂n sus de curelele
cizmelor”

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 23 / 29
6. MBR s, i hipervizor

Conceptul de bootstrap
Ce se ı̂ntâmplă atunci când un
calculator pornes, te?
Cum poate un sistem de operare să
se pornească singur?
se “trage singur ı̂n sus de curelele
cizmelor”

atunci când e pornit, procesorul


ı̂ncepe execut, ia codului de la adresa
FFFF:0000, unde e localizat codul
de BIOS
apoi BIOS-ul ı̂ncepe să caute
sectoare de boot
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 23 / 29
6. MBR s, i hipervizor

Sectorul de boot

are 512 octet, i


se termină cu 0xAA55
se va ı̂ncărca la adresa
0000:7C00
are acces la ı̂ntreruperile
BIOS

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 24 / 29
6. MBR s, i hipervizor Hello world din sectorul de boot

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 25 / 29
6. MBR s, i hipervizor

Hipervizorul

cu un pas mai aproape de hardware


suntem pe cont propriu (nici un API,
fără management)
vedem totul
Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 26 / 29
6. MBR s, i hipervizor

Ciclul de viat, ă al unui hipervizor

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 27 / 29
6. MBR s, i hipervizor

Ciclul de viat, ă al unui hipervizor

VMXON

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 27 / 29
6. MBR s, i hipervizor

Ciclul de viat, ă al unui hipervizor

VMXON VMXOFF

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 27 / 29
6. MBR s, i hipervizor

Ciclul de viat, ă al unui hipervizor

VM Exit
VM Entry

VMXON VMXOFF

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 27 / 29
6. MBR s, i hipervizor

Ciclul de viat, ă al unui hipervizor

VM Exit
VM Entry VM Entry

VMXON VMXOFF

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 27 / 29
6. MBR s, i hipervizor

Fragmente de cod hipervizor ı̂n Assembly


Găsirea adresei curente de
memorie:

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 28 / 29
6. MBR s, i hipervizor

Fragmente de cod hipervizor ı̂n Assembly


Găsirea adresei curente de
memorie:

Scriere de cod independent de


pozit, ie:

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 28 / 29
6. MBR s, i hipervizor

Fragmente de cod hipervizor ı̂n Assembly


Găsirea adresei curente de
memorie:

Scriere de cod independent de


pozit, ie:

Setarea tabelelor IDT s, i GDT:

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 28 / 29
6. MBR s, i hipervizor

Fragmente de cod hipervizor ı̂n Assembly


Găsirea adresei curente de
memorie:
Trecerea de la 32 la 64 bit:

Scriere de cod independent de


pozit, ie:

Setarea tabelelor IDT s, i GDT:

Ciprian Opris, a (Bitdefender) Aplicat, ii practice ale limbajului de asamblare 21 decembrie 2016 28 / 29
Vă mult, umesc pentru atent, ie!

S-ar putea să vă placă și