Spørgsmål:
Hvad er importrekonstruktion, og hvorfor er det nødvendigt?
user2142
2013-05-31 03:15:57 UTC
view on stackexchange narkive permalink

Når jeg læser om udpakning, ser jeg nogle gange et "importrekonstruktion" -trin. Hvad er dette, og hvorfor er det nødvendigt?

En svar:
Rolf Rolles
2013-05-31 03:47:33 UTC
view on stackexchange narkive permalink

I en typisk ikke-pakket Windows PE-eksekverbar header indeholder metadata, der beskriver operativsystemet hvilke symboler fra andre biblioteker, som den eksekverbare er afhængig af. Operativsystemets loader er ansvarlig for at indlæse disse biblioteker i hukommelsen (hvis de ikke allerede er indlæst) og for at placere adresserne på de importerede symboler i strukturer (hvis placeringer også er specificeret af metadataene) i eksekverbar hukommelsesbillede. På den anden side ødelægger pakkerne ofte disse metadata og udfører i stedet selve opløsningstrinnet (som normalt ville blive udført af læsseren). Målet med udpakning er at fjerne beskyttelsen fra binærsystemet, inklusive de manglende importoplysninger. Så analytikeren (eller udpakningsværktøjet) skal bestemme den samling af importer, som pakkeren indlæser for den eksekverbare, og genskabe metadata inden for den udpakkede eksekverbare billede, der får operativsystemet til at indlæse importen korrekt som normalt.

Typisk i disse situationer bestemmer analytikeren, hvor importoplysningerne ligger i eksekverbarens hukommelsesbillede. Især finder analytikeren normalt IMAGE_THUNK_DATA -arrayerne, som er NULL -terminerede arrays, der indeholder adresserne på importerede symboler. Derefter vil analytikeren køre et værktøj, der grundlæggende udfører det omvendte af GetProcAddress : givet en af ​​disse markører til importerede symboler, bestemmer den i hvilken DLL markøren er, og hvilken specifik eksporteret post der henvises til ved markøren. Så for eksempel kan vi løse 0x76AE3F3C til Kernel32! CreateFileW . Nu bruger vi denne tekstinformation til at genskabe IMAGE_IMPORT_DESCRIPTOR strukturer, der beskriver hver importerede DLL, bruge de originale adresser til IMAGE_THUNK_DATA arrays, gemme navnene på DLL'er og importerede symboler et eller andet sted i binær (måske i et nyt afsnit), og peg posterne IMAGE_THUNK_DATA til disse nye navne.

ImpRec er et populært værktøj, der automatiserer de fleste eller alle afhængigt af pakkeren. Det, jeg lige har beskrevet, afspejler virkeligheden i omkring 95% af tilfældene. Mere seriøs beskyttelse som f.eks. Kopibeskyttelse til videospil og vanskelig brugerdefineret malware bruger yderligere tricks, der forhindrer genopbygningsprocessen.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...