- UID
- 1
- 精华
- 积分
- 76361
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
作者信息:
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。
用到的结构体:- 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];//260个空白UNICODE 字符
- WCHAR wSenderFullPath[260];//发起任务进程的全路径
- WCHAR wSenderVersion[50];//发起任务进程的版本,可以不管
- WCHAR wTaskName[260];//任务名称
- }SENDER, *PSENDER;
复制代码 3:- typedef struct _TASKINFO
- {
- TCHAR wFilePath[260];//任务存放的全路径
- TCHAR wFileName[260];//任务名称
- DWORD Unknow1;
- DWORD Unknow2;
- DWORD Unknow3;
- DWORD nCheckFlag;//下载URL 的校验值
- DWORD Unknow4;//0x240020
- DWORD Unknow5;//0x10
- TCHAR wDownURL[442];//下载链接,下载链接的大小可随意,其他的不行
- }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;
- //建立任务
- PTASKINFO pTskInfo = 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;
复制代码 |
|