⏩ OldSchoolKO ✅ | " VALHALLA " 2.000.000 TL ÖDÜL ⭐ 3 YIL ARADAN SONRA ✅ v.1098 MYKO EFSANESİ ⚔ OFFICIAL 17.05.2024 - 21:00 ⏪
Cuceko

KnightOnLine.exe'nin ASM ile DLL çağırmasını sağlamak & ASProtect/ASPack Unpackleme.

  •         

            

            

            

            

  • HyperFilter | DoS Protection | DDoS Protection | DoS Mitigation | DDoS Mitigation | AntiDoS | AntiDDoS | Proxy Shielding
1 Çevrimdışı

111Mutay

Guest
Evet arkadaşlar, bugün birçok kişinin aklında soru işareti olan bir konuyu daha aydınlatmaya çalışacağım. İşe en basit kavramlardan başlayalım ve mantığını iyice anlayalım.



Bir compiler tarafından derlenmiş olan herhangi bir çalıştırılabilir dosya(.exe) veya Dynamic Load Library(.dll) işlemcinin anlayacağı dilin bir üst seviyesine yani ASM diline dönüştürülür. ASM dilinde kod satırları programın açılış anından itibaren sırayla ve tek tek yürütülür. Programın açılışındaki ilk ASM koduna entry point yani giriş noktası ismini veriyoruz. Her programlama dlinde olduğu gibi ASM dilinde de operatörlerimiz mevcut. Şimdilik ihtiyacımız olanlara bir göz atalım;




MOV komutu : Kopyalama ve Değer atamada kullanılır.



Örnek : MOV EAX,ECX (EAX değişkenine ECX'te tutulan değeri atadık.)



ADD komutu : Adından da anlaşılabileceği üzere toplama işleminde kullanılan komuttur.



Örnek : ADD AL,2 (AL değişkenine 2(hex) değerini ekler)



SUB komutu : Çıkartma işlemi yapmak için kullanılır.



Örnek : SUB AX,2 (AX değişkeninden 2 çıkartır)



INC komutu : Değeri bir arttırmaya yarar.



Örnek : INC AX (AX registerindeki değeri bir arttırır)



JMP komutu : Belirli bir satıra atlamayı sağlar.



Örnek : JMP 00768080 (768080 satırına atlar.)



CALL komutu : Bir alt program parçacığını başlatır.



Örnek : CALL 0046A080 (46A080'deki program parçacığı başlar)



NOP komutu : NO OPERAND anlamına gelir. İşlemci bu satırı pas geçer. Bu kısımları programa ek işlemler yaptırmak için düzenleyebiliriz.(İleride değinicem.)





Şimdilik bu kadarını bilmeniz yeterli. Daha detaylı bilgi için ASM derslerini izleyebilirsiniz.



Evet, gelelim ihtiyacımız olan programlara. Eğer yamayı uygulayacağımız exe bir packer tarafından packlenmişse, ilk önce unpack etmemiz gerekiyor. Exenin packli olup olmadığını Peid programı ile analiz edebilirsiniz. Ve tabiki de piyasanın en sağlam debuggeri olan OllyDbg'ye ihtiyacımız var.



Ollydbg : http://www.ollydbg.de/odbg110.zip

Peid :http://s1.download.net.pl/3159-PEiD-0.95-20081103.zip

(Usko exelerini unpacklemek için) Stripper Paketi : ASProtectDIE-PENTAGRAM.rar




peid.png



Sıradaki adımlara geçmeden önce Packing ve Unpacking kavramlarından bahsedicem. Packing(yani paketleme) çalıştırılabilir bir dosyayı veya dll'yi, boyutunu küçültmek veya koruma amaçlı olarak 3. parti bir yazılım ile işlemektir. Yazılım dünyasında kullanılan popüler packer programlarına UPX, ASPack/ASProtect, Molebox, Themida v.b örnek gösterilebilir. Packerlar yazmış olduğunuz programı debug programlarına, cracking işlemlerine vs. korumalı hale getirme amacındadır. Mantığı sıkıştırma ve EP(Entry Point) değiştirme işlemine dayanmaktadır. Unpackerlar ise packerlar vasıtasıyla paketlenmiş uygulamaları orjinal yani korumasız hallerine getirmek üzere yazılmış Reverse Engineering programlarıdır. Genellikle crackerlar tarafından kodlanırlar. Bunların mantığında da programın orjinal giriş noktasını bulup korumalı kısımdan ayıklamak yatar.



Peid ile exemizi analiz ettik, benim EXE'm ASProtect ile koruma altına alınmış. USKO'nun tüm sürümlerinde bu koruma mevcut. Gelelim bu korumayı nasıl aşacağımıza. Yukarıda verdiğim Stripper paketini indirin ve bir klasöre çıkartın. Klasörde 3 adet Stripper sürümü mevcut, biz 2.07'yi kullanacağız. Aşağıdaki adımları sırasıyla izleyin.



(DN : Eğer exeniz packli değilse bu adımları atlayın.)




stripper.png



Stripper 2.07'yi başlatın ve ardından Open tuşuna basın.



stripper2.png



Gelen pencereden Packli olan usko exenizi seçin.



stripper3.png



Ve ardından sağ taraftaki unpacking butonuna basın. Exemiz sorunsuz bir şekilde unpacklenirse resimdeki gibi successfull yazısını göreceksiniz. KnightOnLine.exe'mizin packsiz hali _KnightOnLine.exe adıyla clientimizin bulundugu klasöre kaydedildi. Artık önümüzde hiçbir engel kalmadığına göre, işimize dönebiliriz :)



Anlatıma geçmeden önce biraz daha ASM'den bahsetmek istiyorum. Konunun başında da bahsettiğim gibi, ASM kod satırları sırasıyla ve teker teker işlenir. Bu kod satırlarının işlemeye başladığı yere Entry Point yani giriş noktası denir. Bizim amacımız oyun exesi açılmadan önce DLL'mizi yüklemek olduğuna göre yapacağımız işlem entry point'ten önce bir kod yordamı ile dll'mizin yüklenmesini sağlamak olacaktır.



Gelelim bunu nasıl yapacağımıza. İlk iş olarak indirmiş olduğumuz OllyDbg programımızı bir klasöre çıkartıp açalım. Karşımıza 3 kısımdan oluşan boş bir pencere geldi, bu pencerenin adı CPU penceresi. Şimdi unpacklemiş olduğumuz _KnightOnLine.exe'yi(veya zaten unpackli exeye sahip olanlar için KnightOnLine.exe) Ollydbg ekranına sürükleyelim. Ben bu örnekte 1483 unpackli exe kullandım.(daha önceden xtrap'ını vs.temizlemiştim.)



olly2.png



KnightOnLine.exe'mizin debug edilmiş hali olly ekranında göründü. Şimdi ne yapacağız? İlk iş olarak daha önceden bahsetmiş olduğum EP'yi bulmamız lazım. Bunu yapmak içinse olly penceresine sağ tıklayın ve Search For -> All intermodular calls yolunu takip edin.



olly3.png



Karşımıza bulunan sonuçlar gelecektir.



olly4.png



Bu kısımda gördükleriniz windows API'lerine atılan çağrı komutlarıdır. Bu pencerede aramamız gereken API kernel32.GlobalMemoryStatus. Oyun ekranımız açılmadan önce kernel32.GlobalMemoryStatus API'si kullanılarak bellek ile ilgili bazı işlemler yürütülür.(boş ram durumu vs.) Eğer bu API'ye giden CALL'ın adresini bulursak, exemizin giriş noktasını da bulmuş oluruz.



olly5.png



Intermodular calls penceremizde kernel32.GlobalMemoryStatus'ü bulduk.Resimde gördüğünüz gibi, benim kernel32.GlobalMemoryStatus call'ım 76ED45 adresindeymiş. Şimdi bu adrese çift tıklayarak debug penceresinde yerini buluyoruz.



olly6.png



Resimde gördüğünüz gibi CALL'ımız burda. Scroll bar'ı biraz daha yukarıya kaydırıyoruz taa ki NOP'larla dolu bir boşluk bulana kadar.



olly7.png





Evet, bahsettiğim yere geldik. Benim exemde PUSH -1 satırı yani 76EC30 adresi giriş noktası. Bulduğunuz adresi bir kenara not edin, ileride ihtiyacımız olacak. Giriş noktamızı bulduk, şimdi ne yapmalıyız?



Biraz önce bahsetmiştim, dll'mizi yüklemek için giriş noktamızdan önce ufak kod değişiklikleri yapmamız lazım diye. Önce dllmizi yüklemek için ihtiyacımız olan kod bloguna bir göz atalım.




Kod:
PUSHAD

PUSH "dll adının tutulduğu adres"               

CALL DWORD PTR DS:[kernel32.loadlibrarya fonksiyonu adresi] 

POPAD

JMP "exe giriş noktası adresi"



ASCII "loader.dll"



Şimdi, gördüğünüz üzere yukardaki kod blogu, giriş noktamızın üzerindeki nop'ların bellek alanına sığabilecek küçüklükte değil. O yüzden bu kod bloğu için daha geniş NOP veya DB00'ların bulunduğu uygun bir yer bulmalıyız. Bu uygun yere biz Code Cave adını veriyoruz. Code cave'mizi bulmadan önce DLL'mizi yükleyecek olan Kernel32.LoadLibraryA fonksiyonunun adresini bulmamız lazım. Bi bakalım nerdeymiş ..



olly9.png



Bunu yapmak için de ilk başta yaptığımız gibi Sağ Tık -> Search for -> All intermodular calls diyoruz ve çıkan sonuçlardan herhangi bir Kernel32.LoadLibraryA API'sini seçip çift tıklıyoruz ve seçili gelen adrese sağ tıklayıp assemble diyoruz.



olly10.png



Resimde seçili olarak gösterdiğim kısım kernel32.loadlibraryA api'sinin adresi, bunu bir köşeye not ediyoruz. Scrollbar'ı exe'nin son kısımlarına doğru kaydırıyoruz ve uygun boyutta bir DB00 yığını buluyoruz.



olly8e.png



Şimdi herhangi bir adresi seçip kodlarımızı yerleştirmeye başlayalım. Ben 7E4FAF adresinden itibaren kodları yerleştirmeye başlıyorum. İlk önce DLL adımızı içeren ASCII değerini Code Cave'mize yazalım.




olly11.png



Uygun boyutta bir DB00 bloğunu seçili hale getirin ve sağ tık -> Binary -> Edit yolunu izleyin. Gelen pencerede ASCII kısmına yükleyeceğimiz DLL'nin adını gireceğiz.



olly12.png



Ben loader.dll koydum, siz istediğiniz adı verebilirsiniz. Dll adımızı yazdıktan sonra ok'a basıyoruz.



olly13.png



DB00 larımız Resimde kırmızıyla görünen kısım gibi karman çorman bir hali alacaktır, ASCII kodumuzun düzgünce görünmesi için exemizi yeniden analiz etmemiz gerekiyor, bunun içinse ctrl-a tuşuna basmanız yeterli.



olly14.png



Eğer herşey yolunda gittiyse ASCII değerimiz resimdeki gibi sorunsuz bir şekilde görüntülenecektir. ASCII değerimizi adresimize yerleştirdik, sırada dll'mizi yükleyecek olan kod blogunu yerleştirmek var.



Kod:
PUSHAD

PUSH "dll adının tutulduğu adres"               

CALL DWORD PTR DS:[kernel32.loadlibrarya fonksiyonu adresi] 

POPAD

JMP "exe giriş noktası adresi"



Bunun için yine boş bir DB00 adresini seçili hale getirin ve sağ tık -> assemble yolunu izleyin. Kod bloğumuz PUSHAD komutu ile başlıyor, gelen Assemble kutusuna PUSHAD yazın ve Assemble tuşuna basın. PUSHAD komutu adrese işlenecektir ve imleç otomatikman bir satır alta kayacaktır. Bir sonraki komutumuz PUSH "dll adının tutulduğu adres" ti. Daha demin ASCII kodunu girdiğimiz bellek adresini hatırlayalım. Benimki 7E4FAF'ydi. O zaman komutumuz şu şekilde olacak : PUSH 7E4FAF. Bu komutumuzu da yerleştirdikten sonra bir sonraki komutumuz dll'mizi yükleyecek olan LoadLibrary apisini çağıracak satırımız -> CALL DWORD PTR DS:[kernel32.loadlibrarya fonksiyonu adresi] , daha önceden bulmuş olduğumuz kernel32.loadlibrarya adresini köşeli parantezlerin arasına yazıyoruz.Kodumu CALL DWORD PTR DS:[7E5218] olarak düzenliyorum ve Assemble tuşuna basıyorum. Eveet. DLL'miz artık yüklendi, ama bir problemimiz var. ASM satırı olarak exe'nin sonlarındayız. DLL'mizi yüklediğimize göre artık giriş noktamıza geri dönebiliriz. Bunun içinse JMP komutunu kullanacağız. En başta not ettiğimiz giriş noktası adresimizi JMP kodumuzun yanına yazıp Assemble tuşuna basıyoruz. Benim giriş nokta adresim 76EC30 olduğuna göre komutum da JMP 76EC30 olmalı. Eğer herşeyi doğru bir şekilde yaptıysanız Code Cavemiz şu şekilde görünmeli ;



olly15.png



Evet. Exemize ASM yamamızı uyguladık. Son bir işimiz kaldı, oyunumuza girmeden önce exe'mizi hazırladığımız code cave'ye yönlendirmemiz lazım. Code cave'mizin başlangıç adresini yani PUSHAD komutunun bulunduğu adresi bir kenara not edin. Daha sonra Ctrl-g tuşuna basarak exenizin giriş noktasının adresini girin ve ok tuşuna basın. Giriş noktamıza geldik, Burada da ufak bir nop blogu vardı hatırlıyorsanız, bu nop blogundan herhangi bir adresi seçin ve assemble tuşuna tıklayın. Gelen kutucuga JMP PUSHADADRESİ şeklinde ASM kodunuzu girin. Benim Code Cave'min başladığı adres 7E4FBD, o halde yazmam gereken ASM kodu JMP 7E4FBD. ASM ile işimiz bitti, yaptığımız değişiklikleri kaydetmemiz lazım. Bunun içinse Sağ tık-> Copy to Executable - > All Modifications yolunu izliyoruz. Gelen pencereden Copy All'ı seçiyoruz ve Karşımıza bir pencere daha geliyor. Bu pencerede de sağ tık yaparak Save File diyoruz ve dosyamızın yeni adını yazarak kaydediyoruz.



Hayırlı olsun, DLL yükleyebilen bir EXE'niz oldu.



Bugün neler öğrendiniz ?



- ASM Operatörleri

- ASM Mantığı

- OllyDbg kullanımı

- Packer - Unpacker nedir

- API Nedir



İleriki günlerde X-Trap ve APR sistemlerinin exeden nasıl çıkartıldığını da detaylı bir şekilde anlatacağım. Hepinize iyi forumlar dilerim, anlattıklarımın size bir nebze bile katkısı bulunduysa ne mutlu bana. :)




-- Pentagram(Mustify) 19:00 - 23:00 saatleri arasında hazırlandı.
 
K Çevrimdışı

khut2525

Kayıtlı Üye
26 Mart 2012
130
0
16
47
ellerine sağlık akılda kalıcı güzel bir anlatım olmuş devamını bekleriz inşaALLAH
 
1 Çevrimdışı

111Mutay

Guest
ellerine sağlık akılda kalıcı güzel bir anlatım olmuş devamını bekleriz inşaALLAH



Birazdan X-Trap ve gereksiz işlemlerin (launcher check, oyundan çıkarken site açılması vs.vs) Exeden silinmesini anlatıcam, beklemede kalın :)
 
21oyuncu Çevrimdışı

21oyuncu

Kayıtlı Üye
22 Mart 2012
684
2
18
39
saol mustafa kardeş eline koluna yüreğine salık bu gibi paylaşımlar herkeze ışık olucak nitelikte inş. bu gibi paylaşımlarının bir yararı olur ve sana iyi bir şekilde döner... Saol yeniden paylaşım için.
 
1 Çevrimdışı

111Mutay

Guest
saol mustafa kardeş eline koluna yüreğine salık bu gibi paylaşımlar herkeze ışık olucak nitelikte inş. bu gibi paylaşımlarının bir yararı olur ve sana iyi bir şekilde döner... Saol yeniden paylaşım için.



Rica ederim, vakit buldukça anlatımlara mümkün mertebe devam edeceğim.
 
X Çevrimdışı

X1E

Kayıtlı Üye
25 Mayıs 2012
49
0
6
Çok Teşekürler Senin Sayende Assembly'i Öğrenip , Geliştiricez :)
 
X Çevrimdışı

XagoK

Kayıtlı Üye
13 Nisan 2012
645
0
16
32
konuyu ilk kez görüyorum Mustafa güzel anlatım teşekkürler
 
O Çevrimdışı

on11

Kayıtlı Üye
25 Mayıs 2012
536
1
18
eline koluna sağlık eywallah... dört gözle diyer konularıda bekliyoruz paşa.....
 
S Çevrimdışı

StarHaxor

Yeni Cüce
28 Nisan 2013
1
0
1
27
Cevap: KnightOnLine.exe'nin ASM ile DLL çağırmasını sağlamak & ASProtect/ASPack Unpackleme.



abıler bana wolfteam da apexx by pass verebılırmısınız Cheat engıne ıcın ?
 
R Çevrimdışı

Rainmaker

Kayıtlı Üye
9 Kasım 2012
162
0
16
Cevap: KnightOnLine.exe'nin ASM ile DLL çağırmasını sağlamak & ASProtect/ASPack Unpackleme.



Paylaşım için teşekkürler.
 
H Çevrimdışı

hayalc

Kayıtlı Üye
11 Mayıs 2012
337
5
18
Cevap: KnightOnLine.exe'nin ASM ile DLL çağırmasını sağlamak & ASProtect/ASPack Unpackleme.



Teşekkürler