Professional Documents
Culture Documents
1 Gii thiu
Bi lab ny s gip cc bn sinh vin lm quen vi ngn ng assembly intel x86 v
cc k thut RE n gin.
Yu cu bi lab:
y l mt bi lab c bin son li t b Lab Assignment ca trng CMU USA,
bi lab ny tng i kh v cn nhiu n lc ca cc bn sinh vin lm. Cc kin
thc cn gii bi lab ny gm c:
- Ton b kin thc v ngn ng assembly x86 trong chng 3 sch
Computer System: A Programmers Perspective.
- Cch thc s dng mt chng trnh assembler bt k : GDB, OllyGDB,
Immunity, IDA Khuyn ngh s dng IDA.
- Kin thc v remote debugger trn desktop khi s dng IDA.
Trong ni dung bi lab, gio vin thc hnh s hng dn s lc v cch thc ci
t, lm quen vi trnh assembler IDA cng nh cch remote debugger trn desktop.
Tuy nhin cc bn sinh vin cn phi nghin cu nhiu hn mi c th hon tt c
bi lab.
Sinh vin lm bi lab theo hng dn v ghi p n vo file c dng
MSSV_LTHTLab3.docx.
2 Ni dung bi lab
2.1 Bomb defusing Game
Trong bi lab ny, CMU xy dng mt tr chi t b kin thc trong chng 3
sch CSAPP. Mt chng trnh c lp trnh sn v c hot ng nh mt qu
bomb my tnh. Qu bomb ny gm 6 pha, mi pha yu cu mt input ring ngt
pha. Nu input sai, bomb s n v tr chi kt thc.
ph hp vi nng lc ca trng UIT, ngi bin son ti cu trc li cc pha
nh sau:
B pha c bn : Pha 1 , 2 , 3
B pha trung bnh kh : Pha 4 v 5
B pha rt kh : Pha 6
kh ca mi pha c nh gi bng du (*) nh sau:
Pha 1: *
Pha 2: **
Pha 3: ***
Pha 4: *****
Pha 5: ****
Pha 6: ******
Trong bi lab ny sinh vin s gii mi pha ca Bomb khi thc thi file thc thi
bomb v ghi li p n vo file dng text.
2.2 Cch thc chy file v gii Pha
nh km theo bi lab ny l mt file thc thi ELF trn h iu hnh linux c tn
bomb.
Dng lnh file trn linux xem thng tin ELF ca file.
Dng lnh chmod cho file chy ton quyn r, w, x
Dng lnh strings c s lc ni dung trong file.
Hng dn ti chng trnh IDA v Remote Desktop Debuging:
Cc bn ti chng trnh IDA Pro 6.6 trong link sau:
https://www.dropbox.com/s/klhyb93a1wmk26y/IDAPro6.6full.7z?dl=0
Gii nn v copy th mc IDAPro6.6full vo C:\Program Files\
Double click v th mc IDAPro, vo th mc dbgsrv copy file linux_server v
linux_serverx64 vo th mc cha file bomb trn my linux
Trong my Linux, cd vo th mc cha 3 file , chy lnh:
chmod 777 *
./linux_server
Copy file bomb ln my windows chy IDA. Trn my windows, chy chng trnh
IDA bn 32bit. Trong ca s IDA: Quick Start hin ra chn New, chn file bomb.
Trn thanh menu, chn Debugger/Select Debugger, chn Remote Linux Debugger.
Bm start process ( du mi tn mu xanh l), mt ca s hin ra hi thng tin ca
Linux debugger. Ta nhp nh hnh
Mc Hostname nhp IP ca my linux. Mc Password l password ng nhp ca
my linux. Sau bm OK. Lc ny chng trnh s t lin kt vi file linux_server
trn my linux debug.
Ti y cc bn sinh vin phi t tm hiu thm v IDA v ngn ng assembly
hon tt vi lab. im ca bi lab s c tnh nh sau:
Pha 1: 2 im
Pha 2: 2 im
Pha 3: 3 im
Pha 4: 1 im
Pha 5: 1 im
Pha 6: 1 im
1. Chun b
- Chng trnh IDA 6.6
- File source code ca Bom Lab gm cc file: bomb
- My Windows chy IDA dng cho qu trnh debug
- My o Linux cha source code ca Bomb Lab.
2. Thc hin
2.1 Thit lp mi trng
Thc thi th file bomb trn Linux: thc thi file ta c th thy ta cn nhp mt
input, v ban u cha bit input cn nhng yu cu g nn chng trnh thng bo sai
v thot.
Sau khi m file bomb trong IDA, m View -> Open Subviews -> Functions
hin ca s mt s function c trong file. Cc chng trnh thng bt u vi mt s
hm c tn l start hay main, ta th xem xt t nhng hm ny trc.
Trn IDA, dng icon xem hot ng qua tng dng code ca hm
main. Ta chy n dng xut hin trong ln chy th trc : Welcome to my
fiendish little bomb. You:
Hm main y gi mt hm read_line c input t ngi dng, sau a
vo %eax trc khi gi phase_1 (pha 1), nh vy c th thy hm main c mt
input t ngi dng v truyn tham s ny cho pha 1. Tng t main cng c input
t ngi dng v truyn cho cc pha khc. Nu cc pha ny tr v bnh thng th s
gi phase_defused(), y l hm c gi khi pha c gii thnh cng. Vy yu cu
cn thc hin l lm sao cc pha c gi vi input c nhp tr v bnh thng.
Pha 1
y ta function c tn l phase_1, y l phn source code ca pha 1.
Nhp p chut vo tn hm xut hin m assembly ca pha.
Vi phn code ny, trong qu trnh debug, ta thu c hot ng sau: khi gi tr
i t 1 cn nh hn hoc bng 5:
- Ly (i + 1)*a[i 1] a vo eax
- So snh eax v a[i]
- Nu khng bng s nhy n explore_bomb, bng th tip tc vng lp
T ta suy ra c quy lut: vi cc s cn nhp, a[k] = a[k-1]*(k+1) vi k
t 1 n 5 v a[0] = 1, ln lt c cc phn t c gi tr:
- a[0] = 1
- a[1] = a[0]*(1 + 1) = 1*2 =2
- a[2] = a[1]*(2 + 1) = 2*3 =6
- a[3] = a[2]*(3 + 1) = 6*4 = 24
- a[4] = a[3]*(4 + 1) = 24*5 = 120
- a[5] = va[4]*(5 + 1) = 120*6 = 720
Vy dy s cn nhp l: 1 2 6 24 120 720
Kim tra kt qu:
Pha 3
Vi phng php 2 pha trc, pha 3 khng th xem m gi ca phase_3 (v
mt s l do).
thc hin ta tin hnh debug tng dng m assembly ca pha ny. Chn
function phase_3 (nhp p chut). Ta thu c kt qu m assembly ca phase_3:
Ch dng lnh a ch 0x08048BB1 c mt chui format dng %d %c
%d sau gi hm sscanf(), ta c th on c u vo ca phase_3 c th l b 3
tham s gm 1 s nguyn 1 k t 1 s nguyn. t breakpoint u pha 3 v
debug:
Phn tch tip hot ng sau khi c d liu vo. on code ny, lnh cmp
c dng so snh gi tr ebp + var_C, tc l n1 trn vi s 7, nu ln hn th
nhy n mt a ch no . y ta nhp n1 l 5, nn s thc hin tip lnh a gi
tr ca n1 vo thanh ghi %eax v thc hin 1 lnh nhy no lin quan n
off_80497E8.
hiu r v thng s ny, nhp p chut v c kt qu sau: y l mt
bng jump table ca cc trng hp ca cu lnh switch vi nhiu trng hp khc
nhau tng ng vi n1. C tt c 9 trng hp lin quan n gi tr s ban u, trong
c mt trng hp default lun n.
Pha 5
Chn function c tn phase_5, nhn F5 xem c m gi:
T d liu u vo l a ch ca mt mng k t, cu lnh so snh
string_length cho thy mng a1 ny cn c 6 k t no . Trong pha ny, c dng
n mt mng c tn l array_123, p chut vo tn ny xem d liu ca n:
Pha 6
Chn function c tn phase_6 xem m gi ca pha 6:
T hm read_six_number() phn tch phase 2, ta c d liu nhp vo
gm 6 s nguyn v c lu trong mng v14.
Vng lp do-while thc hin cng vic sau:
- Kim tra gi tr ca s nhp tr i 1 c ln hn 5 hay khng. Nu c th n
bom.
- Vi s nhp, so snh n vi cc phn t pha sau n xem c ging nhau hay
khng. Nu c th n bom
Cn nhp vo 6 s nguyn nh hn hoc bng 6 v khc nhau tng i mt.
Phn code sau c s dng mt thng s l &node1, nhp p vo tn ny
xem d liu ca n. y l mt bin ca chng trnh, ngoi ra ta cn c th thy mt
s bin tng t gn nh node2, node3, node4