• Home
  • Alerts
  • About
  • Services
SafeSearch:  On

Download Reversing_Dotnet.pdf

Contents : 1 Reversing .NET by LaFarge / Team ICU 2006 Reversing .NET by LaFarge / RLTeam Introduction ako smo do sada svi verovatno pisali ponesto o reversingu native code tj. IA-32 kompajliranih programa doslo je vreme da napisem jedan opsirniji tekst o .NET-u i reversingu .NET programa. Ako se seate mog tutorijala o ACCOUNT Knjigovodstvu u kojem sam opisao kako reversovati program uz pomo dekompajlera i topic-a na starom RLabs forumu u kojem sam spomenuo da sam se malo ozbiljnije bacio" u .NET vode tj .NET programming i reversing i da u mozda napisati jedan allaround tekst o .NET-u. Evo resio sam da ispunim dato obeanje i objavim ovaj tekst u nasem dragom pHearless eZine-u. Do sada smo uglavnom raspravljali IA-32 platformu vreme je da krenemo u raspravu o novim razvojnim platformama koje bi mogle biti veoma popularne u budunosti. Postoji mnogo takvih platformi. Mogao bih sada pisati o drugim operativnim sistemima koje rade pod IA-32 platformom kao npr. Linux ili o potpuno drugacijim platformama koje koriste poptuno drugaciji operativni sistem i arhitekturu procesora kao npr. Apple Macintosh. Pored operativnih sistema i procesorskih arhitektura takoe postoje i high-level platforme koje koriste svoj poseban asemblerski jezik i koje mogu da rade na svim platformama. To su virtual-machine-based platforme kao sto su Java i .NET. Iako je Java postala moan i popularan razvojni jezik ovaj tekst emo da fokusiramo na .NET. Odlucio sam se za taj korak iz nekoliko razloga. Jedan od njih je i taj da je Java je prisutna na sceni duze od .NET-a i reversing Jave je dosta dobro pokrivena tema. U ovom tekstu emo opisati neke od osnovnih tehnika reversinga .NET programa. Da bi ovo postigli moraemo da se upoznamo sa osnovnim pravilima .NET platforme kao i sa MSIL jezikom. Koristiu jednostavan MSIL kod kao i u mom predhodnom tekstu Decompiling It!. Na kraju upoznau vas sa nekim alatima specijalizovanim za .NET (i za ostale bytecode platforme) kao sto su obfuskatori i dekompajleri. Nadam se da ste se sada ve navikli na moj stil pisanja malo engleski malo srpski (kao i na RLabs forumu :D) tako da se nadam da neete imati problema u praenju ovog teksta. E pa srean vam .NET reversing. :-p I Reversing .NET by LaFarge / Team ICU 2006 1 2 Reversing .NET by LaFarge / Team ICU 2006 Osnovna Pravila a razjasnimo jednu stvar! Reversing .NET aplikacije je potpuno drugaciji proces od reversinga obicnih IA-32 aplikacija. U osnovi reversing .NET aplikacije je neverovatno prost proces. .NET programi su kompajlirani u intermediate jezik (ili bytecode) koji se zove MSIL (Microsoft Intermediate Language). MSIL je veoma detaljna reprezentacija koda i ima daleko vise informacija o originalnom programu od IA-32 kompajliranih programa. Ti detalji se odnose na punu definiciju svake data strukture u programu zajedno sa imenima skoro svakog simbola korisenog u programu. Imena svakog objekta data member-a i member funkcija su ukljuceni u svakoj .NET aplikaciji. Tako .NET runtime (CLR) pronalazi te objekte at runtime. D Ovo ne samo da pojednostavljuje proces reversinga programa jednostavnim citanjem MSIL koda ali i otvara dosta reversing nacina i prilaza. Postoje dekompajleri koji mogu da nam daju tacne source kodove za svaku .NET aplikaciju. Izlazni kod je veoma citljiv zbog toga sto su originalna imena simbola sacuvana u programu kao i zbog detaljnih informacija o programu koje se nalaze u kompajliranom .EXE-u. Ove informacije mogu da iskoriste dekompajleri i da rekonstruisu flow & logic programa i detaljnu informaciju o objektima i data tipovima. Sledi grafikon koji prikazuje kako izgleda kod C# aplikacije dekompajliran Salamander dekompajlerom. Obratite paznju kako je skoro svaki vazan detalj source koda sadrzan u dekompajliranom kodu (imena lokalnih varijabli su izgubljene ali ih Salamander pametno" zamenjuje sa i i j). Zbog high-level transparentnosti .NET programa koncept obfuskacije .NET programa je postao uobicajen i vis nego sto je slucaj sa IA-32 programima. Cak sta vise Microsoft isporucuje obfuskator sa svojom .NET platformom Visual Studio .NET. Kao sto vidimo iz sledeeg grafikona ako isporucujete vasu .NET aplikaciju bez prethodne obfuskacije iste bolje da ste poslali i source kod. :D Reversing .NET by LaFarge / Team ICU 2006 2 3 Reversing .NET by LaFarge / Team ICU 2006 Reversing .NET by LaFarge / Team ICU 2006 Grafikon br. 1 Izgled source-a i dekompajliranog koda (Salamander Decompiler) 3 4 Reversing .NET by LaFarge / Team ICU 2006 Osnove .NET-a Za razliku od nativnih masinskih programa .NET programi se moraju izvrsavati u posebnom okruzenju. Ovo okruzenje koje se zove .NET Framework radi ako posrednik izmeu .NET programa i ostatka sveta". .NET Framework je u sustini Software Execution Environment u kojem rade .NET programi i sastoji se iz 2 komponente: Common Language Runtime (CLR) Class Library CLR je okruzenje koje ucitava i proverava .NET programe i u sustini predstavlja virtuelnu masinu unutar koje se .NET programi izvrsavaju. Class Library je ono sto .NET programi koriste za komunikaciju sa ostalim svetom". To je hijerarhija klasa koje nude razlicite usluge kao npr. user-interface servise networking file I/O string management itd... Idui grafikon pokazuje povezanost izmeu raznih komponenti koje zajedno cine .NET platformu. Za .NET binarni modul se cesto kaze assembly. Asembli sadrzi kombinaciju IL koda i metadata-e. Metadata je specijalni data blok koji sadrzi data type informacije o raznim objektima korisenim u asembliju kao i tacne definicije svih objekata u programu (ukljucujui i lokalne varijable parametre metoda...). Asembli se pokree od strane CLR-a koji ucitava metadatu u memoriju i kompajlira IL kod u native-code uz pomo just-in-time (JIT) kompajlera. Managed Code Managed Code je svaki kod koji je verifikovan od strane CLR-a za security type-safety i memory usage. Managed Code se sastoji od dva osnovna .NET elementa: MSIL koda i metadata-e. Kombinacija ta dva elementa omoguava CLR-u da uopste pokrene managed kod. U svakom trenutku CLR je svestan" sa kakvim podacima radi program. Na primer u obicnim IA-32 kompajlerima kao sto su C i C++ strukturama podataka se pristupa ucitavanjem pointera u memoriju i izracunavanjem specificnog offseta u strukturi kojem se pristupa. Procesor nema predstavu sta ta struktura predstavlja i da li je adresa kojoj se pristupa validna ili ne. Kada CLR pokrene neki program u svakom momentu je svestan o skoro svakom data tipu u programu. Metadata sadrzi informacije o definicijama klasa metodama i njihovim parametrima i o tipovima svake lokalne varijable u svakoj metodi. Te informacije omoguavaju CLR-u da proveri operacije koje radi IL kod i da proveri da li su uopste ispravne. Na primer kada asembli koji sadrzi managed kod zeli da pristupi nekom clanu polja (array) CLR moze lako da proveri velicinu polja i da triggeruje exception ako je clan van granica polja. Reversing .NET by LaFarge / Team ICU 2006 4 5 Reversing .NET by LaFarge / Team ICU 2006 Grafikon br. 2 Veze izmeu CLR-a i razlicitih .NET programskih jezika Reversing .NET by LaFarge / Team ICU 2006 5
  • Rating :      
  • Search Skype/AIM!
  • File Type : .pdf
  •    
  • Length : 28 pages
  • File Size: 532.3 kb
  • Virus Tested : No
  • Verified : 2013-03-23
  • Source: www.phearless.org
 Email File   

INFO HASH : 7536aa65050391030490aeac93470bac7a03ae9e
blog comments powered by Disqus
Download now

File Size: 532.3 kb

Document Preview

    Other Downloads

  • null_pointer_analiza.pdf247.5 kb
  • ag-charlottenbur...36-c-282-04.pdf450.6 kb
  • kostenrecht_putzer.pdf253.2 kb
  • brennen-von-iso-...ien-mit-k3b.pdf1.3 mb
  • an232b-05_baudrates.pdf168.8 kb

    Related Keywords


  • Add Media
  • |
  • Terms of Use
  • |
  • FAQ / Help

© 2012 all rights reserved