Managed Kod ile Global Hook

13-9-2005

Windows programcılığında bence en eğlenceli konular hooklar, processlere dışarıdan erişim, injection ve memory okuma atraksityonlarıdır.

Daha önceden .NET ile bir keylogger yazmıştım bunun için KeyboardHook kullanılıyor, daha sonradan keyboard' u disable etmek için bit Low Level Keyboard Hookları ile de uğraşmıştım. Ancak mouse ve keboard harici diğer hooklar ile uğraşmamıştım. Bu hooklar arasında windows message' larını alanlar var vs.

Dün bu konu hakkında bir şey yazmak istedim ancak klasik hook mantığım çalışmadı, konu hakkında araştırma yapınca öğrendim ki meğersem Keyboard ve Mouse hookları haric .NET üzerinden Global Hook yapılamıyormuş ! ( MS KB 319524 : Global Hook Is Not Supported in .NET Framework )

Olayın temeli de şu ki Low level hooklar Keyboard ve Mouse gibi henüz girişlerin hangi pencereye gideceğini bilmediğinden her uygulama bunları belli window' a gitmeden yakalayabiliyor dolayısıyla belli bir DLL' e enjekte etmek gerekmiyor. Ancak diğer üst seviye hooklarda direk pencereye giden girdileri (input) o pencereye enjekte edip almanız gerekiyor. Bomba kısımda buradaki .NET Framework DLL Export desteklemiyor. Bir yerde türlü şekillerle bunun yapılabildiğini okudum ancak örnek kod vs. bulamadım. Bir fikri olan varsa da bekliyoruz.

Bu durumda yapılacak tek iş kalıyor ki o da C++ ile native bir DLL yazıp .NET üzerinden onu kullanmak yada tüm programı C++ ile geliştirmek.

Güncelleme : Benzer bir konu vbaccelerator' un hook library's inde de konu edilmiş ve VB6' da global hook lar kullanılamıyormuş.

Recent Blog Posts

See all of the blog posts