Tổng quan về badspy
Đây là toàn bộ chức năng mà badspy có thể làm được, với phiên bản hiện tại thì toàn bộ chức năng đều được xây dựng xong nhưng vẩn đang còn trong giai đoạn thử nghiệm(cơ mà bản release sẽ khá lâu vì tác giả bận học lại nên hầu như không có thời gian phát triển tiếp :v).Dự án được chia làm 2 projects chính:
- badspy: đây là con spy yêu dấu của chúng ta, được viết trên ngôn ngữ Visual C++ và có thể chạy độc lập mà không cần thêm thư viện vcruntime. IDE hiện tại đang dùng là Visual Studio 2015.
- badserver: đây là con server quản lý các con spy khác, toàn bộ thông tin mà spy thu thập được sẽ gửi về server này. Server thì được viết bằng java, IDE là IntelliJ IDEA.
Windows keyboard hooking
Khái niệm về hook
Hook là cơ chế mà một ứng dụng có thể chặn một sự kiện giống như các thông điệp, sự kiện chuột, bàn phím…Hàm chặn một sự kiện cụ thể được gọi là hook procedure, một hook procedure có thể thực thi khi nhận được sự kiện, lúc này nó có thể chỉnh sửa hoặc hủy sự kiện đó.Hooks thường sẽ làm chậm hệ thống vì nó làm tăng số lượng xử lý cho mỗi thông điệp bị hook. Hook chỉ nên được cài đặt khi cần thiết và gở bỏ khi không cần đến nữa.
Hệ thống hổ trợ nhiều loại hook khác nhau, mỗi loại cung cấp một cơ chế message-handling khác nhau.
Mỗi loại hook sẽ được quản lý trong một hook chain, một hook chain là một danh sách của các con trỏ đặt biệt, các con trỏ này thực chất là hàm callback của hook procedure. Khi một thông điệp xảy ra thì hệ thống sẽ chuyển thông điệp cho lần lượt các hook procedure trong hook chain tương ứng. Các hành động trong hook procedure còn tùy thuộc vào loại hook, một số có thể chỉnh sửa hoặc hủy thông điệp, một số khác chỉ đơn giản là giám sát…
Keyboard hooking
Keyboard hooking là một trong những loại hook cơ bản được Windows hổ trợ, nhiệm vụ của nó là chặn bắt phím được nhấn. Keyboard hooking được sử dụng trong chương trình Unikey và một số chương trình tiện ích khác. Đặt biệt, một số kẻ xấu còn lợi dụng công nghệ keyboard hooking để xây dựng chương trình keylogger nhằm đánh cắp thông tin người dùng.Keylogger – ghi lại các phím đã nhấn
Sử dụng kỉ thuật keyboard hooking để chặn bắt các phím mà người dùng đã nhấn. Khi người dùng nhấn phím bất kỳ thì spy sẽ ghi lại phím được nhấn kèm với tiêu đề của cửa sổ mà người dùng đã focus, như thế ta có thể xác định được nội dung mà người dùng đang nhập là thuộc chương trình nào.Sử dụng hàm SetWindowsHookEx để đăng ký hook với hệ điều hành, để đăng ký keyboard hooking ta sử dụng cú pháp sau:
SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)hook_proc, dll_instance, 0);
Trong đó hằng số WH_KEYBOARD_LL thông báo với hệ điều hành rằng ta sẽ đăng ký hook bàn phím. Hàm hook_proc sẽ được gọi khi có bất cứ phím nào được nhấn, khi đó ta chỉ việc phân tích dữ liệu từ phím được nhấn và lưu vào file. Biến số dll_instance là giá trị handle đến DLL chứa hook procedure, ở đây chính là hook_proc. Nếu hàm thành công sẽ trả về handle tới hook_procedure, hàm trả về NULL nếu việc đăng ký hook thất bại. Sau khi đăng ký hook thành công, việc tiếp theo ta phải làm là xử lý dữ liệu hook khi có phím được nhấn. Thuật toán được mô tả như sau:
Khi chương trình kết thúc ta cần hủy hook, thật ra việc này là không cần thiết khi đây là một chương trình spy, nghĩa là nó sẽ chạy xuyên suốt từ khi người dùng vô Windows cho đến khi người dùng logoff hoặc shutdown máy. Để hủy hook ta chỉ cần gọi hàm UnhookWindowHookEx với đối số là handle mà hàm SetWindowsHookEx trả về.
Badspy project
Toàn bộ source code của badspy-project tại đây: https://github.com/sontx/badspy-projectĐọc tiếp phần 2.
0 nhận xét :
Post a Comment