C#’da Code Injection-DLL veya exe’ye kod ekleme

21 Ocak 2009 tarihinde Ali TOPALOĞLU tarafından yazılmış.



C# Code Injection terimini DLL Dosyaya veya Managed Exe’ye Kod ekleme olarak da ifade edebiliriz.

Bugün (Reflector, Fox ve CFF Explorer) benzeri yardımcı bir araçla var olan dll veya exe dosyalarına (bunları ifade ederken assembly diyeceğiz) kendi kodlarımızı eklemeyi  öğreneceğiz (bir nevi yama uygulamak gibi)  Yaptığınız kod değişikliklerini ve yamaları assembly üzerine kaydedip keyfinize göre kullanabilirsiniz.

Basit ve anlaşılır bir anlatım ile bu kolay konuyu herkesin anlayacağını düşünüyorum.Åžimdi farz edelim ki bir tanıdığımız bizim kullanabilmemiz için bir uygulama dosyası (assembly) hazırlamış ve bize yollamış. Ancak ne biçim iÅŸse uygulamayı açmaya veya kullanmaya çalıştığınızda (ÅŸifre,serial,key vs.) istiyor. Bu durumda yapacak iki ÅŸeyiniz var, ya arkadaşınıza ulaşıp uygulamanın istediÄŸi (ÅŸifre,serial,key vs.) öğrenmek, veya aÅŸağıda bahsettiÄŸim yöntemle assembly’i açıp ÅŸifre soran kısmı oluÅŸturan kodları düzenleyip kendi istediÄŸiniz bir (ÅŸifre,serial,key vs.) girmek. Arkadaşınıza her zaman ulaÅŸamayabilirsiniz veya çeÅŸitli nedenden (ÅŸifre,serial,key vs.) öğrenemeyebilirsiniz, aÅŸağıda anlattığım yöntem çoÄŸu durumda iÅŸinize daha çok yarayacaktır.

Evet baÅŸlıyoruz. AÅŸağıda gördüğünüz örnek bir uygulamamız. Åžifre soran bu textbox istenilen ÅŸifreyi girdiÄŸimizde bize sihirli bir sayı gösterecek, yanlış ise bize hata verecektir. Åžanssızlık iÅŸte, textbox’ın istediÄŸi ÅŸifreyi bilmiyoruz. Bu durumda yapacak baÅŸka ÅŸey kalmıyor :)

http://img135.imageshack.us/img135/3237/72182334zh4.png

AÅŸağıdaki kodlara bakıp görebileceÄŸiniz gibi olay aslında basit bir string karşılaÅŸtırmasından ibaretmiÅŸ. O zaman buradaki kodları deÄŸiÅŸtirdiÄŸimiz zaman ÅŸifre sorunumuz ortadan kalkacaktır. (Bu arada aÅŸağıdaki resimde olduÄŸu gibi assembly’lerin içeriÄŸindeki kodları görebilmek ve düzenleyebilmek için Fox Decompiler ve Reflector uygulamalarını araÅŸtırabilirsiniz)

http://img132.imageshack.us/img132/2816/96110657lj5.png

Biz bu anlatımda Reflector uygulamasını kullanacağız. Assembly dosyasımızı Reflector uygulamamızda bir text dosyasıymış gibi görmemizi ve düzenlememizi sağlayan bir Plug-in olan
Reflexil eklentisini buraya tıklayarak indirin, daha sonra zipli dosya içerisindeki reflexil.dll’i çıkarın
ve aÅŸağıdaki resimlere bakarak bu plug-ini Reflector’a ekleyiniz.

http://img159.imageshack.us/img159/9610/36034851be4.png

Plug-in’i ekledikten sonra Reflectorla uygulamamızı açıyoruz ve CheckKey() metodunu disassemble ediyoruz. Reflector’un Tools menüsüne geldiÄŸimizde az önce exlediÄŸimiz Reflex’il eklentisinin çıktığını görebilirsiniz. Buna tıkladığımızda ise hemen alt kısımda ilgili kodun IL’ini görebiliriz. Bu kısıma saÄŸ tıkladığınızda gelen menüden editleme, silme ve kod ekleme iÅŸlemlerinin yapıldığı menülerden yapacağımız iÅŸleme göre hareket edebiliriz.

http://img105.imageshack.us/img105/263/69070517rx6.png

Aslında burda düzenleme yapabilmek için iyi bir IL bilgisine sahip olmamız gerek. Ancak context menüsündeki “Replace all with code” menüsü IL bilmedende düzenlememize olanak saÄŸlıyor. Reflector’ün ürettiÄŸi kodun sadece metodun içindeki kodu kopyaladıkdan sonra Replace all with code menüsünü tıklayalım. AÅŸağıdaki gibi kopyaladığımız kodu metodun içine kopyaladıkdan sonra istediÄŸimiz deÄŸiÅŸiklik ve eklemeleri yapalım.Sol alt kısımdakı “Preview IL” butonuna tıkladıkdan sonra SaÄŸ alt kısımdakı Ok butonu aktifleÅŸecektir. Ok dedikten sonra Reflexil yeni kodlarimizi artık injecte etmiÅŸtir.

http://img102.imageshack.us/img102/2659/23767068kt6.png
Görüldüğü gibi uygulamamıza yeni bir satır eklendi ve metodda eÄŸer ”huh!” deÄŸeri girilirse false, ”huh!” dışında kalan baÅŸka bir deÄŸer girildiÄŸinde ise true deÄŸeri üretecektir :) Bakalım ÅŸifreyi doÄŸru tahmin edecek kadar ÅŸanslı olacak mısınız :)

Soldaki ağaçtan assembly mizi seçtiğimizde Reflexil bize uygulamayı kaydetme imkanını verecektir.

http://img206.imageshack.us/img206/8341/28991521dd3.png

Düzenlediğimiz dosyayı kaydedip çalıştırdığımızda ise karşımıza aşağıdaki gibi bir sonuç gelecektir:

http://img502.imageshack.us/img502/5449/17459875km5.png

Umarım bu anlatımımız çalışmalarınızda kullanabilceğiniz iyi bir kaynak olmuştur.
Örnek bir uygulama indirmek için buraya tıklayınız.

Katkılarından dolayı OÄŸuz YaÄŸmur’a teÅŸekkür ederim.

Yazının uzun olması incelenmesi açısından biraz zır oluyor biliyorum ama elimizden geldiğinin en iyisi bu olsa gerek diye düşünüyorum. Bol bol resimli örnek sayesinde olayı anlaşılır kılmak adına böyle oldu.



   Bu yazı Ali TOPALOÄžLU tarafından EÄŸitim, Programlama, c# kategorisine eklenmiÅŸtir.
  etiket , , olarak etiketlenmiÅŸtir.
  rss Bu yazı toplam  3.335 defa okunmuÅŸ.
  yazdir Buraya tıklayarak sayfayı yazıcıdan çıkartabilirsiniz.
  Yorum yapcam Yazıya yorum yapabilir, yapılan yorumları RSS 2.0 ile takip edebilirsiniz.
EkleBunu Sosyal Paylaþým Butonu


Bu yazıya 8 tane yorum yapılmış

  1. realoyuncu

    Saolsn güzel bilgi


  2. Burak

    tÅŸkler


  3. RebeLMasteR

    gerçektende yararlı bilgi.kendini geliştirmek isteyenler bu siteyi takip etmeli


  4. Çakma Blog

    Åžimdi amma kolaylaÅŸmış programlar ali. ben lisede programcılık dersinde pascal kullanıyordum var, integer falan filan hep yazıyodu hiç böyle görsellik yoktu hatta bir kütüphane kitap kayıt programı yaptıydım taa 2001′de ÅŸimdi unuttuk gitti.


  5. sinan

    crack denilen şeyler böyle mi yapılıyor yani?


  6. Aras DaÄŸ

    TeÅŸekkürler güzel bir makale …


  7. Hüseyin Aga

    http://rapidshare.com/files/186972349/blog_codeinjection.rar
    bu link sanırım kırık


  8. kübiş...

    anlamadım biraz ama idare eder yüklemesem olmıyomu

    :(


Mesaj Yaz