windows - dekompilere en c dll for at bruge pinvoke on

Indlæg af Hanne Mølgaard Plasc

Problem



Kan du dekompilere en c dll for at bruge pinvoke på eller bruge reflektor?


Hvordan får jeg metodenavne og underskrifter?

Bedste reference


Du skal blot sige, at der ikke er nogen trivial måde at gøre, hvad du vil. Du kan dog bruge et disassembler-bibliotek, som for eksempel forkert til at adskille koden omkring de eksporterede indgangspunkter. Der er nogle heuristikker man kan bruge, men mange af dem vil kun arbejde med 32bit-opkaldskonventioner (\_\_stdcall og \_\_cdecl). Personligt finder jeg Python-bindingerne for det nyttigt, men libdasm kan gøre det samme. [10] [11]


Ethvert andet værktøj med disassemblerfunktioner vil være af stor værdi, såsom OllyDbg eller Immunity Debugger.


Bemærk: Hvis du har et program, der allerede kalder den pågældende DLL, er det meste af tiden meget umagen værd at køre det under en debugger (naturligvis kun hvis koden kan stole på, men dit spørgsmål betyder i det væsentlige at) og sætte breakpoints på de eksporterede funktioner. Fra det tidspunkt kan du udlede meget mere fra kørselstiden og stakken indholdet af det løbende mål. Dette vil dog stadig være vanskelig - især med \_\_cdecl, hvor en funktion kan tage et vilkårlig antal parametre. I så fald skal du sigtes gennem opkaldsprogrammet for xrefs til den respektive funktion og aflede fra stakoprydning efter call hvor mange parametre/bytes det kasseres. Selvfølgelig ser man på push]] instruktioner før call vil også have en vis værdi, selv om det kræver en lille oplevelse, især når der er indkaldt ninger, og du skal skelne hvilken push tilhører hvilken call.


I grund og grund er du nødt til at udvikle et minimalt sæt heuristik, der passer til din sag, medmindre du allerede har licenseret et af de dyre værktøjer ( og ved hvordan du kan bruge dem), der følger med deres egen heuristik, der normalt har været finjusteret i lang tid.


Hvis du tilfældigvis ejer en IDA Pro (eller Hex-Rays plugin) licens, skal du selvfølgelig bruge det. Også freeware-versionerne af IDA kan selvfølgelig håndtere 32bit x86 PE-filer (som selvfølgelig indeholder DLL'er), men licensen kan være en hindring her afhængigt af det projekt, du arbejder på ('Ingen kommerciel brug tillades '). [12] [13]

Andre referencer 1


Du kan bruge afhængighedsvælger.


http://www.dependencywalker.com/[14]

Andre referencer 2


Du kan finde de eksporterede funktionsnavne med dumpbin eller Dependency Walker. Men for at vide, hvordan man ringer til de funktioner, du virkelig har brug for en headerfil og noget dokumentation. Hvis du ikke har dem, så bliver du nødt til at omdanne DLL'en, og det er en meget udfordrende opgave.