En fazla e-maili SoftICE yüzünden alıyorum o yüzden daha detaylı bir açıklama yazmaya karar verdim.Umarım artık anlaşılır.
SofICE Kurulumu
SoftICE ı iyi bir şekilde kurup ayarlamazsanız gerekli verimi alamazsınız.Kurulum ekranında önemli olan 3 nokta var
1. Video Adapter
2. Mouse
VideoEkran kartı ayarları SoftICE'ın çalışması için çok gereklidir.Bu ayarları yanlış yaparsanız SoftICE ı kullanmanız mümkün olmıyabilir.Bu ayarlara çok dikat edin.İlk olarak ekran kartnız listede varsa onu seçin.Daha sonra Test tuşu ile çalışıp çalışmadığınız kontrol edin.Eğer ekran kartınız listede yoksa yahut ilerde problem yaşarsanız ekran kartı olarak "Universal Video Driver" seçeneğini seçin.
Mouse
Mouse unuzun tipi neyse ona uygun mouse'u seçin.Yanlış mouse u seçerseniz SoftICE sapıtabilir o yüzden dikkatli olun.
SoftICE'ın Ayarlanması
SofICE i iyi ayarlıyamazsanız programdan faydalanamazsınız.İlk olarak bir boot menüsü oluşturalım böylelikle windows her açıldığında bize SofICE ile açılıp açılmıycağını sorsun.Autoexec.bat ve config.sys dosyalarını aşağıdaki gibi değiştirin.
Autoexec.bat dosya örneği. !!!!Sizin autoexec.bat dosyanızın sonuna bu satırları ekleyin.Eğer başa eklerseniz sorun yapar.!!!
Rem -----Buradan itibaren kopyalayın-------
goto %config%
REM Load SoftICE - SoftICE in kurulu oldugu yer onemli !!
:SICE
C:\PROGRA~1\NUMEGA\SOFTIC~1\WINICE.EXE
REM SoftICE olmadan baslangic
:NORM
Rem ----Buradan kesin------
Config.sys dosya örneği.!!!!Sizin config.sys dosyanızın sonuna bu satırları ekleyin.Eğer başa eklerseniz sorun yapar.!!! Rem -----Buradan itibaren kopyalayın-------
REM Menüyü olustur.
[MENU]
MENUITEM NORM,Windows 98
MENUITEM SICE,SoftICE ile Windows 98
MENUDEFAULT NORM,5
[NORM]
[SICE]
Rem ----Buradan kesin------
Benim kullandığım winice.dat dosyasını download edin ve SoftICE ın kurulu olduğu klasöre kopyalayın.Winice.dat 'a yaptığınız her değişikliğin etkili olabilmesi için yeniden windowsun başlatılması lazım.Bu yüzden programı kurduktan sonra winice.datı değiştirip öyle restart atın.SoftICE Komutları
SoftICE kurmamıza rağmen etkili bir şekilde kullanmayı öğrenmek o kadar kolay değildir.Kullana kullana sizde bir şeyler öğreneceksiniz.Fakat burada SoftICE 'ın nasıl kullanıldığına dair bir kaç örnek verelim.
SoftICE a geçmek için Ctrl ve D tuşuna aynı anda basın.Bu bütün programları durduracak ve sizi SoftICE ekranına götürecetir.
SoftICE a geçince bir kaç pencere ve değişik bilgiler göreceksiniz.Alttaki pencere bizim komutları yazdığımız input penceresi.Bazı komutalar şöyle..
x = SoftICE dan çık.
bpx = SoftICE a belli api kodlarında dur emri
bpm = SoftICE a belli bellek bölgelerinde dur emri
bpr = Belli hafıza bölegelerinde dur emri
d = Belleği ve orada yazan değerleri göster
e = Bellekteki değerleri değiştirir
cls = Input penceresini temizle.
s 0 l ffffffff 'text'= Hafızada text yazısını arar
Örnek vermek gerekirse :
bpx getdlgitemtexta SoftICE a bu api kodunu görünce dur komutunu verir
bpm 0157:0009AC2D SoftICE a o belleğe erişildiği zaman dur komutunu verir.
bpr 0157:00643345 0157:00643345 iki yer arasında bir yere erişildiği zaman dur komutunu verir
d 00456787 o bölgedeki bellekteki değerleri gösterir.
d eax eax registerinin belirttiği yerdeki belleği gösterir.
Birde input penceresinde kullandığımız komutalardan da bahsedelim.
bl = O andaki breakpointleri gösterir((00) BPX #0028:09876543 C=01 gibi)
bc = O anda konulmuş break pointleri temizler (bc 1 bir nolu breakpointi siler.)
bd = Break pointi kapatir(bd 0 0 nolu breakpointi kapatır)
be = Break pointi açar (be 0, kapatılan 0 nolu breakpointi açar)
? = Belli bir register veya sayının değerini gösterir.( ? 23 # gibi)
SoftICE Problemleri
Bu problemlerin %90 ı winice.dat dosyasını düzenlemediğiniz için olmaktadır.
Uyarı: Problemlerinize geçmeden önce lütfen winice.dat dosyasını download edip SoftICE ı kurduğunuz klasöre kopyalayın.
1. SoftICE a geçiyorum breakpoint koyunca symbol not defined diyor.
- Breakpoint koyduğunuz dll winice.dat dosyasında bulunmuyor demektir.Kernel32.dll user32.dll vs yi winice.dat dosyasında bulun ve o satırın en başındaki ; i kaldırın.
2. Bazen SoftICE a kendiliğinden geçiyor ve bir daha geriye dönemiyorum.
- R tuşuna basın ve daha sonra faults off yazın.
3. Ctrl+D kombinasyonunu Alt+Z şeklinde nasıl değiştirebilirim;
- winice.dat dosyasının INIT kısmını şu şekilde değiştirin
INIT="code on; altscr off; lines 60; wc 32; wd 8; faults off;ALTKEY ALT Z;X;"
4. Ekran boyutunu nasıl değiştirebilirim.
- wc,wd lines değerlerini değiştirerek bunu yapabilirsiniz.
5. SoftICE bir sürü loading unloading vs mesajları gösteriyor bunu nasıl kapatabilirim
- winice.dat ı açın ve VERBOSE=OFF satırını ekleyin.Yahut loader32.exe yi açın.Edit/SoftICE initializing settings den "Disable diagnostic messages" ı seçin.
6. Init kısmına eklediğim komutlar çalışmıyor.
- Init kısmına eklenen komutlar ; ile birbirinden ayrılmalı ve en sonunda X; olmalıdır.X komutu SoftICE dan çık demek oldupundan eğer X; den sonra komut eklerseniz bunlar çalışmıycaktır.Kısacası init kısmı şöyle olmalıdır. INIT="command1;command2;...;commandn;X;"
7. Bazen SoftICE girdiğim zaman mouse deli gibi oynamaya başlıyor.Hiç bir şey yapamıyorum.Bu olay bazen SoftICE dan çıktığım zamanda oluyor.
- Bu olay mouse işlem yaparken SoftICE a geçildiği zaman oluyor.Bu yüzden mouse un senkronizasyonu bozuluyor.Bunu düzeltemek için bir kaç kez Ctrl+M tuşuna basın.Bir kaç kez bastıktan sonra mouse eski haline dönecektir. Eğer bu olay windows ortamına geçtiğinizde olursa Ctrl+Alt+Del tuşlarına bir kez tıklayın Task Manager geldiğinde hemen Esc ile çıkın.Buda mouse u eski haline getirecektir.
8. Bir program HKLM\Software\DandikSoft\Serial diye bir keyi okuyor.Ben bpx regqueryvalueexa şeklinde breakpoint koyuyorum ama SoftICE yüzlerce kez duruyor.Sadece belli keye ulaşıldığı zaman nasıl durdurabilirim.
- Bu soruyu biraz açıklıyarak cevap vermek istiyorum bunu iyi anlarsanız çok işinize yarar.Şimdi ilk olarak RegqueryValueexa fonkisyonu ne işe yarar ve hangi parametreler yollanır ona bir bakalım.win32.hlp dosyasını açıyoruz ve şunu görüyoruz
LONG RegQueryValueEx(
HKEY hKey, // çağrılacak keyin handle ı
LPTSTR lpszValueName, // alınıcak değerinin isminin olduğu adres
LPDWORD lpdwReserved, // saklı
LPDWORD lpdwType, // değer tipinin adresi
LPBYTE lpbData, // fonksiyon sonucunun adresi
LPDWORD lpcbData // fonksiyon sonuc adresinin büyüklüğü
);
Bu fonksiyon stdcall şeklinde bir fonksiyon yani parametreler en sondan başlayarak push ediliyor.Siz bu breakpointi koyup SoftICE geçtiğiniz zaman ESP şu şekilde olacaktır ...
[ESP+18h] - lpcbData
[ESP+14h] - lpData << Buraya fonksiyonun sonucu geliyor.
[ESP+10h] - lpType
[ESP+0Ch] - lpReserved
[ESP+08h] - lpValueName << Alınıcak olan değerin ismi.
[ESP+04h] - hKey
[ESP+00h] - return EIP << Call'ın yapıldığı adres.
Yani SoftICE durduğu zaman biz dd esp+14 yazarsak fonksiyonun sonucunun nereye yazıldığını görürüz.Yahut dd esp+8 yazarsak hangi anahtarın çağrıldığını bulabiliriz.Şimdi bizim istediğimiz sadece bir keyden okunduğu zaman durdurmak.Aşağıdaki breakpoint işimiz görecektir.
BPX RegQueryValueExA IF *(ESP->8) == 'Seri' DO "D ESP->14;"
Eğer program Seri ile başlayan bir keyden bir şey okursa dur.İsterseniz bu nasıl oluyor bir bakalım
*(ESP->8) demek esp+8 in gösterdiği yerdeki içerik demek.Bildiğiniz üzere push edilenler dword olduğu için yani 4 byte biz sadece 4 haneyi okuyabiliyoruz.Eğer esp+8 in gösterdiği yerde Seri yazıyorsa,
Do d esp->14 de esp+14 bölgesi yani sonucun alındığı bölgeyi göster demek.Bu şekilde yazmak uzun olabilir o yüzden macro ile bu işi halletmek en güzeli.Bu makroyu winice.dat dosyasına ekliyebilirsiniz eğer ekli değilse
MACRO bpreg="bpx regqueryvalueexa if*(esp->8)=='%1' do \"d esp->14\""
%1 demek macroya gönderilen parametre demek \ işaretlerini eklememizin sebebi SoftICE, " işaretlerini macro bitişi kabul ettiği için biz \ işareti ile " ları yok saydırıyoruz.
eğer Serial keyine ulaşıldığında durmasını istiyorsanız SoftICE da iken artık sadece şunu yazmanız yeterli olucak
bpreg Seri
Dikkat edin sadece ve sadece ilk dört karakteri giriyorsunuz.
Bu şekilde macroları geliştirebilirsiniz.Mesela bunu getwindowtexta veya getdlgıtemtexta ya uygulayıp sadece sizin isminiz istendiğinde SoftICE a geçmek vs .Unutmamanız gerek fonksiyona gönderilen parametreler ve bunları ESP de göründüğü durum.Her bir parametre bir dword da oluyor.Yani sadece ilk dworda erişme şansımız var.
Umarım bu ipuçları size faydalı olur.
Bu ilk yazımızda herkesin bildiği ve bilgisayarımızda olmazsa olmazlardan olan winzip sıkıştırma programını kıracağız, serial bulacağız daha doğrusu..(bazıları winace kullanıyo errorinside gibi allam yaaa.) Winzipimizi açıyoruz ve karşımıza bi ekran çıkıyo ve kabul edip etmediğimi soruyo (doğruyu söylemek gerekirse şimdiye kadar hiç bir kez orayı okumadım:) ve "i agree" diyoruz.Uyuz olurum böyle şeylere (>:S).
Neyse şimdi register bölümüne gelelim abouttan ve isim kısmına blue serial kısmınada 123456789 yazın. (Kendi isminizi de yazabilirsiniz tabi:) Ctrl+D yapıp Softice'a dalanzi ve hemen breakpointimizi koyanzi..: bpx getdlgitemtexta enter. ve Bi daha Ctrl+D yapıp çıkıyoruz. Winzipteyiz ve ismimizi ve serialimizi doğrulaması için ok diyoruz ve hooop softicedayız.! bc * yazıp enterlıyoruz ve breakpointlerimiz tertemiz olanzi :) F10 ile kodlarımızı trace edip aşağıdaki yere geliyoruz:
:00407F9B 56 push esi
:00407F9C E822790300 call 0043F8C3
:00407FA1 803D78CD480000 cmp byte ptr [0048CD78], 00
:00407FA8 59 pop ecx
:00407FA9 59 pop ecx
:00407FAA 7459 je 00408005
:00407FAC 803DA4CD480000 cmp byte ptr [0048CDA4], 00
:00407FB3 7450 je 00408005
:00407FB5 E81BFAFFFF call 004079D5 --> işte buradayız(acaba call neyi çağırıyor dersiniz)
:00407FBA 85C0 test eax, eax --> karşılaştırma yap!(test)
:00407FBC 7447 je 00408005 --> testin sonucu yanlışsa 00408005 noktasına uç!
:00407FBE 57 push edi
00407FB5 noktasındaki call serialimizin hesaplandığı noktaya uçuyor. Peki biz ne yapacağız bu durumda tabiki F8 ile 00407FB5 noktasından içeriye dalacağız(balık gibi:) ve sonra aşağıdakileri görene kadar kodları trace edeceğiz.
:00407A91 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0]
:00407A97 50 push eax
:00407A98 57 push edi
:00407A99 E8A9000000 call 00407B47
:00407A9E BEA4CD4800 mov esi, 0048CDA4
:00407AA3 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0] --> gerçek eax tam burda şekle şemale girdi!
:00407AA9 56 push esi --> işte burda "d eax" yazarak data penceresinde seriali görenzi!
:00407AAA 50 push eax
:00407AAB E820180600 call 004692D0
:00407AB0 83C410 add esp, 00000010
00407AA9 noktasına geldiğimiz zaman yapmamız gereken şey "d eax" yazmak böylece gerçek seriali data penceremizde göreceğiz.
Uyarı: Eğer winzipi w32dasm ile açıp 00407FBC 7447 je 00408005 satırındaki "je" yi "jne" çevirirseniz register olduğunuza dair bir mesaj alırsınız ama bu sadece bir mesajbox tan ibaret olur.Program gerçek eax'ın hesaplandığı yerden buraya kadar birçok reg değişikliklerine uğradığı için üstte belirttiğim gibi sedece mesagebox alırız.
Zamanında bir gecesini icq'da chat yaparak bana ayırıp winzipi kırmama yardım eden arkadaşım "noname"e burdan teşekkür ederim.(Biraz geç bi teşekkür oldu amma..)
Hiç yorum yok:
Yorum Gönder