Omvendt engineering af dine .NET-applikationer

Et nyligt projekt involverede at foretage ændringer i en eksisterende Windows C #-applikation med det advarsel, kildekoden var ikke tilgængelig (den forrige udvikler nægtede at give den). De fleste udviklere har oplevet en lignende situation, hvor kildekoden ikke kan findes; undertiden forsvinder kildekoden eller går tabt.

Processen med reverse engineering eller dekompilering af en applikation kan udføres med de rigtige værktøjer og vedholdenhed, når man arbejder med sprog som C ++ eller C, men det er ikke en ligetil proces. Den styrede kode (.NET og Java) verden giver en meget lettere tilgang, da al kildekode er samlet til Microsoft Intermediate Language (MSIL). MSIL konverteres til maskinkode ved en just-in-time (JIT) kompilator, når den udføres. MSIL er veldokumenteret. MSIL inkluderer metadata, der giver et væld af oplysninger om koden. Til dette indlæg ser jeg på at arbejde baglæns med et C # -program.

Kom godt i gang

Udgangspunktet for reverse engineering er at få de DLL- eller EXE-filer, som du vil lære de indre funktioner. Det næste trin er at finde et værktøj til at dekompilere filerne (dette kan være første trin, men hvorfor har du brug for et værktøj uden filerne?). Der er et antal værktøjer til rådighed, men .NET Framework leveres med sit eget værktøj kaldet Ildasm (MSIL Disassembler). Det er installeret som en del af Visual Studio og Windows SDK'er, så du kan få adgang til det via Visual Studio-kommandoprompten eller Windows SDK-kommandoprompten.

Ildasm tager en fil, der indeholder MSIL som input (en DLL- eller EXE-fil) og udsender kildekoden, der er egnet til samlerværktøjet (Ildasm.exe). Den følgende kommandolinje tager dll-filen som input og genererer den specificerede outputfil (som indeholder MSIL).

 Ildasm compiledFile.dll /output:TRTest.il 

Her er et uddrag af MSIL genereret af den forrige Ildasm-kommando.

 .module compiledFile.dll 

// MVID: {F5233C6F-701D-4E6B-BA37-ECCAA0B22083}

.imagebase 0x11000000

.filjustering 0x00001000

.stackreserve 0x00100000

.subsystem 0x0003 // WINDOWS_CUI

.corflags 0x00000001 // ILONLY

// Billedbase: 0x03370000

// =============== KLASSEMEDDELERS ERKLÆRING ====================

.class interface interface abstrakt auto ansi compiledFile.IUpdatableControl

{

.metode offentligt hidebysig newslot specialnavn abstrakt virtuelt

instans bool get_UpdateAfterCallBack () cil administreret

{

} // slutning af metode IUpdatableControl :: get_UpdateAfterCallBack

.metode offentligt hidebysig newslot specialnavn abstrakt virtuelt

instans void set_UpdateAfterCallBack (bool 'værdi') cil administreret

{

} // slutning af metode IUpdatableControl :: set_UpdateAfterCallBack

.metode offentligt hidebysig newslot specialnavn abstrakt virtuelt

eksempel bool get_AutoUpdateAfterCallBack () cil administreret
 { 

} // slutning af metode IUpdatableControl :: get_AutoUpdateAfterCallBack

.metode offentligt hidebysig newslot specialnavn abstrakt virtuelt

instans void set_AutoUpdateAfterCallBack (bool 'værdi') cil administreret

{

} // slutning af metode IUpdatableControl :: set_AutoUpdateAfterCallBack

Dette er temmelig svært at læse og analysere, men det er muligt. Du kan foretage ændringer i MSIL og sende det gennem samleren (Ildasm.exe).

Udforskning af andre indstillinger

Jeg har brugt andre værktøjer, der forenkler processen; Jeg foretrækker Red Gate's Reflector, men den er ikke længere gratis - den kræver nu køb efter en prøveperiode. Imidlertid håndterer dekompilering af kode og præsenterer resultaterne i en letlæselig grænseflade. Figur A viser resultaterne for en DLL. Den nederste højre del af grænsefladen inkluderer analyseresultater, hvor det viser dig afhængigheder. Figur A

Reflektorinterfacet forenkler reverse engineering-kode. (Klik på billedet for at forstørre det.)

Her er yderligere tre tilgængelige indstillinger, som alle er gratis:

  • Dotnet IL Editor (DILE) giver dig mulighed for at adskille og debug. NET-kode.
  • dotPeek giver dig mulighed for at dekompilere og gennemse resultaterne.
  • ILSpy er en open source-samlingsbrowser og decompiler.

Dette er kun en prøveudtagning af de tilgængelige værktøjer.

Installation af vejspærringer

Selvom du ikke helt kan forhindre andre i at dekonstruere applikationsfiler / -koder, kan du afskrække dem ved hjælp af en række teknikker. Du kan:

  • Brug stærke navngivne forsamlinger, der indeholder digitale signaturer og offentlige nøgler.
  • Brug Microsoft Authenticode.
  • Undgå alt for almindelig praksis ved levering af fejlfindingsversioner af en applikation. Disse versioner inkluderer et væld af fejlfindingsrelaterede oplysninger, der er gavnlige i reverse engineering-processen.
  • Overvej at bruge tilsløring, der konverterer din kode og symboler til usammenhængende data, mens du bevarer logikken. Microsoft tilbyder Dotfuscator-værktøjet til tilsløring, men tredjepartsværktøjer fra leverandører som Red Gate er endnu bedre.

Resumé

Uanset hvilken forretningsgrund der er for reverse engineering-kode, er det en god færdighed at være i stand til at bruge i dit daglige arbejde efter behov.

Hold dine ingeniørfærdigheder ajour ved at tilmelde dig TechRepublics gratis Software Engineer-nyhedsbrev, der leveres hver tirsdag.

© Copyright 2021 | mobilegn.com