Radare2: Första intrycket

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

Update (2016-11-01): Radare2 skapare har informerat mig om att alla de frågor jag nämner nedan har rättats till.

Igår spelade jag med radare2 för första gången. Det gjorde inte riktigt gå bra. https://www.cs.uic.edu/~s/funderingar/radare2-första-intryck/

.@stevecheckoway jag fixat alla de frågor som du säger i inlägget. men hur som helst, r2 är långt ifrån perfekt, men allt fungerar om man använder det på rätt sätt.

Notera noga med den dag då detta publicerades. Det är fullt möjligt att alla de problem jag nämner nedan har sedan länge varit fast.

Jag har tillbringat en rättvisa lite vända. teknik firmware med IDA:. Jag har aldrig varit helt nöjd med IDA. Det förbättrade dramatiskt i och med det nya ANVÄNDARGRÄNSSNITTET och Python-bindningar, men jag tror att det har varit svårt att tidigt utforma beslut. (För att nämna en, det är omöjligt för ett segment för att inte vara 16-byte linje som är en håll-över från Intel 8086. Den 34 år gamla Intel 80286 infördes skyddat läge som stöder godtycklig segment anpassning och IDA bara inte kan hantera det.) Fortfarande, jag har varit måttligt framgångsrika reverse engineering firmware för ett brett utbud av processor-arkitekturer med IDA. Tyvärr, IDA är dyrt. Som, verkligen, verkligen dyr.

Flera konkurrerande verktyg, som nyligen har blivit populär. Igår gav jag radare2 som är en spin för första gången. Jag började med att läsa igenom Radare2 Bok. Nästan omedelbart, jag märkte att några udda designval. Till exempel rax2 – verktyget har en mycket intuitiv (till mig) – gränssnittet.

 

Mischmasch av prefix, suffix och prefix ändringar. Är det någon som finner detta intuitivt?
Bättre design: otvetydig ingång; ange produktionen?

9:44 PM – 28 Okt 2016

Men alla nya verktyg kommer att ta lite tid att lära sig, så jag tryckte på. Jag kompilerat och installerat den viktigaste radare2 binärer. Som ett första test, jag sprang r2 /usr/bin/true och in visual-läget med V kommando.

r2 visual mode

Så långt så bra! Eftersom radare2 använder vim-esque rörelse snabbtangenter (hjkl), jag bläddrat runt lite, men nästan direkt märkte något konstigt. Efter att scrolla ner en gång (j) och sedan tillbaka upp en gång (k), jag förväntar mig att se samma sak som innan, men istället får jag detta.

r2 visual mode scrolled

Så det bläddrat lite för långt, men vänta, vad är det call qword [rbp + 0x48]? Tydligen, det beslöt han att flytta ff byte som föregick main i huvud, och därigenom förändra demontering! I själva verket, bläddrar åt höger eller vänster, förändringar förskjutning av starten av demontering. Så nära som jag kan berätta, vänster minskar den kompenseras av en rätt steg det upp minskar det med fyra, och ner steg det av storleken av undervisningen. Jag kan tänka mig varför man kanske vill ha liknande funktionalitet, men det är förvånande för att vara standard.

Efter att ha utfört analys av kod (kommandot aa), detta beteende försvinner och upp och ner för att bläddra genom en instruktion. Vänster och höger för att hålla deras beteende.

Nästa upp: visuell panel-läge (kommando ! i visuellt läge). Detta verkar snyggt (även om de pilar som inte verkar respektera UTF-8-miljö.) Tyvärr, i detta läge verkar väldigt buggig. Till exempel, omedelbart efter öppnandet den visuella panel-läge, öppna Arkiv-menyn och välja Stäng två gånger orsaker r2 till segmenteringsfel. Jag har lyckats andra segmenteringsfel i detta läge, men jag är inte helt säker på vad som orsakade dem. Detta påminner mig en hel del av GDB: s Text Användargränssnitt (TUI) läge som kraschar i stort sett varje gång jag använder den.

Efter att ha utfört analyser som kan ta lite tid, byta namn på funktioner eller lägga till kommentarer, det skulle vara bra att kunna spara mitt arbete och komma tillbaka till det. Radare2 har en uppfattning av ett projekt. P kommandot kan öppna och spara projekt.

[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

Så låt oss ge det en chans. Först ska jag köra r2 /usr/bin/true igen, kör aa och sedan spara projektet.

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

Detta skapar en ~/.config/radare2/projects/true katalogen innehåller två filer.

$ 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

Så långt så bra. Nu när jag har sparat ett projekt, jag ska kunna se det i listan av projekt med hjälp av Pl-kommandot.

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

Jag gissa inte? Okej, jag ska försöka söka ett byte framåt, bara för att ändra läget lite och sedan återuppta projektet.

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

Okej, det verkar bra. Eftersom jag utförde aa innan du sparar projektet, säkert, att informationen har sparats i rätt? Nej, nej det var det inte. Jag har ingen aning om varför. Det verkar som om ganska väsentlig information för att spara.

Hjälp -p kommandoraden flagg, kan vi öppna ett projekt. Det verkar praktiskt. Som en sista projektledning test, jag ska öppna ett projekt med -s, be om en lista över projekt och sedan avsluta och spara.

$ 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.

Sedan rc är en fil, inte en katalog, spara inte. Jag har ingen aning om varför. Öppna ett projekt med hjälp av Po och sedan spara har samma beteende. Jag antar att projekt inte är användbara.

Slutligen, jag tog en titt på lite av den bredare radare2 ekosystem. Radare2 kommer med en pakethanterare r2pm – som kan installera paket. Först upp, webui paket. Följande riktningar, jag har försökt att installera 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
 Så det fungerade inte. Vad sägs om 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

Så r2pm installerade det, men sedan misslyckats två gånger. Eftersom r2pm -l fordringar Bokken är installerat, men installationen misslyckats, låt oss prova att ta bort det.

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

Kanske package manager är inte uppdaterad.

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

Varför inte uppdatera kommandot tala om för mig att köra update?

Okej, sista sak. IDA kan dekompilera binärer för flera arkitekturer i C (förutsatt att du har kommit ut ännu mer pengar för att köra). Radare2 har en paket som kan göra det, även om jag förstår att det är fortfarande ett pågående arbete. Fortfarande, det kan vara en trevlig, gratis alternativ.

Jag kommer att bespara dig hundratals rader av fel som beror körs r2pm -jag radeco.

I sammanfattning, jag hade en ganska frustrerande dag spelar med radare2. Det verkar som det kan vara ett bra alternativ till att spendera tusentals dollar på IDA, men så långt som jag kan berätta, det är för närvarande buggy och oanvändbar.

Leave a Reply

Your email address will not be published. Required fields are marked *