Sosyal açıldı! Bir göz at → Hemen gir →

Interception Macro ile Normal Macro Farkı

row

Graphic Designer
KAYIT
3 Şub 2024
Mesajlar
229
Tepki puanı
837
Birisi bana bu konu hakkında soru sordu ve ben de bilgilendirme amaçlı konu açmak istedim.
Knight için çoğu kişi Interception’ı oyuna tıklayabilmek için kullanıyor. Ama aralarındaki fark nedir? Biri oyuna tıklayabiliyorken diğeri tıklayamıyor ya da bilgisayarda pil varsa Interception'sız makro çalışabiliyor.


Öncelikle pil varsa neden makro çalışıyor, yoksa neden çalışmıyor hakkında en ufak bir fikrim yok. Ancak normal tıklama ile Interception tıklama arasındaki farkı gösterebilirim. KBDLLHOOKSTRUCT ve MSLLHOOKSTRUCT yapıları ile Windows, bilgisayara gelen mouse ya da klavye girdisinin sahte mi yoksa gerçek mi olduğunu test edebiliyor. Bunlara hook atarak event'lerin sahte mi gerçek mi olduğunu gösteren bir script yazdırdım GPT’ye:




Spoyler: script
Python:
Kod:
import ctypes
import ctypes.wintypes
import win32con
import pythoncom
import atexit

user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32

# Constants
WH_KEYBOARD_LL = 13
WH_MOUSE_LL = 14

WM_KEYDOWN = 0x0100

LLKHF_INJECTED = 0x10
LLKHF_LOWER_IL_INJECTED = 0x02

LLMHF_INJECTED = 0x01
LLMHF_LOWER_IL_INJECTED = 0x02

# Structures
class  (ctypes.Structure):
    _fields_ = [
        ("vkCode", ctypes.wintypes.DWORD),
        ("scanCode", ctypes.wintypes.DWORD),
        ("flags", ctypes.wintypes.DWORD),
        ("time", ctypes.wintypes.DWORD),
        ("dwExtraInfo", ctypes.POINTER(ctypes.wintypes.ULONG)),
    ]

class MSLLHOOKSTRUCT(ctypes.Structure):
    _fields_ = [
        ("pt", ctypes.wintypes.POINT),
        ("mouseData", ctypes.wintypes.DWORD),
        ("flags", ctypes.wintypes.DWORD),
        ("time", ctypes.wintypes.DWORD),
        ("dwExtraInfo", ctypes.POINTER(ctypes.wintypes.ULONG)),
    ]

# Keyboard callback
def low_level_keyboard_proc(nCode, wParam, lParam):
    if nCode == win32con.HC_ACTION:
        kbd = ctypes.cast(lParam, ctypes.POINTER(KBDLLHOOKSTRUCT)).contents
        flags = kbd.flags

        injected = bool(flags & LLKHF_INJECTED)
        lower_il = bool(flags & LLKHF_LOWER_IL_INJECTED)

        print(f"[KEY] VKCode: {kbd.vkCode} | Injected: {injected} | Lower IL: {lower_il}")

    return user32.CallNextHookEx(None, nCode, wParam, lParam)

# Mouse callback
def low_level_mouse_proc(nCode, wParam, lParam):
    if nCode == win32con.HC_ACTION:
        mouse = ctypes.cast(lParam, ctypes.POINTER(MSLLHOOKSTRUCT)).contents
        flags = mouse.flags

        injected = bool(flags & LLMHF_INJECTED)
        lower_il = bool(flags & LLMHF_LOWER_IL_INJECTED)

        print(f"[MOUSE] Event: {wParam} | Injected: {injected} | Lower IL: {lower_il}")

    return user32.CallNextHookEx(None, nCode, wParam, lParam)

# Function pointer definitions
CMPFUNC_KBD = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.wintypes.WPARAM, ctypes.wintypes.LPARAM)
CMPFUNC_MOUSE = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.wintypes.WPARAM, ctypes.wintypes.LPARAM)

keyboard_pointer = CMPFUNC_KBD(low_level_keyboard_proc)
mouse_pointer = CMPFUNC_MOUSE(low_level_mouse_proc)

# Set hooks
keyboard_hook = user32.SetWindowsHookExA(WH_KEYBOARD_LL, keyboard_pointer, kernel32.GetModuleHandleW(None), 0)
mouse_hook = user32.SetWindowsHookExA(WH_MOUSE_LL, mouse_pointer, kernel32.GetModuleHandleW(None), 0)

# Cleanup on exit
atexit.register(user32.UnhookWindowsHookEx, keyboard_hook)
atexit.register(user32.UnhookWindowsHookEx, mouse_hook)

# Start message loop
pythoncom.PumpMessages()

Ve davranışları incelemek için PyAutoGUI ile Interception farkını gözlemlemek üzere videoya çektim. Videoda:


  1. Ekran klavyesi ile deneme yaptım ve Injected = True döndü. Yani "insan değil" diyebilirsiniz. Bilgisayar klavyesi ile yazdığımda Injected = False döndü. (Videoda yok kesmişim)
  2. pyautogui.write kullandım ve yazarken tüm basışlar Injected çıktı. Interception ile yazıldığında ise Injected = False çıktı.
  3. Hareket kısmında ise pyautogui.moveTo denendiğinde herhangi bir mouse eventi yakalanamıyor, yani yok. Mouse bildiğiniz ışınlanıyor aslında. Ama Interception ile yapıldığında bunlar MSLLHOOKSTRUCT ile yakalanıyor ve Injected = False dönüyor (olması gereken).
 
Anasayfa Kayıt ol Giriş yap
Üst Alt