Merhaba arkadaşlar,
Bu gün sizlere oyundan önce güvenlik programının güncelleme mantığını
anlatmaya çalışacağım.
Derlenmiş bir uygulamaya böyle bir özellik ekleyebilmek için ASM bilgisine ihtiyacımız var;
Bildiğiniz üzere bu gibi işlemler genelde, uygulamaya "Static Library" load ederek gerçekleşebiliyor.
Static Library (Sabit Kütüphaneler)'in genel özelliklerı
DllMain() event'i veya ana blogu ile çalışmasıdır, yani DLL yüklendiği anda "Form_Load" olayı gibi istediğimiz işlemleri yaptırabiliriz.
Öncelikle bu işin mantığını kuralım,
KnightOnline.exe üzerinde boş bir code chave üzerine önce DLL adını daha sonra LoadLibrary apisini yazarak, KnightOnline.exe'nin DLL'mizi çalıştırmasını sağlayabiliriz.
Daha sonra Visaul C++ 6.0 ile oluşturduğumuz "Static Library"nin DLLMain bloguna kodlarımızı yazarak istediğimizi yapmaya başlayabiliriz. Sonraki aşama ise Güncellemenin nasıl başlayacağı ve KnightOnline.exe'nin bittiğini nasıl anlayacağı olacaktır.
Burada kullanabileceğimiz iki adet win32 API'leri bulunmakta;
• CreateProcess ve WaitForSingleObject
Bu apiler ne işe yarar?
CreateProcess :
C++ üzerinde VB6'daki (Shell) komutu ile hemen hemen aynı işlevi görmektedir..
WaitForSingleObject :
Bu ise bir uygulamanın Process veya Thread olaylarının sona ermesini beklemeye yarayan api'dir.
Wait(Beklemek)For(Şunun için)Object(Process)
Burada objemiz bizim sistemde çalışmakta olan uygulamamızdır.Biz bu api ile onun kendini veya başka bir kullanıcı tarafından sonlandırılmasını bekliyoruz.
DLLMain bloguna, öncelikle;
- Çalıştıracağımız uygulamanın adını ("Güncelle.exe") tanımlamalıyız,
- Daha sonra CreateProcess ile bunu çalıştırmalı ve,
- WaitForSingleObject ile tamamlanmasını beklemeliyiz.
Böylece WaitForSingleObject DLL'yi bekleticek, dolaylı yoldan yazdığımız DLL "KnightOnline.exe" üzerinde senkronize bir şekilde çalışacağı için KnightOnline.exe güncellemenin bitmesini bekliyecektir.
Böylece güncelleme bittiğinde DLL'yi unload edebilir KnightOnline.exe'nin kaldığı yerden çalışmasına devam etmesini sağlayabilirsiniz.
// Efe - 09 Mart 2012
Bu gün sizlere oyundan önce güvenlik programının güncelleme mantığını
anlatmaya çalışacağım.
Derlenmiş bir uygulamaya böyle bir özellik ekleyebilmek için ASM bilgisine ihtiyacımız var;
Bildiğiniz üzere bu gibi işlemler genelde, uygulamaya "Static Library" load ederek gerçekleşebiliyor.
Static Library (Sabit Kütüphaneler)'in genel özelliklerı
DllMain() event'i veya ana blogu ile çalışmasıdır, yani DLL yüklendiği anda "Form_Load" olayı gibi istediğimiz işlemleri yaptırabiliriz.
Öncelikle bu işin mantığını kuralım,
KnightOnline.exe üzerinde boş bir code chave üzerine önce DLL adını daha sonra LoadLibrary apisini yazarak, KnightOnline.exe'nin DLL'mizi çalıştırmasını sağlayabiliriz.
Daha sonra Visaul C++ 6.0 ile oluşturduğumuz "Static Library"nin DLLMain bloguna kodlarımızı yazarak istediğimizi yapmaya başlayabiliriz. Sonraki aşama ise Güncellemenin nasıl başlayacağı ve KnightOnline.exe'nin bittiğini nasıl anlayacağı olacaktır.
Burada kullanabileceğimiz iki adet win32 API'leri bulunmakta;
• CreateProcess ve WaitForSingleObject
Bu apiler ne işe yarar?
CreateProcess :
C++ üzerinde VB6'daki (Shell) komutu ile hemen hemen aynı işlevi görmektedir..
WaitForSingleObject :
Bu ise bir uygulamanın Process veya Thread olaylarının sona ermesini beklemeye yarayan api'dir.
Wait(Beklemek)For(Şunun için)Object(Process)
Burada objemiz bizim sistemde çalışmakta olan uygulamamızdır.Biz bu api ile onun kendini veya başka bir kullanıcı tarafından sonlandırılmasını bekliyoruz.
DLLMain bloguna, öncelikle;
- Çalıştıracağımız uygulamanın adını ("Güncelle.exe") tanımlamalıyız,
- Daha sonra CreateProcess ile bunu çalıştırmalı ve,
- WaitForSingleObject ile tamamlanmasını beklemeliyiz.
Böylece WaitForSingleObject DLL'yi bekleticek, dolaylı yoldan yazdığımız DLL "KnightOnline.exe" üzerinde senkronize bir şekilde çalışacağı için KnightOnline.exe güncellemenin bitmesini bekliyecektir.
Böylece güncelleme bittiğinde DLL'yi unload edebilir KnightOnline.exe'nin kaldığı yerden çalışmasına devam etmesini sağlayabilirsiniz.
// Efe - 09 Mart 2012