dll - Hvordan kan jeg reverse engineer krypterede pakker i en windows app?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en Windows Exe app, der bruges til at sende pakker til en server i klare. Denne app (lad os kalde det klientens app) er bestemt tæt hentet, men nogle kloge hacker hex-redigerede binæret, og fik det til at sende pakker, der er forvrengt.


Nu er disse pakker naturligvis krypteret på en måde, der kan deklareres (ellers ville serveren ikke kunne forstå det), men det jeg ønskede at gøre er at skrive en emulator, der emulerer denne binære app, sende de samme pakker til server, og at kunne afkode svaret (hvis det er krypteret).


Den hex-ed klient krævede en ekstra dll for at kunne køre, hvilket den gamle klient ikke gjorde. Jeg antager, at den hex-ed klient på en eller anden måde formåede at indlæse den dll (lader kalde det client.dll) og funktionen af ​​den dll er at gennemføre scrambling/unscrambling ved at hænge i nogle windows api, der omdirigerede alle pakker sendt fra client.exe-processen.


Hvis der er nogen der kan lede mig til, hvordan man endda kan komme i gang med at finde ud af, hvordan det hele virker, og hvordan jeg kan omdanne engineering scrambing, ville det virkelig værdsættes.


Jeg har ingen idé om, hvilken slags oplysninger der skal leveres, men hvis der mangler noget, skal du bare svare, og jeg vil skrive med flere detaljer, og hvis nogen vil have binærerne, vil jeg gerne give det.





binær download for alle interesserede parter:


http://dl.getdropbox.com/u/46623/client.dll[4]


http://dl.getdropbox.com/u/46623/newClient.exe[5]


http://dl.getdropbox.com/u/46623/originalClient.exe[6]


Disse vil ikke køre, fordi ressourcefilerne er påkrævet - de er omkring 3 optagelser, så for store til at uploade hvor som helst. Navne er blevet ændret for at beskytte de skyldige =), men det beskytter sandsynligvis ikke navnet på dll ...

Bedste reference


Jeg antager, at den person, der kodede denne hook , som tilføjer kryptering til pakken I/O for det ovennævnte program, har enten hooked de relevante Windows 'socket APIs' 2]], send osv.) Eller tilsluttede de interne programfunktioner, der bruges til at sende/modtage data.


Når det er sagt, foreslår jeg, at du bruger et krogdetekteringsprogram (f.eks. RkUnhooker ) for at finde ud af, hvad der rent faktisk er tilsluttet. Når du ved hvad API'er er tilsluttet, bør du også vide, hvor disse kroge skal og derfra skal du manuelt omdanne krokfunktionerne manuelt.


Hvad angår emnet at lære hvordan man gør dette, kunne jeg ikke lede dig til kun en tutorial til at lære dig alt, men jeg foreslår meget at du kigger på Tuts4You-webstedet, det har en overflod af tutorials, som ville opfylde alle dine behov. [7]


Upload eventuelt en kopi af den redigerede klient & krogen DLL, hvis jeg har den tid, jeg vil kode dig for replika kryptering og dekrypteringsfunktioner.

Andre referencer 1


Du skal koble de funktioner, der eksporteres af den ekstra DLL, og se på de funktioner, der kaldes, og parametrene sendes til dem. Dette kommer ikke til at være nemt, da du ikke har typebeskrivelser (fx funktions signaturer til DLL-eksporten.)


Se her for nogle oplysninger om API-hooking. Du vil også have brug for en god debugger Prøv Windbg fra Microsoft. [8] [9]


Så vidt jeg kan se den eneste mulighed, du har her, er test af sort boks dvs. giver kendt input til begge systemer og sammenligner svarene mod hinanden for at finde forskellene og lighederne.


               +--------------+
Input--------->| Original App |--------->Response1
               +--------------+

               +------------+
Input--------->| Modded App |--------->Response2
               +------------+


Nu når du regner med, hvordan du bruger funktionerne fra den ekstra dll, kan du bruge det selv på samme måde som den oprindelige app gør.