Fråga:
Vilka verktyg finns för att gräva datastrukturer från platta binära filer?
gal
2014-01-20 10:45:41 UTC
view on stackexchange narkive permalink

Problemförklaring

Jag har en fil som helt består av datastrukturer; Jag har försökt hitta ett verktyg som gör det möjligt för mig att öppna den här filen och förklara (kanske) en typ och förskjutning så att jag kan arbeta med den antagna primitiva datatypen individuellt.

t.ex. Jag förklarar de 4 byte som ligger vid offset 0x04 som ett 32-bitars osignerat heltal och vill inspektera värdet på den här platsen (läs som stor-endian kanske) och arbeta sedan med detta heltal individuellt (se kanske hur det ser ut kodad som en 4-byte ascii-sträng och försök att läsa den, etc.)

Specifikationer

Jag har en 4096 bytefil som innehåller C-strukturer med medlemselement som heltal från 16 -64 bitar i längd; följande är ett exempel:

  struct my_struct {uint_32 magic} // sizeof (my_struct) == 0x04  

I detta fall, magic = 'ball ', och så när filen öppnas i en textredigerare läser den som' llab ... ', och kan självklart också representeras som ett 32-bitars heltal

Fråga

Finns det ett verktyg som möjliggör statisk analys av platta datastrukturfiler?

Vad jag hittills har betraktat som en lösning

Jag har övervägt att skriva ett kommandoradsverktyg i Python till gör detta, men om något redan finns föredrar jag att spara tid och kanske lära mig mer om detta ämne med hjälp av ett verktyg som designats av någon mer erfaren. Om det verkar för dig som om jag går fel med detta (det här är min första seriösa undersökning av denna typ av reversering), vänligen vägleda min förståelse, tack.

Där jag redan har undersökt

Googlade "reverse engineering tools" och bläddrade i länkarna

Kontrollerade wikipedias sidor för reverse engineering

Testade några första principer resonemang

Kontrollerad pypi

Resultat

Det finns tre helt giltiga och korrekta svar, men jag har markerat de mest detaljerade och billigaste av dem som korrekta, eftersom det är det mest tillgängliga för medlemmar i samhället som granskar denna fråga.

Jag antar att du redan har provat IDA. Kolla [den här länken] (http://www.devttys0.com/2012/03/writing-a-bflt-loader-for-ida/), jag är dock inte säker på att det här är vad du behöver.
troligen relaterad: http://stackoverflow.com/questions/492751/tools-to-help-reverse-engineer-binary-file-formats
Fem svar:
Jason Geffner
2014-01-20 20:13:28 UTC
view on stackexchange narkive permalink

010 Editorns binära mallar -funktionen är perfekt för denna typ av arbete. Den stöder inte bara statiska struct -definitioner, men möjliggör också dynamiska storlek struct -fält och stöder ett kraftfullt skriptspråk.

Example Template

Editing the Template Results

Polynomial
2014-01-20 16:14:57 UTC
view on stackexchange narkive permalink

Jag använder Hex Workshop för detta. Den har en massa användbara funktioner för omvänd platt-fil, men min favorit är att den låter dig deklarera strukturer i C-stil-syntax och ladda dem ovanpå en fil. Det är inte gratis, men det är mer än värt $ 90 prislappen.

Funktioner som jag tycker är mest användbara:

  • C-style struct-syntax, som stöder olika matriser, strängtyper, bitsträngar, giltighetskontroller etc.
  • Anpassningsbar datainspektör (användbart om du bara vill se data som några få typer)
  • Diffing
  • Offset-display (visar adressförskjutningar, urvalsstorlek etc.)
  • Sekvensmarkering (som "markera alla" på sök)
  • Bitvisa operationer, kontrollsummor etc.
Igor Skochinsky
2014-01-20 18:25:43 UTC
view on stackexchange narkive permalink

IDA kan användas för att arbeta med datafiler. Du kan konvertera byte till dataobjekt (byte / ord / dwords / qwords / floats / strings etc.), gruppera dem i strukturer eller matriser (eller arrays av strukturer), representera heltal som förskjutningar, lägga till namn och kommentarer och så vidare. / p>

Här är ett exempel på någon slumpmässig BMP-fil representerad i IDA:

  0000 BmHeader db 'BM'; Signatur0002 dd 146h; Storlek0006 dw 00008 dw 0000A dd offset pixel_array; förskjuten till bilddata000E; DIB header000E dd 40; storleken på denna rubrik0012 dd 33; bitmappsbredd0016 dd 33; bitmappshöjd001A dw 1; antal färgplan001C dw 1; bitar per pixel001E dd 0; kompression: none0022 dd 108h; storlek på bilddata 0026 dd 4724; horisontell upplösning (pixlar per meter) 002A dd 4724; vertikal upplösning (pixlar per meter) 002E dd 0; färger i paletten0032 dd 0; antal viktiga färger0036; Färgtabell0036 dd 0, 0FFFFFFh003E; pixeldata003E pixel_array db 1, 73h, 13h, 6, 80h, 3 dup (0), 7Dh, 4Bh, 0E0h, 56h  
Thomas Weller
2016-07-07 11:48:39 UTC
view on stackexchange narkive permalink

Hexinator

  • har en liknande funktion som binära mallar för 010 Editor som kallas en "grammatik". Det gör det möjligt att infoga siffror, strängar, strutar och binära blobbar. Om det inte räcker har det skriptfunktioner i Python och Lua

  • värdena kan sedan redigeras snyggt (t.ex. i decimal istället för hex). Hexområdet kan markeras.

Nackdelar:

i skrivande stund verkar det ha problem med mer än en öppen grammatik + en öppen fil. När du öppnade en andra fil för samma grammer kraschade den. Spara tidigt och spara ofta.

Skärmdump av en delvis analyserad fil:

Screenshot

detta är den enda fria stödstrukturen! Men jag har ännu inte räknat ut hur jag installerar dem: menyalternativet "ladda ner" fungerar inte, och jag ser inget alternativ att ladda en grammatik från hårddisken. Men om jag dubbelklickar på en .grammatikfil ser det ut som om den blir "installerad" ...
@jumpjack: har du en sådan meny: https://i.stack.imgur.com/3x39O.png? Annat än det är det inte precis gratis. Många funktioner kräver en licens efter att testperioden löper ut.
En grammatik visas bara i listrutan om jag dubbelklickar på en .grammatikfil i utforskaren. annars har jag bara möjlighet att SKAPA en grammatik.
Andy Key
2014-12-11 18:03:15 UTC
view on stackexchange narkive permalink

Jag använder min binära redaktör för den här typen av uppgifter http://www.nyangau.org/be/be.htm



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