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

anonuser23532

Kıdemli Üye
9 Ara 2017
2,602
12
Ö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-yazilim-analizi/1846699-crack-me-unpack-me.html

NaKJWN.png



H3ulXu.png



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.


brdQBy.png



7WirtM.png



vfH5R0.png



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



aV0d7c.png



NaKJWN.png



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.


fdQvHM.png

Bu kütüphaneleri programımıza ekliyoruz.
Kod:
using dnlib.DotNet;
using dnlib.DotNet.Emit;[SIZE=3][COLOR=white]
[/COLOR][/SIZE]
Xtseb3.png



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.

usqxQZ.png


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



4pzAhj.png



İ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.


NaKJWN.png


~ DECRYPTOR ~

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

Ry9LQ3.png

vilA3T.png


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



sX2MVT.png


İş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 ;

z4hIkR.png

Burada gördüklerinize type deniliyor.

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

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 ;

LJvlxV.png


İ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.

C9TxdZ.png



FNKaeS.png


vq9MKW.png



Kullanılan Bütün Kodlar ;
https://paste.ubuntu.com/p/JGghpjxWrQ/
Teşekkürler ; @BackBox
 
Son düzenleme:

AylaQ

Yeni üye
24 Nis 2019
27
0
Adeland
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.

mathequation.png
 

anonuser23532

Kıdemli Üye
9 Ara 2017
2,602
12
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.

mathequation.png

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

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.