Fråga:
Hur använder jag radare2 för att ta isär en körbar fil?
lsamarahan
2017-04-28 12:53:25 UTC
view on stackexchange narkive permalink

Jag har en cgywin körbar fil (ska vara i PE-format) och vill ta isär den för att få samlingskoden i textavsnittet med radare2, de flesta exemplen demonterar per instruktion istället för en hel fil.

Jag skrev radare2 filnamn sedan, pdf , det stod

  p: Kan inte hitta funktionen vid 0x100401000  

Vad saknar jag?

All hjälp uppskattas verkligen.

Jag ber om ursäkt om något, men RTFM!
Två svar:
perror
2017-04-28 13:43:23 UTC
view on stackexchange narkive permalink

Först måste du förstå att kommandot pdf används för att demontera funktioner, så du måste först leta efter funktionsstartpunkter (jag tror att de använder symboler och några andra heuristik för att hitta Det).

För att få en automatisk analys av funktionerna, skriv bara aaa först. Det kör mest av den nödvändiga analysen på den körbara filen. Skriv sedan pdf.

Om du bara vill ha en rå demontering utan funktionsanalys skriver du bara pd.

logiken bakom radarkommandona är att varje tecken i kommandot har en mening och bygger trädliknande kommandofamilj.

Till exempel är " p " för kommandofamiljen "printing". Försök att skriva p? , du får följande:

  [0x00005430] > p? | Användning: p [= 68abcdDfiImrstuxz] [arg | len] [@ addr] | p = [?] [bep] [blks] [len] [blk] visa entropi / utskrivbara tecken / teckenstaplar | p2 [len] 8x8 2bpp-brickor | p3 [fil] skriva ut stereogram (3D) | p6 [de] [len] base64 avkoda / koda | p8 [?] [j] [len] 8bit hexpair-lista över byte | pa [edD] [arg] pa: montera pa [dD]: disasm eller pae: esil från hexpairs | pA [n_ops] visa n_ops adress och typ | p [b | B | xb] [len] ([skip]) bindump N-bitar som hoppar över M | pb [?] [n] bitström från N-bitar | pB [?] [n] bitström från N byte | pc [?] [p] [len] output C (eller python) format | pC [d] [rader] skriva ut demontering i kolumner (se hex.cols och pdi) | pd [?] [sz] [a] [b] demontera N opcodes (pd) eller N byte (pD) | pf [?] [. nam] [fmt] skriva ut formaterade data (pf.name, pf.name $ <expr>) | ph [?] [= | hash] ([len]) beräkna hash för ett block | p [iI] [df] [len] skriv ut N ops / byte (f = func) (se pi? och pdi) | pm [?] [magi] skriva ut libmagiska data (se pm? och / m?)
| pr [?] [glx] [len] skriv ut N råa byte (i rader eller hexblock, 'g'unzip) | p [kK] [len] utskriftsnyckel i slumpmässigt konst (K är för mosaik) | ps [?] [pwz] [len] skriv ut pascal / breda / nollavslutade strängar | pt [?] [dn] [len] skriv ut olika tidsstämplar | pu [?] [w] [len] skriv ut N url-kodade byte (w = bred) | pv [?] [jh] [mode] visar variabel / pekare / värde i minnet | p - [?] [jh] [mode] bar | json | histogramblock (läge: e? search.in) | px [?] [owq] [len] hexdump av N byte (o = oktal, w = 32bit, q = 64bit) | pz [?] [len] utskriftszoomvy (se pz? för hjälp) | pwd visar aktuell arbetskatalog  

Sedan står den andra bokstaven ( d ) för "demontera", försök pd? :

  [0x00005430] > pd? | Användning: p [dD] [ajbrfils] [sz] [arch] [bitar] # Demontering av tryck | OBS: len-parametern kan vara negativ | OBS: Om du trycker på ENTER på det tomma kommandot upprepas det sista pd-kommandot och försöker också avsluta det demonterade intervallet pd N demontera N-instruktioner | pd -N demontera N-instruktioner bakåt | pD N demontera N byte | pda demontera alla möjliga opkoder (byte per byte) | pdb demontera grundblock | pdc pseudo disassembler output i C-liknande syntax | pdC visar kommentarer som finns i N-instruktioner | pdk demontera alla metoder i en klass | pdj demontera till json | pdr rekursiv demontering över funktionsdiagrammet | pdf-demonteringsfunktion | pdi som 'pi', med offset och byte | pdl visa instruktionsstorlekar pds [?] demontera sammanfattning (strängar, samtal, hopp, refs) (se pdsf och pdfs) | pdt demontera felsökningsspåren (se atd)  

Som du kan se, står pdf för "demontera funktion".

Men om du vill ha en rå demontering av ett minnesområde, är pd förmodligen det du behöver. Det demonteras blint från den aktuella adressen upp till vissa minnesfönster. Om du vill ta isär på en exakt adress använder du pd @ 0xdeadbeef .

Ja, jag lyckades leka med 'pd' i min körbara fil. Min fil har en .text-sektion 6.5K (byte?), Hur ska jag extrahera hela .text-avsnittet och dumpa till en utdatafil? Jag ska veta den sista adressen till textavsnittet för att göra detta? tack!
Du kan förstora fönstret för kommandot `pd` genom att skriva` pd nb_instr @addr`. Till exempel: `pd 1000 @deadbeef`.
kaosengr
2018-03-23 19:47:12 UTC
view on stackexchange narkive permalink

utskriftsdemonteringsstorlek omdirigerar utdatafilnamn

  • pd : skriv ut demonterad kod
  • $ s : storleken på körbar tilldelas denna variabel av radare2
  • > : omdirigera utdata till fil
  • output_filename: output skriven till den här filen

så försök:

  pd $ s >myfile.asm  

Eller, (s) eek till början av .textavsnittet sedan (p) rint (D) isassemble N bytesN beräknat från slutet av .textavsnittets adress (avsnitt_änd..text) minus början .textavsnittets adress (avsnitt..text):

  sektion. .textpD section_end..text-section..text > myfiles.txt  

Om din körbara fil har flera sektioner måste du lägga till sektionsnumret efter namnet (t.ex. avsnitt .. text.0). Hitta sektionernas namn genom att lista dem alla (S) ection list:

  S  

P.S. Jag lär mig bara hur jag använder radare2 själv.

Medan du är på det: Jag tror att du inte ville ha `S` utan` iS`. Det finns inget `S`-kommando, men` iS` visar information om tillgängliga sektioner.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...