技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1744|回复: 5
收起左侧

【转载】使用360安全卫士的下载接口

[复制链接]

1012

主题

2251

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
201
威望
271 点
宅币
17112 个
贡献
34135 次
宅之契约
0 份
在线时间
1620 小时
注册时间
2014-1-26
发表于 2014-3-18 20:33:28 | 显示全部楼层 |阅读模式

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

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

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

  如题,本帖讲述如何使用 360安全卫士的P2P下载接口,希望这贴能能够让大家会使用360的接口,同时不希望有人拿这贴所涉的东西,去做有侵犯奇虎360权益的事情;如有,责任自负,本帖只讨论技术。

  很久一段时间,看到了360安全卫士的P2P 下载的东西心里就痒痒,因此花了一段时间来搞了搞,期间也去研究过迅雷的下载接口,但是那个复杂度,不得不放弃,只能叹技术不够……,但是苍天不负有心人,让我搞定了360安全卫士的P2P 下载接口,哈哈,让我得意一会儿…

  360的下载接口,可以P2P下载,多线程,断点续传,即使下载的时候断电,重新开机也可以接着继续下载。

  只要你有360安全卫士,那么就一定包含了这三个文件:LiveUpd360.dll,360P2SP.dll,360net.dll,这3个DLL,就有了360的P2P下载接口,360net.dll 这个文件,本人觉得在使用过程中没什么用处,但是没办法,人家有依赖关系,不要还不行(老版本的可以不要,只要LiveUpd360.dll,360P2SP.dll,我待会儿会提供下载)。其中我们只需要使用LiveUpd360.dll 里面的函数接口就行了,他会自动去调用相关DLL里面的函数。

LiveUpd360.dll 的导出函数表:
[Plain Text] 纯文本查看 复制代码
    LiveUpd360.dll  0001  PPClose   .   .   .   .   .   .   .   000015C0
    LiveUpd360.dll  0002  PPCloseHandle .   .   .   .   .   .   000029B5
    LiveUpd360.dll  0003  PPDownload    .   .   .   .   .   .   00001CAF
    LiveUpd360.dll  0004  PPGetConfig   .   .   .   .   .   .   000015EF
    LiveUpd360.dll  0005  PPInit    .   .   .   .   .   .   .   00001B35
    LiveUpd360.dll  0006  PPQueryTask   .   .   .   .   .   .   00002BB4
    LiveUpd360.dll  0007  PPQueryTaskEx .   .   .   .   .   .   00002B38
    LiveUpd360.dll  0008  PPRemoveTask  .   .   .   .   .   .   00001BE4
    LiveUpd360.dll  0009  PPRestart .   .   .   .   .   .   .   000010C4
    LiveUpd360.dll  000A  PPSetConfig   .   .   .   .   .   .   000015D2
    LiveUpd360.dll  000B  PPStartTask   .   .   .   .   .   .   00001B65
    LiveUpd360.dll  000C  PPStartTaskEx .   .   .   .   .   .   00001B89
    LiveUpd360.dll  000D  PPStopSeed    .   .   .   .   .   .   00001C18
    LiveUpd360.dll  000E  PPStopTask    .   .   .   .   .   .   00001BB0
    LiveUpd360.dll  000F  StartLan  .   .   .   .   .   .   .   000010C4
    LiveUpd360.dll  0010  StopLan   .   .   .   .   .   .   .   000010C4
    LiveUpd360.dll  0011  _EnableP2P    .   .   .   .   .   .   00001097
    LiveUpd360.dll  0012  _GetTasks .   .   .   .   .   .   .   000010B0
    LiveUpd360.dll  0013  _IsStopped    .   .   .   .   .   .   000010B5
    LiveUpd360.dll  0014  _P2SPCancelCheckProxy .   .   .   .   00001144
    LiveUpd360.dll  0015  _P2SPCheckProxy   .   .   .   .   .   000010D6
    LiveUpd360.dll  0016  _P2SPSetOption    .   .   .   .   .   00001149
    LiveUpd360.dll  0017  _P2SPUpdateRegInfo    .   .   .   .   000010D1
    LiveUpd360.dll  0018  _PPQueryIPPort    .   .   .   .   .   000010C7
    LiveUpd360.dll  0019  _PPQueryTask2 .   .   .   .   .   .   000010BA
    LiveUpd360.dll  001A  _PPSetLocalLog    .   .   .   .   .   000010CC
    LiveUpd360.dll  001B  _Run  .   .   .   .   .   .   .   .   000010A1
    LiveUpd360.dll  001C  _SetKeep  .   .   .   .   .   .   .   0000108D
    LiveUpd360.dll  001D  _SetKeepEx    .   .   .   .   .   .   00001092
    LiveUpd360.dll  001E  _SetLocalLog  .   .   .   .   .   .   00003212
    LiveUpd360.dll  001F  _StartRun .   .   .   .   .   .   .   000010A6
    LiveUpd360.dll  0020  _StopRun  .   .   .   .   .   .   .   000010AB
    LiveUpd360.dll  0021  __PPSetModulePath2    .   .   .   .   000010BF
//老版本的没有这个
    LiveUpd360.dll  001E  _PPQueryTask3 .   .   .   .   .   .   000053D0
(注意:所有参数标记为Unknow的,那么这个参数,我也不知道是干什么的,可以不管)
通过这些函数列表,就应该对如何使用它们有一个梗概的了解,我们继续,我们将要用的函数有这些:PPStartTask,PPStopTask,_StartRun,_StopRun,_EnableP2P,PPSetConfig,_PPQueryTask3,PPRemoveTask这几个函数,使用它们就可以达到建立下载任务,获取任务信息,限制速度,至少是达到了下载的一个完整体系。函数的分析过程我已经搞定了,现在放出函数原型:
[C++] 纯文本查看 复制代码
//启动下载器
int _StartRun();        //启动下载器,无参数
//停止下载器
int _StopRun();         //停止运行下载器,无参数
//建立任务,开始下载
int _ PPStartTask
(
    LPSZSTR szDownUrl,  //下载URL
    LPSZSTR szFilePaht, //下载文件的存放 完整路径
    int nUnknow1,       //0x14
    int nUnknow2,       //0
    int nUnknow3,       //0
    int nUnknow4,       //0
    int nUnknow5        //0
);
//暂停/停止任务
int PPStopTask
(
    DWORD nTaskID       //包含任务的ID
);
//开启P2P下载
int _EnabledP2P
(
    BOOL bEnabled       //指定是否启用P2P下载
);
//设置下载速度   0:不限速
int PPSetConfig
(
    IN LPVOID lpPreperties,//指向一个属性的结构体
    DWORD nUnknow       //未知参数,始终为0
);
//获取指定任务的任务信息
int  _PPQueryTask3
(
    IN DWORD nTaskID,   //包含指定将要获取的任务ID信息
    OUT LPVOID lpTask   //指向一个用来返回任务信息的结构体
);
//移除指定的任务
int PPRemoveTask
(
    IN DWORD nTaskID    //传入要移除的任务ID
);
以上函数所使用到的两个结构体
[C++] 纯文本查看 复制代码
typedef struct _TASK
{
    DWORD nUnknown1;
    ULONG64 nTotalBytes;        //下载文件的总大小,单位:字节
    ULONG64 nDownloadedBytes;   //已下载字节数,单位:字节
    ULONG64 nUnknow2;
    ULONG64 nUnknow3;
    DWORD nUnknow4;
    DWORD nDownloadSpeed;       //当前任务下载速度,单位:字节
    DWORD nUploadSpeed;         //当前任务上传速度,单位:字节
    DWORD nUnknow5;
    DWORD nUnknow6;
    DWORD nUnknow7;
    DWORD nUnknow8;
    WCHAR wFilePath[512];       //文件下载全路径
    WCHAR wCurPath[1024];   
}TASK,*PTASK;

typedef struct _CONFIG
{
    DWORD nUnknow1;             //指定为0xC,可能不同操作系统有所不同,如果不能用,自己去调试
    DWORD nDownSpeed;           //指定限制的下载速度,单位:字节
    DWORD nUploadSpeed;         //指定上传的速度,单位:字节
    CHAR  cUnknown2[180];
}CONFIG,*PCONFIG;
所谓眼见为实,光说是没用的,上代码,只是片段
用到的全局变量
[C++] 纯文本查看 复制代码
HMODULE hModule;//全局变量
DWORD g_nTaskID;//全局变量
[C++] 纯文本查看 复制代码
wchar_t wDllPath[MAX_PATH]={0};

GetModuleFileName(NULL,wDllPath,MAX_PATH);
PathRemoveFileSpec(wDllPath);
wcscat(wDllPath,L"\\LiveUpd360.dll");
hModule=LoadLibrary(wDllPath);

if(0==hModule)
{
    return false;
}

DWORD StartRun=(DWORD)GetProcAddress(hModule,"_StartRun");
DWORD EnableP2P=(DWORD)GetProcAddress(hModule,"_EnableP2P");
//开始运行
_asm
{
    mov eax,StartRun
    call eax

    push 1
    mov eax,EnableP2P
    call eax
    add esp,0x4
}
上面这段代码用于启动下载器,并启用P2P下载,内嵌汇编不懂得可以问我。
[C++] 纯文本查看 复制代码
DWORD PPStartTask=(DWORD)GetProcAddress(hModule,"PPStartTask");
wchar_t wFilePath[MAX_PATH]=L"c://test/test.exe";
wchar_t wDownUrl[1024]=L"pdown://http://cdn.browser.aliyun.com/download/bin/YunOSzhushou-2.7.0.3458.exe";
_asm
{
    push 0
    push 0
    push 0
    push 0
    push 0x14
    lea eax,dword ptr wFilePath
    push eax
    lea ebx,dword ptr wDownUrl
    push ebx
    mov ebx,PPStartTask
    call ebx//新建任务,开始下载
    add esp,0x1c

    mov g_nTaskID,eax//保存任务ID
}
上面的代码片段演示了,如何新建任务,需要注意的就是,下载链接字符串的前面的pdown://不能去掉,下载链接直接跟在后面就行,还有就是函数调用之后,要手动恢复堆栈。
[C++] 纯文本查看 复制代码
TASK *task=new TASK();
DWORD _PPQueryTask3=(DWORD)GetProcAddress(hModule,"_PPQueryTask3");
_asm
{
    mov eax,eax
    mov ebx,ebx
    mov eax,eax

    mov ebx,task
    push ebx
    mov eax,g_nTaskID
    push eax
    mov eax,_PPQueryTask3
    call eax
    add esp,8h
}

CString strTemp;
strTemp.Format(L"%.2fMB",task->nTotalBytes/1024.0/1024.0);
((CEdit*)GetDlgItem(IDC_EDT_TOTAL))->SetWindowText(strTemp);
strTemp.Format(L"%.2fMB",task->nDownloadedBytes / 1024.0 / 1024.0);
((CEdit*)GetDlgItem(IDC_EDT_DOWNLOADED))->SetWindowText(strTemp);
strTemp.Format(L"%.2fKB",task->nDownloadSpeed / 1024.0);
((CEdit*)GetDlgItem(IDC_EDT_DOWNSPEED))->SetWindowText(strTemp);

delete task;
上面的代码演示通过TaskID获取任务信息,旧版本的没有这个导出函数,需要尝试的自己去试,不过猜想应该是_PPQueryTask2
[C++] 纯文本查看 复制代码
DWORD PPStopTask=(DWORD)GetProcAddress(hModule,"PPStopTask");
_asm
{
    mov ebx,dword ptr g_nTaskID
    push ebx
    mov eax,PPStopTask
    call eax
}
以上代码演示 暂停/停止一个任务
[C++] 纯文本查看 复制代码
PCONFIG pConfig=new CONFIG();
pConfig->nUnknow1=0xC;
pConfig->nDownSpeed=200*1024;
pConfig->nUploadSpeed=10*1024;
memset(pConfig->cUnknown2,0,180);

TASK *task=new TASK();
DWORD PPSetConfig=(DWORD)GetProcAddress(hModule,"PPSetConfig");
_asm
{
	push 0
	mov eax,pConfig
	push eax

	mov eax,PPSetConfig
	call eax
	add esp,0x8
}
delete task;
delete pConfig;
以上代码演示如何限制下载,上传速度,限速为:下载速度:200KB,上传限制为10KB。
[C++] 纯文本查看 复制代码
DWORD PPRemoveTask=(DWORD)GetProcAddress(hModule,"PPRemoveTask");
_asm
{
	mov ebx,dword ptr g_nTaskID
	push ebx
	mov eax,PPRemoveTask
	call eax
}
以上代码演示了,如何移除一个任务,他可以移除正在下载的任务,也可以移除暂停/停止 状态的任务,注意的就是:移除一个任务,源文件也会删除,不能移除已下载完成的任务。

现在贴上使用的图,看看效果:
1. 现在为打开的图片,可以看到后面的目录里面没有文件
1.png
2.开始下载任务,第一个数值为总大小,第二个为已下载大小,第三个为下载速度
2.png
3.停止任务,下载速度就为0了
3.png
4.限制下载上传速度,下载200KB,上传10KB
4.png
5.取消下载/长传 限制
4.png
6.下载完成
5.png
7.移除任务
6.png
以上演示就是如何使用360的下载接口了(导出函数),使用过程不难,但我弄出来却不容易,如果有说我什么技术不行,喷我的请远离,不欢迎你。 本人原创,转载请注明出处,谢谢!
有兴趣研究这个但是还不会用的,可以加我QQ:896396837

0

主题

7

帖子

71

积分

用户组: 小·技术宅

UID
1678
精华
0
威望
0 点
宅币
64 个
贡献
0 次
宅之契约
0 份
在线时间
7 小时
注册时间
2016-5-8
发表于 2016-5-23 09:40:06 | 显示全部楼层
看完了才发现是两年前的帖子

8

主题

36

帖子

344

积分

用户组: 中·技术宅

UID
3517
精华
0
威望
0 点
宅币
301 个
贡献
7 次
宅之契约
0 份
在线时间
50 小时
注册时间
2018-3-2
发表于 2018-3-3 19:26:14 | 显示全部楼层
前来考古
回复

使用道具 举报

12

主题

118

帖子

860

积分

用户组: 大·技术宅

UID
3808
精华
1
威望
16 点
宅币
659 个
贡献
46 次
宅之契约
0 份
在线时间
124 小时
注册时间
2018-5-6
发表于 2018-6-26 09:16:02 | 显示全部楼层
一知半解,但是感觉还是收获了许多,这个帖子里的是不是用到了类似dll劫持类似的技术?
菜鸟一枚,直接指正,不必留情

1012

主题

2251

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
201
威望
271 点
宅币
17112 个
贡献
34135 次
宅之契约
0 份
在线时间
1620 小时
注册时间
2014-1-26
 楼主| 发表于 2018-6-26 11:56:37 | 显示全部楼层
溯影 发表于 2018-6-26 09:16
一知半解,但是感觉还是收获了许多,这个帖子里的是不是用到了类似dll劫持类似的技术?
...

否。所谓DLL劫持一般指的是写一个看起来一模一样的DLL让目标加载

12

主题

118

帖子

860

积分

用户组: 大·技术宅

UID
3808
精华
1
威望
16 点
宅币
659 个
贡献
46 次
宅之契约
0 份
在线时间
124 小时
注册时间
2018-5-6
发表于 2018-6-26 14:07:41 | 显示全部楼层
0xAA55 发表于 2018-6-26 11:56
否。所谓DLL劫持一般指的是写一个看起来一模一样的DLL让目标加载

哦哦,这个我又看了看好像是自己先分析哪些dll有用,然后用软件分析相应的dll里的一些导出函数,最后用那些导出函数和内嵌汇编来自己用,就好像是用360里的下载程序的函数来给自己下载东西的吧。下载东西程序看来还是比较考验人的,原文:360的下载接口,可以P2P下载,多线程,断点续传,即使下载的时候断电,重新开机也可以接着继续下载。
菜鸟一枚,直接指正,不必留情

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-1-19 06:44 , Processed in 0.129966 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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