【发布时间】:2014-01-18 22:28:04
【问题描述】:
我有它来防止被鼠标调用的机器人。 (如果点击是否由人进行)。
我有它要保护: http://pastebin.com/SfebsEPj
但有些人做了绕过: http://pastebin.com/HK9CekzZ
有人有想法吗?
代码:
HHOOK MouseHook;
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if(wParam == WM_RBUTTONDOWN || wParam == WM_LBUTTONDOWN)
{
MSLLHOOKSTRUCT *info=(MSLLHOOKSTRUCT*)lParam;
if((info->flags & LLMHF_INJECTED) == LLMHF_INJECTED)
{
ExitProcess(-1);
}
}
}
return CallNextHookEx(MouseHook,nCode,wParam,lParam);
}
void AntiShotbotLogger()
{
HINSTANCE hInstance = GetModuleHandle(NULL);
MouseHook = SetWindowsHookEx( WH_MOUSE_LL, MouseHookProc, hInstance, NULL );
MSG message;
while (GetMessage(&message,NULL,0,0)) {
TranslateMessage( &message );
DispatchMessage( &message );
}
UnhookWindowsHookEx(MouseHook);
绕过:
HHOOK MouseHook;
LRESULT CALLBACK ReplaceMousehook(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION && (wParam == WM_RBUTTONDOWN || wParam == WM_LBUTTONDOWN))
{
reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)->flags = 0;
std::cout << "Injection bypassed!" << std::endl;
}
return CallNextHookEx(MouseHook,nCode,wParam,lParam);
}
void ShotbotBypassExample()
{
while(true)
{
if (GetAsyncKeyState(VK_NUMPAD0)&1)
{
std::cout << "Sending input now." << std::endl;
INPUT input[2];
input[0].type = INPUT_MOUSE;
input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
input[1].type = INPUT_MOUSE;
input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(2, input, sizeof(INPUT));
}
Sleep(1);
}
}
int main(int argc, char** argv)
{
std::thread keybind(ShotbotBypassExample);
keybind.joinable();
HHOOK hook = SetWindowsHookEx( WH_MOUSE_LL, ReplaceMousehook, GetModuleHandle(0), NULL );
MSG message;
while (GetMessage(&message,NULL,0,0)) {
TranslateMessage( &message );
DispatchMessage( &message );
}
return 0;
}
【问题讨论】:
-
在问题中粘贴一个小的、独立的示例。我懒得打开不受信任的外部链接。
-
'我急需'我删除了它,因为它是一个主要的downvote吸引子......
-
@H2CO3 信任,是pastebin。
-
这两段代码都可以很容易地粘贴到这里的问题中。指向外部网站的链接会过时,从而使问题和任何可能的答案在未来对人们毫无用处。
-
@user3018746 '信任,它是 pastebin' 这不是重点!您应该在此处显示合理的代码示例,以重现问题或支持说明您的特定问题的详细解释!