ETA v7.4.x (DOS) |
|
|
|
Program Tipi: Home Made Protection (Serial, Lisans Dosyasi) |
|
İyi Havalandırılmış Bir Beyin ve Yakıt Olarak Biraz Kola J |
|
|
|
|
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.
|
|
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.