31992

Gelişen
Katılım
7 Mart 2026
Mesajlar
5
Beğeniler
1
Merhaba,

Bir uygulamadan OSK üzerinden tuş girişi gönderiyorum. Kernel-level hook var ve yakalıyor.

Şu ana kadar denenenler:
  • SendInput (user32)
  • NtUserSendInput direkt çağrı (win32u.dll, VirtualAlloc yok)
  • PostMessage (WM_KEYDOWN/WM_KEYUP)
  • VirtualAlloc + syscall stub
  • Nuitka ile native exe'ye derleme — yine de algılanıyor
Nuitka sonrası python.exe sorunu ortadan kalktı ama LLKHF_INJECTED flag'i hâlâ set ediliyor. Yani sorun process adı değil, input'un yazılımdan enjekte edildiğinin kernel tarafından görülmesi.

Sorum: LLKHF_INJECTED flag'i set edilmeden tuş girişi göndermek yazılım tarafında mümkün mü?
yonu (telefon/arduino) biliyorum, o olmadan yazılım tarafında bir çözüm var mı?
 
Son düzenleyen: Moderatör:
Merhaba hocam. Verdiğin detaylar ve denediğin yöntemler, sorunun tam olarak Windows'un çekirdek mimarisine ve Ring 3 (User-Mode) sınırlarına takıldığını gösteriyor

Sadece User-Mode (Ring 3) yetkileriyle, API veya Syscall kullanarak LLKHF_INJECTED flag'ini set etmeden tuş girişi göndermen imkansızdır. Sen NtUserSendInput ile doğrudan Syscall yapsan bile, bu çağrı kernel tarafında win32k.sys (veya win32kbase.sys) modülüne düşer. Windows'un girdi işleme mekanizması, gelen verinin bir donanım kesmesi (hardware interrupt) sonucu kbdclass.sys (Klavye Sınıf Sürücüsü) üzerinden gelip gelmediğine bakar. Eğer veri bir donanım kuyruğundan (hardware queue) gelmiyorsa, Windows bunu "Yazılım tarafından üretilmiş" olarak kabul eder ve LLKHF_INJECTED (hatta duruma göre LLKHF_LOWER_IL_INJECTED) flag'ini direkt yansıtır.

Bu flag'i atlatmanın tek yolu, işletim sisteminin Ring 0 (Kernel-Mode) seviyesine inerek donanımı taklit etmektir ancak bu da imzasız çalışmaz. Sanal HID Sürücüsü (Virtual HID Driver) Kullanmak / Yazmak: En temiz (mimari açıdan) ve en "yazılımsal" çözüm budur. Sisteme sanal bir USB Klavye sürücüsü yüklersin. Senin User-Mode yazılımın (Python, C++ vs.) bu sürücüye özel bir IOCTL mesajı gönderir. Sürücü de bu mesajı alıp Windows'a sanki fiziksel bir USB klavyeden tuşa basılmış gibi IRP (I/O Request Packet) iletir.

Interception Kütüphanesi (Driver Tabanlı): Oblita'nın geliştirdiği Interception aracı, doğrudan klavye donanımı ile işletim sistemi arasına bir filtre sürücüsü (keyboard.sys) enjekte eder. Dezavantaj olarak sanırım çoğu oyun anticheat sürücüleri Interception'u kara listeye aldı, ban yiyebilirsin (indirmek bile yeterli.)

Custom Kernel Driver (KMD) Yazmak: Kendi sürücünü (C/C++ ile WDK kullanarak) yazıp doğrudan kbdclass.sys cihaz nesnelerine (device objects) veri yazabilirsin. (Pek önermem, zordur.)

Özetle hocam: Yazılım tarafında çözüm var, ancak bu çözüm senin uygulamanın exe'sinden çıkıp bir .sys (sürücü) dosyasına geçiş yapmanı zorunlu kılıyor.
 
Merhaba hocam. Verdiğin detaylar ve denediğin yöntemler, sorunun tam olarak Windows'un çekirdek mimarisine ve Ring 3 (User-Mode) sınırlarına takıldığını gösteriyor

Sadece User-Mode (Ring 3) yetkileriyle, API veya Syscall kullanarak LLKHF_INJECTED flag'ini set etmeden tuş girişi göndermen imkansızdır. Sen NtUserSendInput ile doğrudan Syscall yapsan bile, bu çağrı kernel tarafında win32k.sys (veya win32kbase.sys) modülüne düşer. Windows'un girdi işleme mekanizması, gelen verinin bir donanım kesmesi (hardware interrupt) sonucu kbdclass.sys (Klavye Sınıf Sürücüsü) üzerinden gelip gelmediğine bakar. Eğer veri bir donanım kuyruğundan (hardware queue) gelmiyorsa, Windows bunu "Yazılım tarafından üretilmiş" olarak kabul eder ve LLKHF_INJECTED (hatta duruma göre LLKHF_LOWER_IL_INJECTED) flag'ini direkt yansıtır.

Bu flag'i atlatmanın tek yolu, işletim sisteminin Ring 0 (Kernel-Mode) seviyesine inerek donanımı taklit etmektir ancak bu da imzasız çalışmaz. Sanal HID Sürücüsü (Virtual HID Driver) Kullanmak / Yazmak: En temiz (mimari açıdan) ve en "yazılımsal" çözüm budur. Sisteme sanal bir USB Klavye sürücüsü yüklersin. Senin User-Mode yazılımın (Python, C++ vs.) bu sürücüye özel bir IOCTL mesajı gönderir. Sürücü de bu mesajı alıp Windows'a sanki fiziksel bir USB klavyeden tuşa basılmış gibi IRP (I/O Request Packet) iletir.

Interception Kütüphanesi (Driver Tabanlı): Oblita'nın geliştirdiği Interception aracı, doğrudan klavye donanımı ile işletim sistemi arasına bir filtre sürücüsü (keyboard.sys) enjekte eder. Dezavantaj olarak sanırım çoğu oyun anticheat sürücüleri Interception'u kara listeye aldı, ban yiyebilirsin (indirmek bile yeterli.)

Custom Kernel Driver (KMD) Yazmak: Kendi sürücünü (C/C++ ile WDK kullanarak) yazıp doğrudan kbdclass.sys cihaz nesnelerine (device objects) veri yazabilirsin. (Pek önermem, zordur.)

Özetle hocam: Yazılım tarafında çözüm var, ancak bu çözüm senin uygulamanın exe'sinden çıkıp bir .sys (sürücü) dosyasına geçiş yapmanı zorunlu kılıyor.
Reis, aslında sen ne anlattığını bile bilmiyorsun. Ben zaten bunları söyledim, olmuyor diye. Benim için token harcamışsın, teşekkür ederim. Sorunu Logitech G Hub hackleyerek çözdüm. Anti-cheat yakalasa bile engellemiyor. Aslında böyle bir çözüm istemiştim; yazılımda imkansız diye bir şey yok, çok zor, her zaman bir yolu vardır. Kendim Vanguard ile 4 saat denedim, engelleme yok, algılayamıyor.
 
Son düzenleyen: Moderatör: