ETA v7.4.x (DOS)

RvaZero
Program Url: www.eta.com.tr
Program Tipi: Home Made Protection (Serial, Lisans Dosyasi)
     Araçlar:
İyi Havalandırılmış Bir Beyin ve Yakıt Olarak Biraz Kola J
Basit ( )  Orta (x )  Zor ( )  Pro ( )


Başlangıç

UYARI ! !

Bu sayfada verilen bilgiler ve yazılımların kullanımından kaynaklanacak hertürlü olumsuzluktan host sağlayıcı, sayfa sahibi ve yazarlar kesinlikle hiçbir sorumluluk kabul etmeyecektir. Tüm sorumluluk ziyaretcilere aittir. Bu sayfada verilen bilgilerin tamamı eğitim amaçlı olup hiçbir şekilde söz konusu yazılıma (ETA) zarar vermek amaçı güdülmeden ele alınmıştır. Bu sebeple verilen bilgilerin ve uygulamaların eğitim amacı dışında kullanımı halinde ortaya çıkacak olumsuzluklar tamamiyle bilgileri ve uygulamaları suistimal eden şahıs yada şahıslara aittir. Eğer bu kuralları kabul ediyorsanız okumaya devam edin yoksa lütfen sayfayı sağ üst köşedeki [X] e tıklayarak kapatın.

 

Yazı

Uzun bir aradan sonra ikinci tutorialimi hazırlamanın zamanı gelmişte geçiyordu artık. Ama hala hangi konu üzerinde yazmam gerektiğini kestirebilmiş değildim. Sevgili MrStop’un forumunda dolaşırken gözüme MrStop’un bir yazısında bahsettiği lamer vari (ve hatta sadece ticari çıkar düşüncesi taşıyan) istek mailleri ilişti. Bunlardan biriside ETA Ticari Yazılım Paketiyle alakalıydı. Bu program hakkında baya bir zamandır bir şeyler duyuyordum ama elime hiç geçmediği için bakmaya vaktim olmamıştı. Bunun sebebi yazılımın DEMO bile olsa sadece bayilerden temin edilebilmesiydi. Aslında yazılım standart bilgisayar kullanıcılarına da pek hitap etmiyor. Tabi muhasebeci felan değilseniz. En sonunda bir şekilde elime yazılımın DEMO sürümü geçti. Aslında benim ilgimi çeken asıl konu yıllardan beri mevcut olan bu yazılımın korumasıydı çünkü bir keygeni yoktu ve bildiğim kadarıyla bulabileceğiniz cracklerde ya hiç çalışmıyordu yada sorunluydular. Malum gerçekler acıdır Türk yazılım sektöründe kaliteli yazılım yaparlar korumayıda HDD seri nosuna bağlarlar sonrada yazılımlarının kırılıp çoğaltılmasından yakınırlar bu %60 böyledir. Tabi bu benim şahsi kanaatim J. Neyse sonunda böyle başarılı bir korumayı incelemek için kolları sıvadım. Son bir geyik daha burada sadece yazılımın kullandığı tekniklerden bahsedeceğim yani herhangi bir cracking dersi beklemeyin. Bu yazıyı sadece bir şeyler öğrenmek isteyen kişilerin anlayabileceği bir dille yazmaya çalıştım. Belki bu nedenle lamerlara biraz anlamsız gelebilir. ;P


Analiz:

Eveet benim bir programa ilk yaklaşımım onu analiz etmek şeklinde olur her zaman. Program C dilinde yazılmış ve paketlenmemiş bir DOS programı olarak çıkıyor karşımıza (bunu herhangi bir file analyzer ile öğrenmeniz mümkün). Kullanılan Modüller Overlay mantıkla çalışıyor. “Install7.exe” yi çalıştırıyoruz ve karşımıza şöyle bir ekran çıkıyor:

---------------------------------------------------------------------

*** ETA PROGRAMLARI "INSTALL" PROGRAMI V-7.4 ***

ETA Program Versiyonu : V-7.4.X ++

(Dikkat! "config.eta" dosyası geçerli bölümde bulunmalıdır)

Lütfen ETA'ya aşağıdaki parametreleri bildiriniz;

Parametreler : XXX XXX XXX XXX XXX XXX XXX XXX ;Hmmm 020h=32 haneli bir değer. Boşluklar olmadan 018h=24 hane eder.

ETA'dan gelen parametreleri aşağıya aralıklı veya aralıksız giriniz >

--------------------------------------------------------------------

ve daha sonra ünlü “config.eta” ya bir bakış fırlatıyoruz ben buna kısaca “krakerizm” diyorum “kadirizm” gibi ama farklı okunuyor :]. 0432h=1074 Byte uzunluğunda bir dosya. WinHex ile açtığımda içerisinde okunabilir hiçbirşey olmadığını gördüm. Tabi bu pek önemli değildi. ;) Bu bulguları bir kenara hemen kaydettim. Şimdi ikinci kısım olan reversing’e bir near jump yapalım.

Reversing:

Yazılımı IDA ile reverse ettikten sonra kodu şöyle bir incelemeye aldım ve IDA’nın zaten her şeyi benim için hallettiğini fark etmek fazla bir zamanımı almadı tabi. Bu olay tamamen bakış açısı ve yorumlama ile ilgili eheh J. Ve IDA’nın gücüyle hemen “Symbolic Debugging” olayına girdim. Bu işlemi uygulamamın nedenlerinden biriside üzerinde çalıştığım yazılımın DOS tabanlı bir yazılım olmasıdır. Malum Windows’taki gibi “bpx GetDlgItemtextA” diyemiyorsunuz DOS ortamında. ;) Bunlara ek olarak bu olay öyle bir şey oluyorki yazılımla işiniz bittiğinde iyi bir programcıysanız yazılımın kaynak kodunu tekrar yazmaya kadar olayı abartmanız mümkün. Hemen bir örnek vereyim:

IDA’dan alınmış ASM kodu
*********************

; int __cdecl far Sub_GetData(unsigned int,unsigned int)

Sub_GetData  proc far   ;Symbolic Debug kullanırken Softice’da “call Sub_GetData” olarak görürsünüz. ;)

nBuffer_Ofs   = dword          ptr -8
Temp          = word           ptr -4
Data_Seg      = word           ptr  6
Data_Offset   = word           ptr  8

        push    bp
        mov     bp, sp
        mov     ax, 8
        call      _ChkStack                       ; Bizim için önemsiz
        push    si
        push    di
        mov     ax, offset nBuffer                              
        mov     dx, ds
        mov     word ptr [bp+nBuffer_Ofs], ax     ; nBuffer Offset
        mov     word ptr [bp+nBuffer_Ofs+2], dx   ; nBuffer Segment
        mov     ax, 1                             ; Read Count 1 Byte
        push    ax                                ; unsigned int
        lea       bx, [bp+nBuffer_Ofs]
        mov     cx, ss
        mov     es, cx
        assume es:nothing
        push    word ptr es:[bx]                  ; unsigned int
        lea       bx, [bp+nBuffer_Ofs]
        mov     cx, ss
        mov     es, cx
        push    word ptr es:[bx+2]                ; unsigned int
        push    [bp+Data_Offset]                  ; unsigned int
        push    [bp+Data_Seg]                     ; unsigned int
        call      _movedata                                         
        add      sp, 0Ah
        les       bx, [bp+nBuffer_Ofs]
        assume es:nothing
        mov     al, es:[bx]
        and      ax, 0FFh 
        mov     [bp+Temp], ax
        mov     ax, [bp+Temp]
        jmp      $+3
        pop      di
        pop      si
        mov     sp, bp
        pop      bp
        retf
Sub_GetData  endp

C ile yazılmış hali
***************

char Sub_MoveData(unsigned int nSeg,unsigned int nOfs)
{
   char *nBuffer;
   movedata(nSeg, nOfs, _DS, (unsigned)nBuffer,1);
   return(*nBuffer);
}

Sembolik debug sayesinde softice’ta hafıza adresleri, atlamalar ve yordamlar (ve dahası) etiketler olarak gözükür. Buda büyük bir avantaja dönüşüyor. Bu yöntemle ve Analiz kısmında bulduğum verilerle birlikte (432h Dosya uzunluğu gibi) “config.eta” yı hafızaya aktaran ve daha sonra decode eden fonksiyonları v.s. buldum ve etiketlendirdim. Analiz kısmında dosyanın içerisinde okunabilir bir şey olmadığını söylemiştim. İşte bu noktadan sonra okunabilir veriler açığa çıkıyor. Böylece işim oldukça kolaylaşmıştı. Sonunda elime aşağıdaki “config.eta” haritası geçti. Türk yazılım sektörünün gelişmesine balta vurmamak amacı ile (ve lamerlar nedeniyle) dosya haritasının tamamını yayınlamıyorum. Milli duygularım kabardı yine J. Ama uyarmadan da olmaz bu işler. J

 
DOCUMENT DATE 19.02.2002 06:24
ETA KONFİGÜRASYON DOSYASI V7.4.x (Eksik Versiyon)
OFFSET UZUNLUK
AÇIKLAMA
0028h 0004h ROOT DİZİNDEKİ (ÖRN: "C:\) KLASÖR SAYISI
0046h 000Fh MÜŞTERİ ADI (ASCII OLARAK)
0064h 0007h VERSİYON (ASCII OLARAK)
006Eh 0008h SERİ NUMARA (ASCII OLARAK)
0078h 000Ah FİRMA YETKİLİSİNE AİT ANA (MASTER) ŞİFRE (ASCII OLARAK)
0118h 000Ah ŞİRKET SEÇMEYE KADAR KULLANILAN MENÜ ŞİFRESİ (TEXT OLARAK)
012Ch 0002h (RANDOM NUMBER 1) + (RANDOM NUMBER 2)
017Fh 0002h [017Fh] DIV 2=[0392h] , [0180h]=[0217h] DIV 2
01B8h 0004h ROOT DİZİNDEKİ (ÖRN: "C:\) TÜM KLASÖRLERİN İSİMLERİNDEKİ KARAKTERLER TOPLAMI
01BEh 0002h (RANDOM NUMBER 1) - (RANDOM NUMBER 2)
01BEh 0002h [0217h] DIV 2=[0180h] , [0218h]=[0260h] DIV 2
022Eh 0001h RANDOM NUMBER 1 = RND(WORD) MOD 0100h
0260h 0002h [0260h] DIV 2=[0218h] , [0261h]=[0391h] DIV 2
02CBh 0004h ROOTTAKİ DİZİN VE DOSYALARIN BOYUTLARI TOPLAMI
0320h 0028h KULLANILAN MODÜLLER (28h=40 ADET)
0361h 0002h DİSK VOLUME NAME’İNDEKİ TÜM KARAKTERLERİN TOPLAMI
0391h 0002h [0391h] DIV 2=[0261h] , [0392h]=[017Fh] DIV 2
03E4h 0001h RANDOM NUMBER 2 = RND(WORD) MOD 0100h
03EAh 0001h STOKTA 2. BİRİM VAR/YOK
03EBh 0001h CARİDE DÖVİZ VAR/YOK
03ECh 0001h BARKOD VAR/YOK
03EDh 0001h ÖZEL OKUL BORDROSU VAR/YOK
03F0h 0001h DÖVİZLİ RAPORLAR VAR/YOK
042Ah 0002h CRC 1 (DOSYA ŞİFRELENDİKTEN SONRA HESAPLANIR)
042Eh 0002h CRC 2 (DOSYA ŞİFRELENDİKTEN SONRA HESAPLANIR)
NOT: Yukarıdaki dosya yapısı hemen her versiyonda değişmektedir.

config.eta” ’yı ve parametrelerin ne olduğunu yani “install7.exe” nin tamamını çözmek de diyebiliriz 8 günümü aldı. ETA’nın korumasıda çözüldü böylece. İtiraf etmeliyim ki güzel bir tecrübe oldu benim için. Sırasıyla sadece parametrelerde kullanılan koruma katmanlarını şöyle belirtebiliriz.

1- Parametre’yi oluştur.
2- Parametreyi (Master) anahtarı kullanarak şifrele. (Burada 4400 Byte’lık bir tablo söz konusu)
3- Parametrenin elemanlarını diziye dönüştür.
4- Diziyi tekrar şifrele. (Yine Parametrede belirtilen 3 (Secondary) anahtar kullanılır)
5- Kullanıcıdan Parametre iste.
6- Aldığın Parametreyi (Master) anahtarı kullanarak deşifre et. (Burada da 4400 Byte’lık tablo söz konusu)
7- Alınan Parametreyi Diziye Dönüştür.
8- Dizi içerisindeki (Secondary) anahtarları kontrol et.
9- Anahtarlar doğruysa diziyi deşifre et. (Alınan Parametrede belirtilen 3 (Secondary) anahtar kullanılır.)
10- Her şey yolundaysa deşifre edilen diziden bilgileri al ve “config.eta” yı kullanılabilir hale getir.

İşte olay bu kadar yani bizim girdiğimiz parametrenin sadece “config.eta” yı açan bir anahtar olduğu çıkıyor ortaya. Çünkü Her şey “config.eta” da bitiyor. Yani elinizde “config.eta” haritasının tamamı olmadığı sürece ETA ne isterse onu kullanıyorsunuz. Bende olduğu gibi 20 kayıtlık DEMO, 1 Kullanıcılı. ;) Ek olarak “install7.exe” ye gireceğiniz parametreyi hesaplatacak keygen i yazmak için zaten “install7.exe” yi hemen hemen yeniden yazmanız gerekiyor. Valla ben yazdım ordan biliyorum. J Neyse bu kadar bilgi bir şeyler öğrenmek ihtiyacı peşinde olan arkadaşlara yeterli sanırım.