Radare2: Esimesed muljed

link: https://www2.cs.uic.edu/~s/musings/radare2-first-impressions/

Update (2016-11-01): Radare2 looja, on teatanud mulle, et kõik küsimused, ma tõin allpool on fikseeritud.

Eile, ma mängitakse radare2 esimest korda. See ei ole tõesti minna hästi. https://www.cs.uic.edu/~s/musings/radare2-esimene-muljed/

.@stevecheckoway fikseeritud ma kõiki teemasid, mida sa ütled pärast. igatahes, r2 ei ole kaugeltki täiuslik, kuid kõik, mis töötab, kui sa seda kasutada korralikult

Ma olen veetnud õiglane bit aeg reverse engineering püsivara abil IDA. Ma ei ole kunagi täiesti rahul IDA. See paranes uue UI ja Pythoni suusasidemed, kuid ma arvan, et see on takistanud varakult disain otsuseid. (Nimi, vaid üks, see on võimatu segmendi olla mitte 16-bait joondatud, mis on hold-üle Inteli 8086. 34-aastane Intel 80286 kasutusele kaitstud režiim, mis toetab suvalise segmendi viimine ja IDA ei saa lihtsalt hakkama.) Ikka, ma olen mõõdukalt edukas reverse engineering firmware mitmesuguseid protsessori arhitektuuri abil IDA. Kahjuks, IDA on kallis. Nagu, tõesti, väga kallis.

Mitu konkureerivat vahendid on viimasel ajal muutunud populaarseks. Eile, ma andsin radare2 spin esimest korda. Ma hakkasin lugedes läbi Radare2 Raamat. Peaaegu kohe, ma märkasin, et mõned kummalised valikuid. Näiteks rax2 tool on väga unintuitive (mulle) liides.

Vaata fotot Twitteris

Mishmash, eesliited, sufiksid, ja eesliide muudatusi. Kas keegi leian, et see on intuitiivne?
Parem disain: üheselt sisend; määrata väljundi?

Kuid iga uus vahend ei kavatse võtta aega, et õppida, nii et ma vajutatakse. Ma kompileeritud ja paigaldatud peamine radare2 kahendfaile. Kui esimene katse, jooksin r2 /usr/bin/true ja sisestada visual režiimile V command.

r2-visuaalne

Seni on nii hea! Kuna radare2 kasutab vim-esque liikumise peamised seosed (hjkl), ma kerida ümber natuke, kuid peaaegu kohe märganud midagi, imelik. Olles kerida allapoole, kui (j) ja siis tagasi üles, kui (k), ma tahaks loota, et vaata sama asi nagu enne, kuid selle asemel, ma saan selle.

r2-visual-kerida
Nii see juba natuke liiga palju, aga oota, mis see call qword [rbp + 0x48]? Ilmselt ta otsustas kolida ff bait, mis eelneb main sisse peamine, seega muutmine lahtivõtmine! Tegelikult, kerimine paremale või vasakule, muutub offset algusest lahtivõtmine. Nii lähedal, nagu ma ei saa öelda, vasak decrements nihe ühe, õige sammuga see üks, kuni decrements see neli ja alla kasvatab, see suuruse järgi juhiseid. Ma kujutan ette, miks üks võib soovi sarnast funktsionaalsust, kuid see on üllatav, et see oleks default.

Pärast täites mõne koodi analüüs (käsk aa), see probleem kaob ja üles-alla kerida korraldust. Vasakule ja paremale hoida oma käitumist.

Järgmisena: visuaalne panel mode (käsk ! visual mode). See tundub tore (kuigi nooled ei tundu, et seoses UTF-8 seadistusest.) Kahjuks see režiim tundub väga lollakas. Näiteks, kohe pärast avamist visuaalne panel mode, avamine File menu ja valides Close kaks korda põhjustab r2, et segfault. Ma olen suutnud muud segfaults selles režiimis välja, kuid ma ei ole päris kindel, mis põhjustas neile. See meenutab mulle, palju GDB Teksti Kasutajaliides (TUI) režiimi, mis jookseb sisuliselt iga kord, kui ma seda kasutada.

Pärast täidab analüüse, mis võib aega võtta, ümbernimetamine funktsioone või lisada kommentaare, see oleks tore, et oleks võimalik salvestada oma töö ja tagasi tulla. Radare2 on mõiste, projekti. P käsu abil saab avada ja salvestada projekte.

[0x100000f33]> P?
|Usage: P[?osi] [file]Project management
| Pc [file]    show project script to console
| Pd [file]    delete project
| Pi [file]    show project information
| Pl           list all projects
| Pn[j]        show project notes (Pnj for json)
| Pn [base64]  set notes text
| Pn -         edit notes with cfg.editor
| Po [file]    open project
| Ps [file]    save project
| PS [file]    save script file
| NOTE:        See 'e??prj.'
| NOTE:        project are stored in ~/.config/radare2/projects

Nii, let ‘ s anda, et tulistas. Esiteks, ma käivita r2 /usr/bin/true uuesti käivitada aa ja seejärel salvesta projekt.

[0x100000f33]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0x100000f33]> Ps true
true

See loob ~/.config/radare2/projektid/true kataloogi, mis sisaldab kahte faili.

$ ls -l ~/.config/radare2/projects/true
total 68
-rw-r--r-- 1 steve staff 64653 Oct 29 14:26 rc
-rw-r--r-- 1 steve staff  1393 Oct 29 14:26 xrefs

Seni on nii hea. Nüüd, et ma olen päästetud projekti, ma peaks olema võimalik seda näha projektide loetelu kasutades Pl command.

[0x100000f33]> Pl
[0x100000f33]> Pl?
[0x100000f33]>

Ma arvan, et ei ole? Okei, ma püüan otsib üks bait edasi, lihtsalt selleks, et muuta riigi natuke ja siis uuesti projekti.

[0x100000f33]> s +1
[0x100000f34]> Po true
Close current session? (Y/n)
[0x100000f33]>

Okei, mis tundub hea. Kuna ma läbi aa enne salvestamist projekti, kindlasti, et teave on salvestatud, eks? Ei, ei see ei olnud. Ma ei tea, miks. See tundub päris oluline teave päästa.

Kasutades -p command line lipu all, saame avada projekti. Mis tundub mugav. Lõpliku projekti juhtimise katse, ma avatud projekti -p, küsi projektide nimekirja ja seejärel sulgege ja salvestada.

$ r2 -p true
[0x100000f31]> Pl
[0x100000f31]> q
Do you want to save the 'true' project? (Y/n)
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/nop.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/mov.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/const.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/arithm.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/arithm_ct.tmp' for writing.

Kuna rc on fail, mis ei ole kataloog, säästa ei suuda. Ma ei tea, miks. Avamine projektiga, kasutades Po ja siis säästmine on sama käitumine. Ma arvan, et projektid ei ole kasutatav.

Lõpuks võtsin pilk natuke laiema radare2 ökosüsteemi. Radare2 kaasas paketi manager r2pm, mille saab installida pakette. Esimene up, webui paketid. Järgmised suunad, üritasin installida www-m.

$ r2pm -i www-m
Processing www-m ...
Already up-to-date.
Install Done For www-m
make -C www/m build
...
/Users/steve/.config/radare2/r2pm/db/www-m: line 11: cd: dist/m: No such file or directory

So that didn’t work. What about the Python-GTK UI, Bokken?

$ r2pm -i bokken
Processing bokken ...
...
Install Done For bokken
abort: error: Connection refused
sys/bokken.sh: line 14: cd: bokken: No such file or directory

Nii r2pm paigaldatud, kuid siis ei suutnud kaks korda. Kuna r2pm -l väidab, Bokken on installitud, aga installi selgelt ebaõnnestunud, proovime selle eemaldamist.

$ r2pm -u bokken
Processing bokken ...
Already up-to-date.
Uninstall Done For bokken
Sorry. This package cannot be uninstalled

Võib-olla paketi manager ei ole ajakohane.

$ r2pm update
Already up-to-date.
r2pm database initialized. Use 'r2pm update' to update

Miks update käsk ütle mulle joosta update?

Okei, viimane asi. IDA saab dekompileerida kahendfaile mitu arhitektuuri arvesse C (eeldades, et sa pole poetatud läbi isegi rohkem raha decompiler). Radare2 on pakett, mida saab teha, et kuigi ma saan aru, see on veel lõpetamata. Ikka, see võiks olla kena, vaba alternatiiv.

Ma säästa sadu ridu, vigu, mis tulenevad jooksvate r2pm -i radeco.

Kokkuvõttes, mul oli päris masendav päev mängides radare2. Tundub, et see võiks olla tore alternatiiv, et kulutada tuhandeid dollareid IDA, aga niipalju kui ma võin öelda, et see on praegu lollakas ja kasutamiskõlbmatuks.