"Iris v3.2" |
|
|
|
|
|
Araçlar:
|
|
|
Bu yazı gerçekten çok dikkat isteyen bir yazı.Unpack hakkında çok az bilginiz varsa veya PE dosya formatı hakkında bilginiz az ise zorlanabilir hatta anlamakat zorluk çekebilirsiniz.O yüzden anlamadım diye fazla üzülmeyin.Ben bu programı kırmak için acaip uğraştım. Gerekli olan araçları Protools'dan çekebilirsiniz.
|
|
Iris telock ile paketlenmiş.Section isimlerine bakarak Aspack veya asprotect sanmayın.Telock da sectionları bilnen packerların ismiyle değiştir diye bir seçenek var :) Ayrıca Pcguard ve sheriff license system ile korunmuş.Telock haricindekiler faso fiso.Fakat bunlarıda kırsanız program yine orjinal olmuyor.Çünkü gerçekten program DEMO yani bazı özellikleri gerçekten programda yok.Full serial bile girseniz about da yine evaluation yazıyo.Neyse bizim amacımız zaten unpack yapıp yeni bir şeyler öğrenmek.
KISIM I Unpack ve imort tablosunu düzeltmek.
telock'un debugger kontrolü var o yüzden frogsice veya icedump gibi bir alete ihtiyacımız olucak.Ben icedumpı kullanıyorum.Hem bu şekilde softice a bir sürü özellik de ekleniyor.(Mp3 player,clipboarda kopyalama,screen shot vs...).
Icedumpı icedump.tsx.org dan indirin.Kendi softice versiyonuza göre icedumpı çalıştırın.Softice versiyonunuzu softice ekranında ver yazarsanız görebilirsiniz.Şimdi artık unpack etmeye hazırız.Softice a geçin ve şunu yazın
-protect on
Bundan sonra iris içalıştırın softice duracaktır.Icedump IDT ye erişildiğini söyliycek.O andayken eax da 8010604E gibi birşey görüceksiniz eax ı 10604E yapın (yani 80000000 dan çıkartıyosun).Daha sonra softice da şunu yazın.
s 0 l ffffffff B9,09,01,00,00,8D,BD,09,99,40,00,8B,F7
Bunu aklımda tutamam diyosanız bunu windowsun clipboarda kopyalayın.Softice durduğu zaman
-clip p
yaz softice a gelecektir.Bu aradığımız şey telock'un imzası.Softice pattern found at xxxxxx diyecek bulduğu yere bpx xxxxx diye breakpoint koyun.Daha sonra F10 ile takip edin.İlk başta bir loop xxx gibi bir şey görüceksin F10 ile onu geçin.Sonra bir sürü call göreceksiniz.Şu yolu izleyin
Call xxxx ise onu F8 ile izle
Call [xxxxx] ise F10 ile geçebilirsin
call eax ise yine F10
en sonunda
popad
jmp [ebp-30] diye birşey görüceksiniz.
tam burdayken dd [ebp-30] yazarsa 47C70C yi görürsün bu bizim OEP
Şimdi artık program unpack olduğundan bizim memory den onu dump etmemiz gerekli ama dump etmeden önce düzeltmemiz gerekn bir şey kaldı.Telock PE header ile oynuyo yani section(kısım) sayısına FFFF yazıyor böylelikle memory dumperlar şaşırıyo.O yüzden Softice da iken
db 400000
Biraz aşağıya inin PE... felan göreceksiniz. FFFF yi 0500 şeklinde değiştirin kısım sayısını yine 5 yapıyoruz.Dikkat edin db 400000 yapmaya eğer dd 400000 yaparsanız yanlış değiştirebilirsiniz.Bu şekilde işimiz hemen hemen bitmiş oluyor.Şimdi jmp [ebp-30] satıırında iken Softice a şunları yazın
a eip jmp eip
Bu şekilde Program memory de sonsuz bir loop a girdi.Şimdi Peditor ile task listten iris.exe yi buluyoruz ve dump full ile dump ediyoruz.Bunu yine Peeditor e yüklüyoruz ve OEP kısmını 0007C70C (47C70C-400000 ) şeklinde değiştiriyoruz.Programı çalıştıralım.Program hata verip çalışmıyor.
İşte şimdi benim günlerimi alan zor kısma geldik Import tablosunu düzenlemek.Telock import tablosunu bozuyor.O yüzden iki seçeneğiniz var ya import tablosunu bozmadan yakalamak ve importu dump edip bizim exeye yapıştırmak yahut Revirgin ve Import Reconstrctor ile importu rebuild etmek.Ben Import Reconstructor ile rebuidl yapmayı deniycem.Şimdi basit bir kaç bilgi vermek istiyorum.Packerlar genelde şu şekilde bozuyorlar import tablosunu mesela diyelim ki kernel den bir fonskiyon mu çağrılacak ASM de şöyle bir şey diyelim
push xxxxxx call Kernel32!......
packer ise onu şu şekilde değiştiriyor.
push xxxxxx call [yyyyyyyy]
dd yyyyyyyy yazdığınız da Kernel32!.... yi görüyorsunuz.Yani bir array oluşturuyor import için ve direkt çağırmak yerine bu array den çağrılıyor.O yüzden packer olmadıpı zaman importlar da gitmiş oluyor.
Evet importu rebuild etme zamanı geldi.Iris'i açın ve o açıkken Import Reconstructor ı açın ve Attach to Active process listesinden Irisi seçin.Daha sonra OEP yazan yere bulduğumuz OEP i yani 7C70C yi yazıyoruz. RVA yazan yere Import tablosunun yerini yazmamız lazım.Ama bunu nasıl bulucaz.İlk başta bakalım sectionlara ve boyutlarına.
Name Virt size RVA Phys size Phys Ofs
.aspr 00087000h 00001000h 0003D800h 00001000h
.aspr 00020000h 00088000h 00009400h 0003E800h
.aspr 00068000h 000A8000h 00003C00h 00047C00h
.rsrc 0006B000h 00110000h 0006B000h 0004B800h
.aspr 0000C454h 0017B000h 0000C600h 000B6800h
Ben paramı ikinci kısma koyuyorum.RVA yerine 88000 yazın ve Get Import butonuna tıklayın.Evet bir kaç bir şey buldu peki bütün importlar sadece bu kadar mı ? veya 8800 den öce de import varmı ?.Hayır bunları ne yazıkki bilmiyoruz.Bunu deneme yanılma yolu ile bulucaz.Şimdi RVA yerine 87500 girelim ve size yerine de 2000 girelim.Evet gördüğümüz gibi Advapi dllden önce geçerlibir import yok.Tamam o zaman biliyoruz ki import tablomuz 88000 den başlıyo ama nerde bitiyoyine bilmiyoruz.Yine RVA yerine 88000 yazalım ve Get import butonuna tıklıyoruz.Bakıyoruz ki proto.dll den sonra yine geçersiz bir table var ama belki içersinde geçerli olan grişler var olabilir proto.dll den sonraki girdilere bakalım varmı diye.Bakıyoruz ve geçerli bir entry bulamıyoruz Her hangi bir ihtimala karşı Proto.dll nin altındaki bir tree(ağaç) yi açıp Trace level 1 i seçin.Evet hiç bir şey gelmedi demekki bunlar geçersiz..O yüzden proto.dll nin altındaki bütün girdileri seçip (Shift e basılı tutup baş ve sondaki seçin hepsi seçilir) Delete Thunks ile silin.Advapi32.dll nin üstünde bir entry varsa onu seçip Delete Thunks ile silin.
Şimdi advapi32.dll nin altında bazı thunkların invalid olduğunu göreceksiniz.Mesela Comctl32.dll nin altında ki thunk geçersiz.Şimdi orada ki + işaretine tıklıyoruz.Görüyoruz ki bazıları bozuk bazıları MFC42.dll yi gösteriyor.Şu şekilde yapıcaz.
Sağ taraftaki Show invalid butonuna tıklayın.Bu geçersiz olanları bulacak ve seçecektir.Seçili durumdayken sağ tuş tıklayın ve Trace Level 1 i seçin.Bu şekile hemen hemen hepsi çözülecektir.Sadece 2-3 tanesi hala bozuk kalacaktır.(Telock importları hem yönlendiriyor ayrıca aralarına boşluklar koyuyor o yüzden Revirgin kullanıyorsanız elinizle oraları düzeltemniz lazım.)
Yeniden show invalid butonuna tıklıyoruz ve seçili olanlardan birinin üstüne gelip Cut Thunks ı seçiyoruz.Evet listeye baktığımızda bütün importların listelendiğini görüyoruz.Artık yeni import tablomuzu dump ettiğimiz exeye ekleme zamanı geldi.Şimdi yine iki seçeneiğimiz var isterseniz hiç bir şeyi ellemeden yeni bir section yapıp import tablosunu buraya ekliyebiliriz veya yeni import tablomuzu telock un packer kısmına ekliyebiliriz ne de olsa bize artık gerekmiyor.Hem böylece boyut 100k felan azalacaktır.
1.Hiç bir şeyi ellemek istemiyorum diyosanız şunu yapın.Fix dump tuşuna tıklayın.Dump ettiğiniz exe yi seçin voila program unpack olmuştur.
2.Ben yer kazancam diyorsanız.Add new section yanindaki check box ı kaldırın ve New Import Infos taki RVA yerine telock section'uın RVA sını yazın.Yukarıdaki tablo dan da gördüğünüz gibi 17B000 de başlıyor.RVA yerine 17B000 yazın ve yine Fix dump tuşuna tıklayıp dump ettiğiniz exeyi seçin.Voila program unpack olmuştur.
Programı çalıştırın eğer sizde yine hata veriyosa baştan tekrar alın.Ben çalıştırdığımda program çalışıyo ve kapanıyordu.Ner de yanlış yapmıştık ?.Herşey doğur gibiydi aslında.Araştıyoruz ve şunu buluyoruz.Telock dosyaı paketlerken Mutex de ekliyebiliyo.Mutex de ne ? Windows Programmer Reference da şunu yazıyor.
A mutex object is a synchronization object whose state is signaled when it is not owned by any thread, and nonsignaled when it is owned. Only one thread at a time can own a mutex, whose name comes from the fact that it is useful in coordinating mutually exclusive access to a shared resource. For example, to prevent two threads from writing to shared memory at the same time, each thread waits for ownership of a mutex before executing the code that accesses the memory. After writing to the shared memory, the thread releases the mutex. A thread uses the CreateMutex function to create a mutex object. The creating thread can request immediate ownership of the mutex and can also specify a name for the mutex object. Threads in other processes can open a handle of an existing mutex object by specifying its name in a call to the OpenMutex function. For additional information about names for mutex, event, and semaphore objects, see Interprocess Synchronization.A thread uses the CreateMutex function to create a mutex object. The creating thread can request immediate ownership of the mutex and can also specify a name for the mutex object. Threads in other processes can open a handle of an existing mutex object by specifying its name in a call to the OpenMutex function. For additional information about names for mutex, event, and semaphore objects, see Interprocess Synchronization.Mutex aslında program ikinci defa hafızada varmı diye düşünülmüş bir fonksiyon.Siz bir strinigi tanımlıyorsunuz ve eğer o hafızada ise programınız çalışıyor demektir.Telock da bunu packer kısmına koymuş.Eğer packer hala çalışıyosa o zaman mutex oluşuyor ve programın hala eski halinde olduğunu anlıyor.Eğer tanımlanan mutex yoksa program unpack olduğunu anlıyor ve kendini kapatıyor.
Şİmdi biz yine iki şey yapabiliriz Ya her bir karşılaştırmayı değiştirebiliriz.Veya her zaman hafızada olan bir mutex bulmamız lazım.Softice ile CreateMutex ile bpx koyunca MPR.dll de Softice ın durduğunu göreceksiniz.Hmm bir bakalım hangi mutex'i kullanıyor.Bu eğer apinin parametrelerine bakarsanız. MPR.dll nin MPR mutex'i kullandığını görürsünüz.Şimdi Iris i bu breakpoint aktifken açtığımızda onunda IrisMutex i kullandığını göreceksiniz.Şimdi Unpack edilmiş exe yi açın ve IrisMutex i arayın ve onun yerine MPRMutex yazın.Yine bir sorun var boyu bir eksik o yüzden MPRMutexx oluyo o yüzden en son x nin hex code u olan 78 yerine 00 yazıyoruz.Bu şekilde stringi kapatmış oluyoruz.Programı bir daha çalıştırıyoruz.Yuppi program çalışıyor.
KISIM II Keygen yazmak
Program yine 15 gün sonra çalışmamaya başlıyor.Program Sheriff License system ile korunuyor.Bu ne menem bir şey diye SDK sını download edelim.System Apps in içinde keygen programı var.Şimdi Iris'e bir keygen yazalım.c:\windows\5358-8621-2429-7641-5701\'ın içindeki her bir dosyayı sil PCGwin32.li3 yi de sil Registry den HKEY_LOCAL_MACHINE\Software\Acudata keyi silin.Şimdi programı açtığınızda size serial soracaktır.Evet burda Sheriff ile seriali döşiycez.Ben dowload ettim SDK sını(http://www.sheriff-software.com/zipfiles/SlsSdk.exe) 6 tane doldurulacak yer var
Product Name:Iris Evaluation
Product ID :5358-8621-2429-7641-5701
Product Secret ??
Product secrets exenin içinde gözükmüyor.Program onu çalıştırıldığında deşifre
ediyo.Hmm nasıl bulucaz biz onu.Biraz lame bir method ama olsun.
unpack edilmiş exeyi çalıştırın ve peditor veya procdump ile processi dump edin.Daha
sonra :5358-8621-2429-7641-5701 yı bu dump edilen exe de ara.
Onun biraz altında 4 tane güzel string görüceksiniz.Bilerek hepsini vermedim
araştırıp kenidiniz bulun hazıra konmayın.
0763-**
1854-**
2482-**
3739-**
Keygeni açıyoruz bilgileri giriyoruz.Programın bize verdiği referans kodunu keygene veriyoruz.İstediğimiz özellikleri dolduruyoruz.Bingo serial hazır.Seriali yazınca program kapanacak bir daha açtığında baştaki trial yazısı gicektir.Ama bu keygen ile unpack edilmemiş exeyi çalıştırırsanız program yine expire oluyo çünkü ayrıca Pcguard ile 30 günlük koruma da konulmuş(PCGwin32.li3).
KISIM III Kozmetik değişiklikler
Program hala demo ve yine bazı özellikleri can sıkıcı.Öncelikle ilk baştaki dialoğu kaldıralım.Bpx loadbitmapa iyi br breakpoint.Mfc42.dll nin içinde kendiniz bulacaksınız.Call dan geriye dönün ve döndüğünüz callı not edin.Orayı noplarsanız dialog bir daha gelmez.
Ayrıca about kısmında Evaluation versiyon yazıyo onu da Registered versiyon diye değiştirebilirsiniz.Ama dikkat edin Iris Evaluation daki evaluationı değiştirmeyin malum o keygen için önemli.Birde Statistic teki seçenekleri seçtiğinizde bir dialog gösteriyo onları da kırmak basit sayılır.
* Possible Reference to String Resource ID=32090: "Evaluation Version will show random generated data"
Bunları bulun ve hemen üstündeki jmplarla oynayın.Son olarak birde address booka en fazla 10 tana giriş yapabiliyorsunuz.Onu kırmak da basit
* Possible Reference to String Resource ID=32084: "Address Book is limited to 10 entries.
Satrını bulun ve onun hemen üstünde cmp eax,9 satırı var oradaki satırı jmp
xxxx şekliden değiştirin.İşte hepsi bu kadar.Ama dediğim gibi fazla bir şey
beklemeyin sonuçta program demo ve gerçekten bazı özellikleri kısıtlı veya hiç
yok.
|
|
Bu yazıda yazım yanlışları hatta bilgi hatası olabilir.Eğer bir yanlış bulursanız bana email atın düzeltmeye çalışırım.Bir programı eğer gerçekten kullanıyorsanız, programı satın almayı düşünün.Micro$oft programlarını - bırakın satın almayı - kullanmayı bile düşünmeyin.