Win

Obfuskacija - scrambliranje programa

Kod koji proizvodi Visual Studio kompajler je IL (takozvani međujezik) koji se interpretira na samom računalu prije izvođenja. Takav kod se jako lako dekompajlira pa ga je potrebno dodatno zaštitit od zloupotrebe odnosno kopiranja.

Za zaštitu se koristi Obfuskator koji mjenja nazive klasa, metoda, propertyja, eventa i polja, što onemogućava ili otežava čitanje dekompajliranog koda.

Do sada sam koristio EazFuscator koji je prestao biti free, pa je trebalo naći free zamjenu. Odlučio sam se za Obfuscar. Obfuscar mi djeluje jako dobar, što više dopušta slobodu izbora kroz konfiguraciju. Početni problem je u tome što sve to treba podesit i ukomponirat.

Osnovno je napravit setting Obfuscara nazvan 'Poduzece.Obfuscar.xml' u kojem je konfiguracija za obfuskaciju Assembly Poduzece.exe, a to izgleda ovako:

<?xml version='1.0'?>
<Obfuscator>
  <!-- upute na: http://obfuscar.codeplex.com/wikipage?title=Configuration&referringTitle=Documentation -->

  <Var name="InPath" value="D:\CS\Aplikacije\Poduzece" />
  <Var name="OutPath" value="D:\Web\smilovic.com\winapp" />

  <!--  radi databinding, koji koristi refleksiju -->    
  <Var name="RenameProperties" value="false" />

  <Module file="$(InPath)\Poduzece.exe">
  
    <!-- Skip PDFCreator, vanjski program -->
    <SkipNamespace name="PDFCreator" />
    
    <!-- Skip hiding strings in Smilovic.BaseReport on methods PrintToFile(radi: new Guid("6395D0F9-B9FA-4E18-8871-71CFE3BB181D"))-->
    <SkipMethod type="Smilovic.BaseReport"  name="PrintToFile" />  
    <SkipStringHiding type="Smilovic.BaseReport" name="PrintToFile" />
  
  </Module>

</Obfuscator>

Treba napomenuti da su neke klase isključene u samom izvornom kodu. Klasa TGk se iključuje sa linijom 'ObfuscationAttribute', a to izgleda ovako:  

[System.Reflection.ObfuscationAttribute(Exclude = true)]
    public class TGk : BaseDAL    

Isključivanje te i sličnih klasa je jer se u na jednom mjestu u izvornom kodu koristi refleksije za kreiranje instance klase. Ako obfuskator promjeni ime klase onda refleksije više ne može raditi.

Obfuskator izostavlja namespace .net jer je za njeda napravljen, ali drugi vanjski program (namespace) PDFCreator treba posebno isključiti.
U metodi 'PrintToFile' postoji linija izvornog koda

PDFCreator.clsPDFCreator pdfCreator = new PDFCreator.clsPDFCreator();

koja kada se kompajlira izgleda ovako

clsPDFCreator clsPdfCreator = (clsPDFCreator) Activator.CreateInstance(System.Type.GetTypeFromCLSID(new Guid("6395D0F9-B9FA-4E18-8871-71CFE3BB181D")));

Vidimo da se za kreirane instance koristi GUID broj verzije PdfCreatora, zato treba spriječiti njegovo scrambliranje sa 'SkipStringHiding'

Sada postupak treba automatiziraj, to znači povezat obfuskaciju sa izradom Release verzije Assembly. U 'Projek|Properties|Build Events|Post-build event command line:' treba dodati naredbu

if /I "$(ConfigurationName)" == "Release" D:\CS\Alati\Obfuscator\Obfuscar.Console.exe D:\CS\Aplikacije\Poduzece\Poduzece Obfuscar.xml

Kompajliranjem Release verzije, naredba pokreće 'Obfuskar' sa parametrom 'Poduzece.Obfuscar.xml' koji producira 'Poduzece.exe' zaštićenu verziju i smješta je u zadani direktorij.

EazFuscator zadnja free verzija

Zadnja free verzija je 'Eazfuscator.NET 3.3.161.40493', je verzija do uključujući VS2010. Za VS2012  treba:

Kopirati 'C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe' u 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe'.

 Pokrenuti 'Start|Eazfuscator.NET|Eazfuscator.NET.Assist' i zatim dovući projekt 'u zeleno polje'. To će rezultirati Post-build event komandom za projekt

'if /I "$(ConfigurationName)" == "Release" Eazfuscator.NET.exe "$(TargetPath)" --msbuild-project-path "$(ProjectPath)" --msbuild-project-configuration "$(ConfigurationName)" --msbuild-project-platform "$(PlatformName)" --msbuild-solution-path "$(SolutionPath)" -n --newline-flush -v 3.3'

Eazfuscator.NET 3.3.161 podržava max net 4.0.

Kreirao i izradio Ivan Smilović!.
Blue joomla theme by Template Joomla