0xAA55 发表于 2014-3-19 21:18:56

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

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

Leakfix与update进程之间的通信

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

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

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

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

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

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

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

PCOPYDATASTRUCT pCpyStuSender = new COPYDATASTRUCT();
pCpyStuSender->dwData = 0x0;
pCpyStuSender->cbData = 0x67C;
pCpyStuSender->lpData = (LPVOID)pSender;

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

//建立任务
PTASKINFOpTskInfo = new TASKINFO();
lstrcpy(pTskInfo->wFilePath, L"c:/test/test.exe");
lstrcpy(pTskInfo->wFileName, L"test.exe");       
pTskInfo->Unknow1 = 0;
pTskInfo->Unknow2 = 0;
pTskInfo->Unknow3 = 0;       
pTskInfo->nCheckFlag = 0x4e;       
lstrcpy(pTskInfo->wDownURL, L"pdown://http://cdn.browser.aliyun.com/download/bin/YunOSzhushou-2.7.0.3458.exe");
pTskInfo->Unknow4 = 0;
pTskInfo->Unknow5 = 0;

PCOPYDATASTRUCT pCpyStu = new COPYDATASTRUCT();
pCpyStu->dwData = 0x3;
pCpyStu->cbData = 0x7C9;
pCpyStu->lpData = (LPVOID)pTskInfo;

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

delete pCpyStu;
delete pTskInfo;
页: [1]
查看完整版本: 【转载】向360下载管理器发送任务信息