找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2647|回复: 0

【转载】向360下载管理器发送任务信息

[复制链接]
发表于 2014-3-19 21:18:56 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
作者信息:
QQ:896396837
ID:@你的香气
原文:http://pan.baidu.com/s/1sjPNsaL
转载请注明出处:http://www.0xaa55.com/thread-388-1-1.html

[center]Leakfix与update进程之间的通信[/center]

进程之间通过SendMessageTimeoutW 进行信息交换,使用的消息为WM_COPYDATA。

用到的结构体:
  1. typedef struct tagCOPYDATASTRUCT {
  2.     ULONG_PTR dwData; //传递的消息类型
  3.     DWORD     cbData; //传递 需要传递的数据结构体大小
  4.     PVOID     lpData; //指向一个包含通信数据的结构体
  5. } COPYDATASTRUCT, *PCOPYDATASTRUCT;
复制代码
此结构体主要用于双方之间的信息传递。

dwData取值:
    0:指明当前发起消息的窗口,以及任务名称
    3:指明当前的消息为任务的详细信息,下载管理器收到消息解析无误之后就会建立并下载任务。
    4:移除指定ID 的任务,(删除任务)

用到的一般就只有0,3,4。还有很多其他的数值

各数值所对应的结构体
0:
  1. typedef struct _SENDERINFO
  2. {
  3.     WCHAR wBlank[260];//260个空白UNICODE 字符
  4.     WCHAR wSenderFullPath[260];//发起任务进程的全路径
  5.     WCHAR wSenderVersion[50];//发起任务进程的版本,可以不管
  6.     WCHAR wTaskName[260];//任务名称
  7. }SENDER, *PSENDER;
复制代码
3:
  1. typedef struct _TASKINFO
  2. {
  3.     TCHAR wFilePath[260];//任务存放的全路径
  4.     TCHAR wFileName[260];//任务名称
  5.     DWORD Unknow1;
  6.     DWORD Unknow2;
  7.     DWORD Unknow3;
  8.     DWORD nCheckFlag;//下载URL 的校验值
  9.     DWORD Unknow4;//0x240020
  10.     DWORD Unknow5;//0x10
  11.     TCHAR wDownURL[442];//下载链接,下载链接的大小可随意,其他的不行
  12. }TASKINFO, *PTASKINFO;
复制代码
nCheckFlag 的值为下载链接(UNICODE 类型)的长度右移1(相当于同字符串的ANSI字符串的长度);

4:
删除任务没有结构体,COPYDATASTRUCT的第三个成员包含的是任务ID的地址。

使用很简单,示例代码:
  1. HWND hWnd = ::FindWindowExW(NULL,NULL,L"LiveUpd360S",NULL);
  2. if (0 == hWnd)
  3. {
  4.     return;
  5. }
  6.        
  7. PSENDER pSender = new SENDER();
  8. memset(pSender, 0, 830);
  9. lstrcpy(pSender->wSenderFullPath, L"C:\\Program Files (x86)\\360\\360safe\\360leakfixer.exe");
  10. // = { 0x0F, 0x6F, 0x1E, 0x6D, 0x65, 0x88, 0x01, 0x4E };
  11. lstrcpy(pSender->wTaskName, L"漏洞补丁");

  12. PCOPYDATASTRUCT pCpyStuSender = new COPYDATASTRUCT();
  13. pCpyStuSender->dwData = 0x0;
  14. pCpyStuSender->cbData = 0x67C;
  15. pCpyStuSender->lpData = (LPVOID)pSender;

  16. ::SendMessageTimeoutW((HWND)GetDlgItemInt(IDC_EDT_HWND)/*hWnd*/, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)pCpyStuSender, SMTO_NORMAL, 1000, NULL);
  17. delete pSender;
  18. delete pCpyStuSender;

  19. //建立任务
  20. PTASKINFO  pTskInfo = new TASKINFO();
  21. lstrcpy(pTskInfo->wFilePath, L"c:/test/test.exe");
  22. lstrcpy(pTskInfo->wFileName, L"test.exe");       
  23. pTskInfo->Unknow1 = 0;
  24. pTskInfo->Unknow2 = 0;
  25. pTskInfo->Unknow3 = 0;       
  26. pTskInfo->nCheckFlag = 0x4e;       
  27. lstrcpy(pTskInfo->wDownURL, L"pdown://http://cdn.browser.aliyun.com/download/bin/YunOSzhushou-2.7.0.3458.exe");
  28. pTskInfo->Unknow4 = 0;
  29. pTskInfo->Unknow5 = 0;

  30. PCOPYDATASTRUCT pCpyStu = new COPYDATASTRUCT();
  31. pCpyStu->dwData = 0x3;
  32. pCpyStu->cbData = 0x7C9;
  33. pCpyStu->lpData = (LPVOID)pTskInfo;

  34. ::SendMessageTimeoutW((HWND)GetDlgItemInt(IDC_EDT_HWND)/*hWnd*/, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)pCpyStu, SMTO_NORMAL, 1000, NULL);

  35. delete pCpyStu;
  36. delete pTskInfo;
复制代码
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 04:36 , Processed in 0.032937 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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