키보드 이벤트를 실험하고 있습니다. 다른 이벤트에서 키보드 이벤트를 수신하기 위해 자습서 및 오픈 소스 라이브러리를 많이 보았습니다. 컴퓨터를 잠그고 키보드 이벤트를 수신하는 간단한 '해킹'을 만드는 아이디어를 생각해 냈습니다. 나는 사용자가 자신의 컴퓨터를 잠금 해제하기 위해 암호를 입력하도록 강요 할 수있는 것으로 생각하고 사용자 입력을 듣고 지정된 암호를 얻습니다. 여기에 글로벌 키보드 이벤트를 수신합니다 인터넷에있는 간단한 예제 코드입니다 : 이것은 조용한 잘 작동컴퓨터가 잠겨있는 동안 글로벌 키보드 이벤트 듣기
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class InterceptKeys
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
public static void Main()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
GetModuleHandle(curModule.ModuleName), 0);
}
}
private delegate IntPtr LowLevelKeyboardProc(
int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookCallback(
int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook,
LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
}
,하지만 키보드 입력을들을 때 어떤 이유로 예외가있을 것 같습니다 때 컴퓨터 잠겨 있니? 왜 그것이 작동하지 않을지 모르겠다. 아마 보안 문제 일 것이다. 어쨌든이 일을 할 수 있다면 그것은 굉장 할 것입니다.
* 보안 *입니다. 나는 OS를 해킹하지 않고 그 주위에 방법이 있을지 의심 스럽다. –
@RobertHarvey _very_ 빠른 답장을 보내 주셔서 감사합니다. 그러나 다른 위조 된 동일한 응용 프로그램이나 금이 간 버전의 응용 프로그램을 실행 한 다음 사용자에게 컴퓨터가 잠겨 있다고 생각하게하는 경우 달성 할 수 있습니까? – Linus
신용 카드 번호 (및 뒷면에있는 보안 코드)를 알려 주시면 답변을 알려 드리겠습니다. –