Tersine Mühendislik

Tersine mühendislik (reverse engineering), başkaları tarafından geliştirilmiş bir sistemin veya bir yapının çalışma biçimini ortaya çıkarmaya denir. Bu bir mekanik sistem, elektronik bir sistem veya bir yazılım olabilir.Bu işlemin amacı sistemin kopyalanması, üzerinde değişiklik yapılması veya çalışma biçiminin ortaya çıkarılması olabilir.

Bu yazıda yazılımlar için tersine mühendislik konusuna değineceğim.

Yazılım üzerinde tersine mühendislik nasıl uygulanır?

Yazılımlar için tersine mühendislik, bir yazılımın lisans şifresini kırma, kullanıcı tarafından istenilen girdilerin elde edilmesi veya yazılımlarda ortaya çıkan “lütfen lisans anahtarı” alınız gibi pencerelerin açılmasını (nag screen) engellemektir.

Bu yazı bilgilendirme amaçlıdır. Bu yazıdan okuyup, edindiğiniz bilgilerle AutoCad’in lisans anahtarını kıramazsınız. 🙂

Assembler nedir?

Assembler (çevirici), bir programı assembly diline çeviren araçtır. Assembly dili, 0 ve 1’den oluşan makina dilinden bir önceki aşamadır. Her işlemci mimarisi için (x86 ve x64 gibi) assembly komutları vardır. Tersine mühendislik için assembly kodlarını yorumlayabilmek gereklidir. Önlemi alınmadığı sürece hangi programlama dili ile geliştirilmiş olursa olsun, her yazılımın assembly kodlarına ulaşmak mümkündür.

Aşağıda, komut ekranına “hello world” yazdıran assembly kodu verilmiştir.

; ----------------------------------------------------------------------------
; helloworld.asm
;
; This is a Win32 console program that writes "Hello, World" on one line and
; then exits.  It needs to be linked with a C library.
; ----------------------------------------------------------------------------

    global  _main
    extern  _printf

    section .text
_main:
    push    message
    call    _printf
    add     esp, 4
    ret
message:
    db  'Hello, World', 10, 0

 

Uygulama

tm_3
Şekilde görülen program üzerinde çalışma yapacağız. Program tersine mühendislik konusunda alıştırma yapmak isteyen kişiler için geliştirilmiştir. Program başlatılınca aşağıdaki şekilde gözüken açılır pencere ekrana gelir. Amacımız, bu açılır pencerenin çıkmasını engellemek ve “status” bilgisinde bulunan “Nag not removed!” yazısını değiştirmektir. Bahsi geçen programın adı Nag1.exe’dir.

 

 

 

 

tm_4
Program başlangıcında çıkan açılır pencere

OllyDbg

1. Adım:

Assembler olarak OllyDbg programını kullanacağız. Üzerinde tersine mühendislik uygulanacak program OllyDbg ile açılır. Nag1.exe adlı programın OllyDbg ile açılıp assembly koduna dönüştürülmüş hali aşağıdaki şekilde görülmektedir.

tm_52. Adım:

İlk olarak yapacağımız işlem, programda gözümüze çarpan yazıları string tipi değişkenler içerisinde aramak. Programı assembler ile açar açmaz karşımıza tanıdık gelen string tipi değişkenler olduğunu gördük. İşimiz biraz daha kolay olacak. Programa sağ tıklayıp referans edilmiş bütün stringleri arayalım.

tm_63. Adım:

Tanıdık gelen bir string ifadesini bulup assembly kodu içerisinde geçtiği yeri saptayalım. Program açıldığında karşımıza çıkan pencerede “Please register this software…” yazıyordu. Bu ifadenin assembly kodundaki karşılığını takip edelim.

 

tm134. Adım:

“Please register this software…” string tipi değişkenin bulunduğu adresin birkaç satır üstüne JUMP komutu ile atlama yapıldığına dikkat edin.

JE komutu (Jump If Equal – eşitse atla) ZF=1 (Zero Flag – sıfır bayrağı) ise altındaki kodlar işlenmeden verilen adrese atlanır. JE SHORT 004010A7 satırından önceki satırda CMP (Compare) komutu ile kıyaslama yapılmış. Bu kıyaslamanın sonucu ZF bayrağını etkiler. JE komutunu JNE (Jump If Not Equals) ile değiştirerek kıyası tersine çeviririz ve bu sayede, program başında açılır pencereyi atlamış oluruz.

Eğer JE SHORT 004010A7 komutu işlenirken ZF biti lojik 1 durumunda ise, işlem 004010A7 adresine atlar ve oradan devam eder. 004010A7 satırında açılır pencerenin bilgileri girilir ve son olarak User32.MessageBoxA fonksiyonu çağırılır. Bu fonksiyonun çağrılması ile açılır pencere gösterilir.

 

tm14

JE SHORT 004010BD satırından “Clean crack! Good Job!” ifadesine atlıyor ve arada olan diğer işlemler es geçiliyor. Burada da yine JE komutunu JNE komutu ile değiştirerek, programın bu satır altındaki işlemleri işleyip başka yere atlamasına engel oluruz.

5. Adım:

Yapılan değişiklikleri kayıt edelim.

tm_10

6. Adım:

Programı kayıt edip yeniden çalıştırdığımızda, açılır pencerenin artık karşımıza gelmediğine ve “Status” bilgisinde “Nag not removed!” yerine “Clean Crack! Good Job!” yazıldığını görürüz. Bunlar işlemleri başarı ile gerçekleştirdiğimizi gösterir.

tm15.png

Tersine mühendislik hakkında kısaca bilgi verdik ve uygulama üzerinde gösterdik. Beyin jimnastiği yapmak için örnekte verdiğim uygulamarın daha fazlasını crackmes.de sitesinden bulabilirsiniz.

Bir sonraki yazıda görüşmek üzere 🙂


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s