İPUCU

Tersine Mühendislik Reverse Engineering ve Cracking ile ilgili dökümanları bulabileceğiniz bölüm.

Seçenekler

CrackMe Üzerinde dnlib İle String Decryptor Yazalım ! //Rhotav

Rhotav - ait Kullanıcı Resmi (Avatar)
Hunter
Üyelik tarihi:
12/2017
Mesajlar:
2.380
Konular:
158
Teşekkür (Etti):
993
Teşekkür (Aldı):
689
Ticaret:
(0) %
2 Hafta önce
#1
CrackMe Üzerinde dnlib İle String Decryptor Yazalım ! //Rhotav
Örnek bir CrackMe üzerinde string decryptor yazalım.

Kullanılan Programlama Dili : C#
Kullanılan 3.Parti Yazılım : dnlib
Kullanılan CrackMe : https://www.turkhackteam.org/zararli...unpack-me.html







Yapacağımız ilk şey bir C# projesi oluşturup içerisine kullanacağımız kütüphaneyi dahil etmek.
Projemi WindowsForm olarak oluşturacağım siz isterseniz Console olarak da oluşturabilirsiniz.
Projemizi oluşturduktan sonra Proje > Nuget Paketlerini Yönet... kombinasyonunu uygulayarak dnlib 'i yükleyelim.











Bu işlemleri sırası ile yaptıktan sonra formumun görünümü düzeltiyorum.
1 TextBox ve 1 Button yeterli.









DEĞİŞKENLER VE FONKSİYONLAR


Bu kısımda tane tane yaptığı her şeyi ayrıntılarıyla anlatmaya çalışacağım anlamadığınız bir kısım olursa sorabilirsiniz.



Bu kütüphaneleri programımıza ekliyoruz.
Kod:
using dnlib.DotNet;
using dnlib.DotNet.Emit;



Form olayının çalıştığı yerin hemen altına ModuleDefMD türünde bir module değişkeni tanımlıyoruz. Burası bizim yüklediğimiz dosyayı tutacak.
Daha sonra public **** olarak bir event tanımlayalım. Ben adını TODO yapacağım.



Buttonumuzun üstüne iki kere tıklayarak Button1_Click eventimize girelim.






İlk başta bir OpenFileDialog tanımladık ve onu sadece exe dosyaları seçebilmesi için filtreledik ve eğer OK tuşuna basılırsa devreye girecek olayları if bloğu içerisine yazdık.
Dikkat ! : Bunları yazarken try catch bloğunu kullandık çünkü herhangi bir hata çıktığında kullanıcıyı bilgilendirmemiz gerekiyor.
1. if bloğu içerisine module adıyla atadığımız değişkene OpenFileDialog'da seçtiğimiz dosyanın atılmasını söyledik.
2. Seçilen dosyanın yolunu textBox1 ' te attık.
3. Asıl işleri yapacak fonksiyonumuzu çalıştırdık.
4.Catch içerisine çıkan hatayı bir messageBox ' da göstermesini isteyerek kullanıcıyı bilgilendirdik.




~ DECRYPTOR ~

Programımızı dnSpy üzerinde açalım ve stringlerin durumuna bir bakalım.




Ve durum beklediğimiz gibi InitializeComponent'e kadar bütün stringlerin decompiler üzerinden okuması zorlaştırılmış.





İşte string çözücüde kullanacağımız fonksiyon karşımızda.Önceki resimlere bakarsanız istenilen stringlerin buradan çağırıldığını göreceksiniz. Dolayısıyla bizim de kullanacağımız fonksiyon bu olacak. Bunu kopyalayıp projemize atalım.

.NET Programlarda bütün string değerler Ldstr OpCode'una sahiptir.

Dolayısıyla yapmamız gerekenler ;
1. Type'lar içerisinde dolaşmak ;


Burada gördüklerinize type deniliyor.

2.Type'ların içerdiği methodların içerisinde dolaşmak ;

Burada gördüğünüz turuncu renkliler methodlardır.

3.Böyle biz dolaşıyoruz hepsinde iyi hoş ancak strings dediğimizde hepsini çekecek programın işine yarayan resources stringini , settings stringini vs. onu engellemek lazım.

4.Bir döngü ile method içerisinde bulunan ldstr opcode'una sahip bütün değerleri çekip "cozucu" fonksiyonuna göndermek.

5. cozucu fonksiyonunun bize geri döndürdüğü string değerini alıp şifreli değerin yerine koymak.

6. Çalıştırdığımızda hata vermemesi için programın tekrar çözücüye göndermesini engellemeliyiz dolayısıyla cozucu fonksiyonunu call ettiği yerde noplayacağız.

İzleyeceğimiz yol bu şekilde olacak arkadaşlar.
Hemen koda dökelim ;



İlk başta foreach ile module'ye attığımız dosyanın typeları içersinde gezdik bunu yaparken aynı anda gezdiğimiz type'ın methodu içerisinde gezdik ve hemen aşağısında method'un bütün kodları içerisinde dolaşarak ldstr' yi bulduğumuz anda cozucu fonksiyonumuza verdik. Eğer stringden sonra çağırılan fonksiyon cozucu ise nopladık ve Dosyamızı kayıt ettik.









Kullanılan Bütün Kodlar ;
https://paste.ubuntu.com/p/JGghpjxWrQ/
Teşekkürler ; @BackBox
---------------------
Konu Rhotav tarafından ( 2 Hafta önce Saat 11:38 ) değiştirilmiştir.
AylaQ - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
04/2019
Nereden:
Adeland
Mesajlar:
28
Konular:
6
Teşekkür (Etti):
133
Teşekkür (Aldı):
8
Ticaret:
(0) %
2 Hafta önce
#2
Cevap: CrackMe Üzerinde dnlib İle String Decryptor Yazalım ! //Rhotav
makbul olan bunu 3.parti lib kullanmadan yapmak. Şu formül ile encrypted textin byte değerlerinin gerçek char sembollerini buldum.

Rhotav Teşekkür etti.
Rhotav - ait Kullanıcı Resmi (Avatar)
Hunter
Üyelik tarihi:
12/2017
Mesajlar:
2.380
Konular:
158
Teşekkür (Etti):
993
Teşekkür (Aldı):
689
Ticaret:
(0) %
2 Hafta önce
#3
Cevap: CrackMe Üzerinde dnlib İle String Decryptor Yazalım ! //Rhotav
Alıntı:
AylaQ´isimli üyeden Alıntı Mesajı göster
makbul olan bunu 3.parti lib kullanmadan yapmak. Şu formül ile encrypted textin byte değerlerinin gerçek char sembollerini buldum.

3.Parti lib kullanarak .NET Programı ile bağlantı kurduk decode fonksiyonunu crackme içerisinden aldık.
Emeğinize sağlık sizin de..
---------------------

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı