- Katılım
- 6 Mayıs 2022
- Mesajlar
- 45,967
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 :
Peid :
(Usko exelerini unpacklemek için) Stripper Paketi :
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 2.07'yi başlatın ve ardından Open tuşuna basın.
Gelen pencereden Packli olan usko exenizi seçin.
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.)
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.
Karşımıza bulunan sonuçlar gelecektir.
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.
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.
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.
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.
Ş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ş ..
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.
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.
Ş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.
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.
Ben loader.dll koydum, siz istediğiniz adı verebilirsiniz. Dll adımızı yazdıktan sonra ok'a basıyoruz.
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.
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.
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 ;
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ı.
KnightOnLine.exe'nin ASM ile DLL Çağırmasını Sağlamak & ASProtect/ASPack Unpackleme
Knight Online özel sunucularında geliştirme yapan geliştiriciler için ASM (Assembly) kodlama ve DLL (Dynamic Link Library) entegrasyonu oldukça kritik bir konudur. Özellikle KnightOnLine.exe üzerinde ASM kullanarak harici DLL dosyalarını çağırmak, güvenlik önlemleriyle korunan EXE dosyalarını_unpacklemek ve bu dosyaların içindeki korumaları bypass etmek, KO geliştirme sürecinde önemli adımlardır. Bu makalede, KnightOnLine.exe üzerinde ASM ile DLL çağrısı yapmayı ve ASProtect/ASPack gibi koruma sistemlerinin unpacklenmesini detaylı olarak ele alacağız.
ASM ile DLL Çağırma Nedir?
ASM, düşük seviyeli bir programlama dilidir. Knight Online özel sunucularında ASM ile geliştirme yapmak, exe dosyasının çalışma esnasında özel işlemler gerçekleştirmesini sağlar. Bu işlemler arasında DLL dosyalarını çağırma da yer alabilir. DLL dosyaları, belirli işlevleri barındıran modüllerdir ve ASM üzerinden bu DLL'leri çağırarak yeni fonksiyonellikler kazandırmak mümkündür.
ASM kodları genellikle inline assembly olarak EXE'ye gömülür veya özel DLL'ler üzerinden entegre edilir. Bu sayede KnightOnLine.exe, dış kaynaklardan gelen komutları işleyebilir.
DLL Entegrasyonu Nasıl Gerçekleştirilir?
KnightOnLine.exe üzerinde DLL entegrasyonu yapabilmek için öncelikle EXE dosyası üzerinde inceleme yapılması gerekir. Bu inceleme sırasında giriş noktası (entry point), import table ve section bilgileri analiz edilir. ASM kodları bu alanlara entegre edilerek, belirli bir noktada belirli bir DLL dosyası çağrılır. Örneğin, bir güvenlik DLL'si veya filtreleme DLL'si EXE'ye entegre edilebilir.
ASProtect ve ASPack Nedir?
ASProtect ve ASPack, EXE dosyalarını sıkıştıran ve koruyan araçlardır. Özellikle lisanslı yazılımlarda yaygın olarak kullanılırlar. Ancak Knight Online gibi oyunların istemcileri üzerinde de bu korumalar yer alabilir. Bu korumalar, EXE dosyasının içeriğini şifreler ve dış müdahaleye karşı korur. Bu nedenle ASM ile DLL çağrısı yapabilmek için öncelikle bu korumalar kaldırılmalıdır.
ASProtect ve ASPack korumaları, reverse engineering ile kaldırılabilir. Bu işlem sırasında programın bellekteki çalışması izlenerek, korumanın açılıp açılmadığı ve hangi adreste çözüldüğü tespit edilir.
Unpacking İşlemi Nasıl Yapılır?
ASProtect/ASPack unpackleme işlemi, genellikle debugger (örneğin x32dbg veya OllyDbg) kullanılarak yapılır. Bu işlemde EXE dosyası debug edilir ve OEP (Original Entry Point) bulunur. OEP, EXE'nin asıl başlangıç noktasıdır. Koruma sistemi çözüldüğünde, EXE orijinal haline döner ve ASM kodları buraya yerleştirilebilir.
Knight Online EXE Dosyasında ASM Kullanımı
KnightOnLine.exe üzerinde ASM kodu çalıştırmak için PE (Portable Executable) formatı incelenmelidir. Section'lar arasında boşluk aranır veya yeni bir section oluşturulur. ASM kodları buraya yazılır ve EXE çalıştırıldığında bu kodlar devreye girer. Örneğin, bir filtreleme DLL'si veya anti-bot sistemi ASM ile EXE'ye entegre edilebilir.
ASM ile EXE'ye entegre edilen DLL'ler, oyunun çalışma mantığını değiştirerek özel sunucular için yeni özellikler kazandırabilir.
Knight Lobby ve ASM Geliştirme
Knight Lobby, KO geliştiricileri için ASM, DLL ve EXE modifikasyonları üzerine kapsamlı rehberler sunmaktadır. ASM ile DLL çağrısı yapmak ve EXE korumalarını bypass etmek, özel sunucuların gelişimine katkı sağlar. Bu sayede geliştiriciler, daha güçlü ve özelleştirilmiş sistemler oluşturabilirler.
Sonuç
KnightOnLine.exe üzerinde ASM ile DLL çağrısı yapmak ve ASProtect/ASPack gibi korumaları kaldırmak, KO özel sunucu geliştirme sürecinde ileri düzey teknik bilgi gerektiren işlemlerdir. Ancak doğru uygulandığında, sunucuların güvenlik ve performans açısından büyük gelişmeler kaydetmesini sağlar. ASM ve DLL entegrasyonları, Knight Online özel sunucularının temel taşlarından biridir.
Making KnightOnLine.exe Call DLLs via ASM & Unpacking ASProtect/ASPack
For developers working on Knight Online private servers, ASM (Assembly) coding and DLL (Dynamic Link Library) integration are critical topics. Particularly, calling external DLL files via ASM on KnightOnLine.exe, unpacking EXE files protected with security tools, and bypassing their protections are important steps in KO development. In this article, we will examine how to call DLLs using ASM on KnightOnLine.exe and how to unpack protection systems like ASProtect/ASPack in detail.
What is Calling DLL via ASM?
ASM is a low-level programming language. Developing with ASM in Knight Online private servers allows specific actions to be performed during the execution of the EXE file. Among these actions is calling DLL files. DLL files are modules containing certain functions, and by calling these DLLs via ASM, new functionalities can be added.
ASM codes are usually embedded into the EXE as inline assembly or integrated via custom DLLs. This allows KnightOnLine.exe to process commands from external sources.
How Is DLL Integration Achieved?
To integrate a DLL into KnightOnLine.exe, an analysis of the EXE file must first be conducted. During this analysis, the entry point, import table, and section information are examined. ASM codes are then integrated into these areas so that a specific DLL file is called at a certain point. For example, a security DLL or filtering DLL can be integrated into the EXE.
What Are ASProtect and ASPack?
ASProtect and ASPack are tools used to compress and protect EXE files. They are widely used in licensed software. However, such protections may also exist on game clients like Knight Online. These protections encrypt the content of the EXE file and protect it against external interference. Therefore, to call a DLL using ASM, these protections must first be removed.
ASProtect and ASPack protections can be removed via reverse engineering. During this process, the program's behavior in memory is observed to determine where the protection opens and where it gets resolved.
How Is the Unpacking Process Done?
The ASProtect/ASPack unpacking process is typically done using a debugger (such as x32dbg or OllyDbg). In this process, the EXE file is debugged and the OEP (Original Entry Point) is located. The OEP is the actual starting point of the EXE. When the protection system is solved, the EXE returns to its original state, and ASM codes can be inserted here.
Using ASM in Knight Online EXE Files
To run ASM code in KnightOnLine.exe, the PE (Portable Executable) format should be examined. Gaps between sections are searched for or a new section is created. ASM codes are written here and executed when the EXE runs. For example, a filtering DLL or anti-bot system can be integrated into the EXE via ASM.
DLLs integrated into the EXE via ASM can alter the game's logic and provide new features for private servers.
Knight Lobby and ASM Development
Knight Lobby offers comprehensive guides on ASM, DLL, and EXE modifications for KO developers. Calling DLLs via ASM and bypassing EXE protections are key steps in the development of private servers. This enables developers to create more powerful and customized systems.
Conclusion
Calling DLLs via ASM on KnightOnLine.exe and removing protections like ASProtect/ASPack are advanced technical processes required in KO private server development. However, when applied correctly, they significantly improve the security and performance of servers. ASM and DLL integrations are among the core foundations of Knight Online private servers.
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 :
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Peid :
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
(Usko exelerini unpacklemek için) Stripper Paketi :
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
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 2.07'yi başlatın ve ardından Open tuşuna basın.
Gelen pencereden Packli olan usko exenizi seçin.
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.)
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.
Karşımıza bulunan sonuçlar gelecektir.
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.
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.
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.
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ş ..
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.
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.
Ş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.
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.
Ben loader.dll koydum, siz istediğiniz adı verebilirsiniz. Dll adımızı yazdıktan sonra ok'a basıyoruz.
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.
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 ;
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ı.
KnightOnLine.exe'nin ASM ile DLL Çağırmasını Sağlamak & ASProtect/ASPack Unpackleme
Knight Online özel sunucularında geliştirme yapan geliştiriciler için ASM (Assembly) kodlama ve DLL (Dynamic Link Library) entegrasyonu oldukça kritik bir konudur. Özellikle KnightOnLine.exe üzerinde ASM kullanarak harici DLL dosyalarını çağırmak, güvenlik önlemleriyle korunan EXE dosyalarını_unpacklemek ve bu dosyaların içindeki korumaları bypass etmek, KO geliştirme sürecinde önemli adımlardır. Bu makalede, KnightOnLine.exe üzerinde ASM ile DLL çağrısı yapmayı ve ASProtect/ASPack gibi koruma sistemlerinin unpacklenmesini detaylı olarak ele alacağız.
ASM ile DLL Çağırma Nedir?
ASM, düşük seviyeli bir programlama dilidir. Knight Online özel sunucularında ASM ile geliştirme yapmak, exe dosyasının çalışma esnasında özel işlemler gerçekleştirmesini sağlar. Bu işlemler arasında DLL dosyalarını çağırma da yer alabilir. DLL dosyaları, belirli işlevleri barındıran modüllerdir ve ASM üzerinden bu DLL'leri çağırarak yeni fonksiyonellikler kazandırmak mümkündür.
ASM kodları genellikle inline assembly olarak EXE'ye gömülür veya özel DLL'ler üzerinden entegre edilir. Bu sayede KnightOnLine.exe, dış kaynaklardan gelen komutları işleyebilir.
DLL Entegrasyonu Nasıl Gerçekleştirilir?
KnightOnLine.exe üzerinde DLL entegrasyonu yapabilmek için öncelikle EXE dosyası üzerinde inceleme yapılması gerekir. Bu inceleme sırasında giriş noktası (entry point), import table ve section bilgileri analiz edilir. ASM kodları bu alanlara entegre edilerek, belirli bir noktada belirli bir DLL dosyası çağrılır. Örneğin, bir güvenlik DLL'si veya filtreleme DLL'si EXE'ye entegre edilebilir.
ASProtect ve ASPack Nedir?
ASProtect ve ASPack, EXE dosyalarını sıkıştıran ve koruyan araçlardır. Özellikle lisanslı yazılımlarda yaygın olarak kullanılırlar. Ancak Knight Online gibi oyunların istemcileri üzerinde de bu korumalar yer alabilir. Bu korumalar, EXE dosyasının içeriğini şifreler ve dış müdahaleye karşı korur. Bu nedenle ASM ile DLL çağrısı yapabilmek için öncelikle bu korumalar kaldırılmalıdır.
ASProtect ve ASPack korumaları, reverse engineering ile kaldırılabilir. Bu işlem sırasında programın bellekteki çalışması izlenerek, korumanın açılıp açılmadığı ve hangi adreste çözüldüğü tespit edilir.
Unpacking İşlemi Nasıl Yapılır?
ASProtect/ASPack unpackleme işlemi, genellikle debugger (örneğin x32dbg veya OllyDbg) kullanılarak yapılır. Bu işlemde EXE dosyası debug edilir ve OEP (Original Entry Point) bulunur. OEP, EXE'nin asıl başlangıç noktasıdır. Koruma sistemi çözüldüğünde, EXE orijinal haline döner ve ASM kodları buraya yerleştirilebilir.
Knight Online EXE Dosyasında ASM Kullanımı
KnightOnLine.exe üzerinde ASM kodu çalıştırmak için PE (Portable Executable) formatı incelenmelidir. Section'lar arasında boşluk aranır veya yeni bir section oluşturulur. ASM kodları buraya yazılır ve EXE çalıştırıldığında bu kodlar devreye girer. Örneğin, bir filtreleme DLL'si veya anti-bot sistemi ASM ile EXE'ye entegre edilebilir.
ASM ile EXE'ye entegre edilen DLL'ler, oyunun çalışma mantığını değiştirerek özel sunucular için yeni özellikler kazandırabilir.
Knight Lobby ve ASM Geliştirme
Knight Lobby, KO geliştiricileri için ASM, DLL ve EXE modifikasyonları üzerine kapsamlı rehberler sunmaktadır. ASM ile DLL çağrısı yapmak ve EXE korumalarını bypass etmek, özel sunucuların gelişimine katkı sağlar. Bu sayede geliştiriciler, daha güçlü ve özelleştirilmiş sistemler oluşturabilirler.
Sonuç
KnightOnLine.exe üzerinde ASM ile DLL çağrısı yapmak ve ASProtect/ASPack gibi korumaları kaldırmak, KO özel sunucu geliştirme sürecinde ileri düzey teknik bilgi gerektiren işlemlerdir. Ancak doğru uygulandığında, sunucuların güvenlik ve performans açısından büyük gelişmeler kaydetmesini sağlar. ASM ve DLL entegrasyonları, Knight Online özel sunucularının temel taşlarından biridir.
Making KnightOnLine.exe Call DLLs via ASM & Unpacking ASProtect/ASPack
For developers working on Knight Online private servers, ASM (Assembly) coding and DLL (Dynamic Link Library) integration are critical topics. Particularly, calling external DLL files via ASM on KnightOnLine.exe, unpacking EXE files protected with security tools, and bypassing their protections are important steps in KO development. In this article, we will examine how to call DLLs using ASM on KnightOnLine.exe and how to unpack protection systems like ASProtect/ASPack in detail.
What is Calling DLL via ASM?
ASM is a low-level programming language. Developing with ASM in Knight Online private servers allows specific actions to be performed during the execution of the EXE file. Among these actions is calling DLL files. DLL files are modules containing certain functions, and by calling these DLLs via ASM, new functionalities can be added.
ASM codes are usually embedded into the EXE as inline assembly or integrated via custom DLLs. This allows KnightOnLine.exe to process commands from external sources.
How Is DLL Integration Achieved?
To integrate a DLL into KnightOnLine.exe, an analysis of the EXE file must first be conducted. During this analysis, the entry point, import table, and section information are examined. ASM codes are then integrated into these areas so that a specific DLL file is called at a certain point. For example, a security DLL or filtering DLL can be integrated into the EXE.
What Are ASProtect and ASPack?
ASProtect and ASPack are tools used to compress and protect EXE files. They are widely used in licensed software. However, such protections may also exist on game clients like Knight Online. These protections encrypt the content of the EXE file and protect it against external interference. Therefore, to call a DLL using ASM, these protections must first be removed.
ASProtect and ASPack protections can be removed via reverse engineering. During this process, the program's behavior in memory is observed to determine where the protection opens and where it gets resolved.
How Is the Unpacking Process Done?
The ASProtect/ASPack unpacking process is typically done using a debugger (such as x32dbg or OllyDbg). In this process, the EXE file is debugged and the OEP (Original Entry Point) is located. The OEP is the actual starting point of the EXE. When the protection system is solved, the EXE returns to its original state, and ASM codes can be inserted here.
Using ASM in Knight Online EXE Files
To run ASM code in KnightOnLine.exe, the PE (Portable Executable) format should be examined. Gaps between sections are searched for or a new section is created. ASM codes are written here and executed when the EXE runs. For example, a filtering DLL or anti-bot system can be integrated into the EXE via ASM.
DLLs integrated into the EXE via ASM can alter the game's logic and provide new features for private servers.
Knight Lobby and ASM Development
Knight Lobby offers comprehensive guides on ASM, DLL, and EXE modifications for KO developers. Calling DLLs via ASM and bypassing EXE protections are key steps in the development of private servers. This enables developers to create more powerful and customized systems.
Conclusion
Calling DLLs via ASM on KnightOnLine.exe and removing protections like ASProtect/ASPack are advanced technical processes required in KO private server development. However, when applied correctly, they significantly improve the security and performance of servers. ASM and DLL integrations are among the core foundations of Knight Online private servers.
