Spørsmål:
Hvordan optimaliserer du AST-er eller konverterer dem til et ekte språk
Stolas
2013-06-25 13:41:29 UTC
view on stackexchange narkive permalink

Jeg har vært interessert i automatisk sårbarhetsvurdering og dekompilering av kode en stund nå. Og som et resultat har jeg bygget parsere i Python som leser en søppel, demonterer instruksjonen ved instruksjon mens jeg sporer kjøringen (slik IDA gjør det).

Jeg har sporet forurensede registre (forurenset som i brukerinngang) for å sjekke når slike registre tillater oss å sette opp en samtale eller et hopp.

Denne undersøkelsen har vokst til det punktet hvor jeg vil transformere den til en dekompilator. Jeg har sett på boomerang og andre dekompilere med åpen kildekode. Jeg har også tatt en rask titt inn i dragen-boken (jeg eier den ikke). Jeg vil gjerne høre hva dere synes om denne ideen. Nedenfor er oversikten min:

  1. Åpne den binære filen for å dekompilere.
  2. Oppdag en filtype (PE eller ELF) for å velge EP og minneoppsett.
  3. Gå til EP og følg kjøringsveien til koden mens du demonterer. Jeg bruker udis86 til det. Denne utførelsen er på en slags måte.
  4. Analyser den resulterende forsamlingen som et mellomspråk. For å få instruksjoner for enklere (f.eks. Fjern alltid ting som SHL EAX, 0x02 og endre disse tingene til MUL instruksjoner).
  5. Analyser det i et abstrakt syntaks-tre.
  6. Optimaliser AST (selv om jeg ikke aner hvordan).
  7. Transformer AST til noe som ser ut som C.

Jeg har problemer med de to siste trinnene. Hvordan analyserer noen AST til et ekte språk eller noe som ser ut som det? Hvordan optimaliserer du AST-er? Finnes det C- eller Python-biblioteker for å oppnå det?

Du kan være interessert i å lese Python-kildekoden for den nylig utgitte ida-dekompilatoren: https://github.com/EiNSTeiN-/ida-decompiler
En svar:
Igor Skochinsky
2013-06-25 14:15:59 UTC
view on stackexchange narkive permalink

Det klassiske arbeidet med dekompilering er Cristina Cifuentes doktorgradsavhandling "Reverse Compilation Techniques". Hun beskriver generering av C-kode i kapittel 7.

Forfatteren av REC-dekompilatoren har også et fint sammendrag om dekompileringsprosessen, selv om det er mer uformelt:

http: //www.backerstreet.com/decompiler/introduction.htm

For fullstendighet, her er Ilfaks whitepaper on the Hex-Rays decompiler, selv om han kaster et blikk over dette spesifikke problemet, bare nevner at det Veldig grei og enkel ":):

http://www.hex-rays.com/products/ida/support/ppt/decompilers_and_beyond_white_paper.pdf



Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...