This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Hướng dẫn Phòng chống keylogger cho ứng dụng của bạn

Huỳnh Phúc Huy

Búa Đá Đôi

Keylogger là gì?

Nhắc đến keylogger thì hầu hếu nhiều bạn đã biết rồi nhưng mình cũng muốn nêu lại ngắn gọn về định nghĩa này.

Keylogger hay "trình theo dõi thao tác bàn phím" theo cách dịch ra tiếng Việt là một chương trình máy tính ban đầu được viết nhằm mục đích theo dõi và ghi lại mọi thao tác thực hiện trên bàn phím vào một tập tin nhật ký (log) để cho người cài đặt nó sử dụng. Vì chức năng mang tính vi phạm vào riêng tư của người khác này nên các trình keylogger được xếp vào nhóm các phần mềm gián điệp.

Phòng chống Keylogger cho ứng dụng của bạn


Khi bạn phân phối ứng dụng cho người dùng thì việc yêu cầu người dùng cài đặt trình antivirus để phòng keylogger khi sử dụng ứng dụng của bạn là không khả thi

Vì thế mình sẽ cũng cấp một giải pháp để phòng tránh keylogger có thể ghi được thông tin khi người dùng nhập lệu trên ứng dụng của bạn bằng cách sử dụng một hàm đơn giản đã được cung cấp bởi thư viện user32.dll của Windows


Các bạn có thể sử dụng mọi ngôn ngữ chỉ cần ngôn ngữ đó có thể làm việc với các thư viện của windows, ngôn ngữ mà mình demo trong bài viết này là C# và ứng dụng nhỏ mình sử dụng là khung đăng nhập đơn giản gồm 2 fields


Bằng phương pháp tạo ra một Desktop ngẫu nhiên và khởi tạo thread chạy độc lập trên desktop mới này sẽ ngăn chặn được các chương trình khác can thiệp trên nền ứng dụng, kể cả low level hook của keylogger. Chi tiết về tập lệnh, các bạn có thể tham khảo thêm ở đây : https://msdn.microsoft.com/en-us/li...124(v=vs.85).aspx?f=255&MSPPError=-2147217396

Mã nguồn:


>> Khai báo các phương thức, hằng số và import user32.dll
Mã:
[DllImport("user32.dll")]
        public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice,
        IntPtr pDevmode, int dwFlags, uint dwDesiredAccess, IntPtr lpsa);

        [DllImport("user32.dll")]
        private static extern bool SwitchDesktop(IntPtr hDesktop);

        [DllImport("user32.dll")]
        public static extern bool CloseDesktop(IntPtr handle);

        [DllImport("user32.dll")]
        public static extern bool SetThreadDesktop(IntPtr hDesktop);

        [DllImport("user32.dll")]
        public static extern IntPtr GetThreadDesktop(int dwThreadId);

        [DllImport("kernel32.dll")]
        public static extern int GetCurrentThreadId();

        public static String html;

        enum DESKTOP_ACCESS : uint
        {
            DESKTOP_NONE = 0,
            DESKTOP_READOBJECTS = 0x0001,
            DESKTOP_CREATEWINDOW = 0x0002,
            DESKTOP_CREATEMENU = 0x0004,
            DESKTOP_HOOKCONTROL = 0x0008,
            DESKTOP_JOURNALRECORD = 0x0010,
            DESKTOP_JOURNALPLAYBACK = 0x0020,
            DESKTOP_ENUMERATE = 0x0040,
            DESKTOP_WRITEOBJECTS = 0x0080,
            DESKTOP_SWITCHDESKTOP = 0x0100,

            GENERIC_ALL = (DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU |
                            DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK |
                            DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS | DESKTOP_SWITCHDESKTOP),
        }


>> Khởi tạo một Desktop ngẫu nhiên và tiến hành chuyển đổi sang Desktop mới này
Mã:
 // old desktop's handle, obtained by getting the current desktop assigned for this thread
            IntPtr hOldDesktop = GetThreadDesktop(GetCurrentThreadId());

            // new desktop's handle, assigned automatically by CreateDesktop
            IntPtr hNewDesktop = CreateDesktop("RandomDesktopName",
            IntPtr.Zero, IntPtr.Zero, 0, (uint)DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero);

            // switching to the new desktop
            SwitchDesktop(hNewDesktop);


>> Đóng Desktop sau khi kết thúc phiên làm việc và trở về desktop hiện tại
Mã:
 // if got here, the form is closed => switch back to the old desktop
            SwitchDesktop(hOldDesktop);

            // disposing the secure desktop since it's no longer needed
            CloseDesktop(hNewDesktop);

Các bạn có thể kiểm tra thành quả bằng cách mở một chương trình theo dõi bàn phím hoặc thử nhấn nút chụp hình (PrintSceen), nếu không thể log nội dung nhập trên ứng dụng hay không thể chụp hình được nghĩa là thành công rồi nhé

Tải project mẫu
Các bạn có thể tải project mẫu ở file đính kèm để tiện ngâm cứu và áp dụng
 

Attachments

  • Antikeylogger.zip
    62.6 KB · Lượt xem: 14