Det här är från IDA Pro-boken, men även IDA, så bra som det är, är fortfarande i slutändan gissningar. Svaren här är från "The IDA Pro Book" av Chris Eagle.
- "Varför finns det inga demonterare som kan generera ommonterbar ASM-kodinriktning på godartat program (en utan fördunkling)? "
Kompileringsprocessen är förlorad.
På maskinspråknivån finns det inga variabel- eller funktionsnamn, och information av variabel typ kan endast bestämmas av hur data används snarare än uttryckliga typdeklarationer. När du observerar 32 bitar av data som överförs måste du göra en del undersökningsarbete för att avgöra om dessa 32 bitar representerar ett heltal, ett 32-bitars flytpunktsvärde eller en 32-bitars pekare.
Kompilering är en många-till-många-operation.
Detta innebär att ett källprogram kan översättas till monteringsspråk på många olika sätt, och maskinspråk kan översättas tillbaka till källan på många olika sätt. Som ett resultat är det ganska vanligt att kompilera en fil och omedelbart dekompilera den kan ge en helt annan källfil än den som matades in. Dekompilatorer är mycket språk- och biblioteksberoende. Bearbetning av en binärproducerad av en Delphi-kompilator med en dekompilator som är utformad för att generera C-kod kan ge mycket konstiga resultat. På samma sätt kan matning av en kompilerad Windows-binär genom en dekompilator som inte har kunskap om Windows-programmerings-API: t kanske inte ge något användbart.
I grund och botten kräver det fortfarande mänskligt omdöme. Den bästa analogin jag har hört är att kompilera en binär från källan är som att beräkna en Hash.
- "Om jag vill implementera ett sådant verktyg (utan hjälp av IDA Pro, skissar från början), är det möjligt?"
Detta låter för mig som en intressant teoretisk forskningsfråga: Kan sammanställning verkligen ses som genererande en hash-signatur? Min tarm säger "Ja." Matematiken skulle vara väldigt invecklad och skulle antagligen behöva göras med ett bevisbart språk. Vi använder vanligtvis hashes eftersom de inte är lätta att omvandla. Men du kan fortfarande attackera hash med saker som regnbågsbord, så det finns ett megaprojekt att tänka på. Min instinkt berättar att regnbågsbord på alla möjliga binärer är NP-Complete.
Tänk också på att bestämma datatyper kräver ganska mänskligt omdöme, och vi är fortfarande inte så bra på att automatisera den typen av intelligens. Är det möjligt? Kanske. Det finns en anledning till att smarta människor fortfarande gör verktyg som IDA.
- "Finns det några andra bekymmer relaterade till detta som jag kanske har missat?"
Jag är ny när det gäller demontering till de stora pojkarna, men förhoppningsvis svarade jag åtminstone på frågan om varför det är så svårt att göra vad du frågar.
Eagle, Chris (2011-06-16). IDA Pro Book: Den inofficiella guiden till världens mest populära demonterare (Kindle Locations 151-152). Ingen stärkelsepress. Kindle Edition.