Ana sayfa Tersine Mühendislik Tersine Mühendislik 1

Tersine Mühendislik 1 [Serial Bulma & Patch]

129
0

Tersine Mühendislik (Reverse Engineering) konusunda yeni bir seri başlatıyoruz. Öncelikle bu alanda karşınıza temel olarak çıkacak terimleri ve bu konuya dair öğrenmeniz gereken işlemlerden bahsedeceğim .İlk bölümde programın serial kodunu bulacağız ve patch işlemi yapacağız anlatım için bir video hazırladım.Bölümler genelde video ile anlatılacak.

Başlamadan önce bu serinin devamını daha rahat takip edebilmek için Tersine Mühendislik kategorimizi yer imlerinize ekleyiniz.

Temel olarak bahsetmem gereken şeylerden sonra videoyu izlemeniz anlamanız açısından çok daha faydalı olacaktır.

Tersine mühendislik işlemi.

Programa Crack İşlemi Nasıl Yapılır?

Bir programı crackleyebilmek için ilk olarak onun hangi dilde yazıldığını bilmemiz gerekir. Çünkü hangi dilde yazıldığını bilmek onu cracklemek için hangi araçları kullanacağımızı bize anlatır. Windows platformunda çalışan programlar aslında 2 ye ayrılmaktadırlar .

1. Kısım Windows kütüphanesini kullanan programlar;
Bu sınıf içerisine c++,c,visual basic, vbscript,delphi 7 gibi direkt olarak windows kütüphanesi üzerinden çalışan programlama dilleri mevcuttur. Bu tarz programları günümüzde cracklemek için bir çok araç ve yazılım mevcuttur.
2. Kısım NetFramework kütühanesi kullanan programlar ;
Bu sınıf içerisinde c#, vb.net, F#  gibi studio ortamında kodlanmış programlardır. Crack için bir çok araç vardır lakin bu tarz programları çeşitli şifreleyiciler ile daha zor hale getirmek daha mümkündür .
Netframework kütüphanesi ve Win32 Kütüphanesi

Netframework kütüphanesi temelinde windows32 kütüphanesine dayanmaktadır. Evet programlar 2 sınıfa ayrılıyor demiştik. Bu programlar Tersine Mühendislik işlemi için kullanacağımız programlarında ikiye ayrılmasına sebep oluyor. Başlatmış olduğumuz seride zaman zaman üzerinde duracağım bu konuda, hem windows kütüphanesinden hemde netframework kütüphanesini direkt olarak kullanan yazılımlar üzerinde işlemler yapacağız. Mantığın aynı sadece araçların farklı olduğunu anlatmama gerek yok sanırım.

Tersine Mühendislik Öğrenmek İçin Programlama Dilleri Bilmeli Miyim?

Terimler ile yapılan espirileri anlamak istiyorsanız, programlama bilmeniz gerekiyor 🙂 … Tersine mühendislik için programlama öğrenmek şart değil ancak yapacağınız ve anlayacağınız işlem sınırlı kalmaktadır. İki türlü örnek verelim. Programlama bilen birisi string manipülasyonlarını , komutları bildiği için asembly kodlarındaki terimleri rahatça öğrenir. Hesaplamaları , hash işlemlerini , regedit üzerinde saklanan dataların takibi gibi bir çok konuyu kolayca keşfeder .Tabi kodları debug etmeyi öğrendiğinde anlaması ve yorumlaması çok daha kolay olacaktır. Programlamada if , for, while, for each gibi sabit komutların belirli bir mantığı vardır.

Asm kodlarındada aynı mantık bulunuyor. Kısaca programlama bilen birisi tüm bu süreçleri ve işlemleri anlaması daha basit olacaktır. Kendi bilgileri ile buradaki bilgilerini kıyaslaması çok daha basit olurken programlama bilmeyen birinin öğreneceği bilgiler belli bir noktada kısıtlanır. Bu durum şu şekilde daha iyi anlayabilirsiniz. Yukarıda bahsettiğim yöntemleri bilmeyen kişi asm kodları ile karşılaştığında izlediği yada okuduğu bilgiler dışında kendi mantığını yürütmesi oldukça zor olacaktır. Sabit şeyler dışına çıkması için yine bir mantığa ihtiyaç duyar. Debug kısmında tüm bunları öğrenmesi kişiyi zorlu bir sürece sokacaktır. Onun yerine temel kod mekanizmasını öğrenmek çok daha kolay olacaktır .

Tersine Mühendislik için Hangi Programlama Dilini Öğrenmeliyim?

Hangi programlama dilini öğrenmeliyim?

Bu sorunun cevabı aslında size kalmış bir durum . İstediğiniz programlama dilinden başlayabilirsiniz. Bu durum sizin için sadece tavsiye olacaktır. Ben programlama diline 1997 Visual Basic ile başlamıştım. Lakin derleyicisi çok kötü ve eski olduğundan çok fazla zorluk yaşamıştım. Bunun için Visual Studio 2017 versiyonunda Visual Basic kodlaması öğrenerek başlayabilirisiniz. Mantığını öğrendikten sonra C# kodlamaya geçmek çok daha kolay olacaktır. C# öğrendikten sonra php öğrenmesi daha kolay. Devam ederseniz php den sonra diğer script kodlarını öğrenmek sizin için oldukça basit olacaktır. Benim sıralamam bu şekilde olmuştu.

Patch İşlemi Nedir?

Patch işlemi hedef programın lisans sorgusuna dair veya içerisinde bulunan bir takım hatalara dair yama işlemidir. Bu yama sayesinde lisans sorgusunu yada demo süresini uzatabiliriz. İşlem olarak debug ettikten sonra düzenleyip dosyanın yamalı hali ile orjinal dosyayı değiştiririz. Bu işleme patch denir.

Serial Bulma Nedir?

“Serial Fishing” ile isimlendirilen serial avlama.

Programı lisanslamak için gerekli olan anahtara serial bulma şeklinde hitap ederiz yada serial fishing denir. Bu işlem için programı yine tersine mühendislik araçları yardımı ile debug edip karşılaştırma yaptığı kodu bularak doğru olan serial koda denir.

Keygen Nedir?

Serial üretme programlarına keygen denir.

Programların lisanslamak için ihtiyaç duyduğu serial kodların oluşum algoritması çözülerek kodlanmış 3. bir yazılıma keygen denir. Cihaza göre veya isime göre key oluşturma algoritması hedef program için debug edilir. Bu algoritmaya göre bir kod üretilir. Bu işlemi yapan programlara keygen denir.

Packer / Obfuscator / Protector Nedir ?

Programları şifreleyip kodlarını daha karmaşık hale getitir.

Bu tarz terimler ile sıkça karşılaşacaksınız. Çünkü bu terimler bizim üzerinde crack işlemi yapmaya çalıştığımız dosyaların daha güvenli ve zor hale gelmesi için kullanılan 3. yazılımlardır. Kısaca şifreleyiciler yada paketleyiciler ismini verebiliriz. Paketleyici programlar yazılmış program içerisinde bulunan kodları ve yazıları şifreler ve karmaşık hale getirir dolayısıyla bizde bu dosyalar üzerinde tersine mühendislik işlemi yapamayız. öncelikle üzerinde bulunan paketleyiciui çözmemiz gerekir. Paket çözümleme işlemine ise Unpack Denir.

 

Hedef Program :

Aptuner akort yapma programı

Aptuner (Akor programı eskidir ama hala satışta 35$ )

Kullanılan Araçlar : 

1- Ollydbg
2- DİE (Detect İt Easy)

Kullanılan Araçlardan Görüntüler :

Detect it easy program üzerinde bulunan şifreleyicileri ve hangi dilde yazıldığını gösterir
Windows kütüphanesi üzerinden çalışan programları debug etmeye yarayan tersine mühendislik aracıdır

 

Görsel Anlatım:

1 – Detect İt Easy ile programda paketleme olup olmadığını kontrol ettik her hangi bir şifreleme koruması yok program c++ ile yazılmış.

2- Ollydbg içerisine programımızı attık .Sağ tıklayıp – >Search For -> All referenced Text String diyoruz.

Sağ tıklayıp – >Search For -> All referenced Text Strings

3- Bu kısımda en üst bölüme çıkıp Sağ tıklıyoruz -> Search For Text  dedikten sonra çıkan arama kutusuna hata mesajımızın bir bölümünü yazıyoruz yani “Registration“. Aramaya devam etmek için Ctrl + L kombinasyonuna basıyoruz.

Bu kısımda en üst bölüme çıkıp sağ tıklıyoruz. Search For Text butonuna tıklıyoruz

4- Hata mesajının nerede olduğunu bulduk çift tıklayarak içerisine girelim . (Bütün programlarda bu şekilde bulamayız videoda belirttim. Basit düzey işlemler yapıyoruz. Tüm programların böyle cracklendiğini sakın düşünmeyin bu daha başlangıç 🙂 )

Bu kısımda mesajı bulduk ve çift tıklayarak kodların bulunduğu bölüme gideceğiz.

5- Bu bölüm bizlere hata mesajının olduğu kodları gösteriyor . Kodların akışını daha iyi görebilmek için Sağ tıklayıp -> Analyze This! diyoruz. Yada Ctrl + A kombinasyonu ile tamamlayabiliriz.

Bu kısımda hata mesajımızı bulduk ve sağ tıklayıp Analyze This! diyoruz

6- İyi mesaj ve kötü mesajı görebiliyoruz bu ekranda . Bu kodların üzerine çıkacağız. Kırmızı okun geldiği yere gidelim .


1. kırmızı ok ile gösterilen bölüm yukarıda bulunan komutun belirtilen yere aktarıldığını gösteriyor.
2. program lisanslandığında gelen yazı
3. program hatalı lisans girildiğinde gelen mesaj.

7- JE komutu kendinden önce gelen kısımdaki karşılaştırmanın eşit olup olmadığını kontrol eder. Yani Al, Al değerleri eşit ise belirlenen ofsete atlayacaktır. Aksi halde normal akışına devam edecek . (Programlamadaki IF komutuna benziyor değil mi ? 🙂 ).

1. Kısımda JE komutu kendinden önce gelen değerin eşit olup olmadığını kontrol eder.

8- Aslında sabit bir serial mevcut o kısımda seriali direkt alıp programa koyabiliriz. Ancak Başka durumlarda serial bu kadar açıkta olmayabilir. Neyseki JE komutuna tıklayıp -> space tuşuna basalım ve “nop” yazalım. Böylelikle programımız sürekli olumlu mesaja gidecektir. Yada “jmp” komutu ile bir altında bulunan ofsete atlatabiliriz.

Serial bulma işlemi bu kadar. Patch işlemi ve daha detaylı anlatım için video olarak izleyebilirsiniz.

Videolu Anlatım:

ÖNEMLİ!

Bu içerikte yer alan bilgiler tamamen yazılım geliştiricilerinin kendi programlarını nasıl koruyabileceklerini öğretmeye yönelik hazırlanmıştır. Tersine mühendislik ile programlarının kırılmasını istemeyen geliştiriciler tersine mühendisliğin ne olduğunu, nasıl yapıldığını, crack ve patch kavramlarının ne olduğunu bilmeli, buna göre önlem almalıdır.

BİR CEVAP BIRAK

Lütfen bir yorum yazın!
Lütfen Adınızı Girin!