获取115网盘文件列表

之前在做自动登录时,想着能不能通过获取动态javascript代码来获取DIV里的内容,从而获取文件列表和相关的信息,但是一番查阅资料后无果,大家如果有办法请不吝赐教,^_^。
后来在CSDN上看到了通过hook API来监听webbrowser的通信,觉得此法可行,于是在一番尝试之后终于成功了。
链接是Hook浏览器控件WebBrowser对WININET.dll的调用

首先通过httpwatch知道webbrowser获取文件列表的GET 是

/files?aid=0&cid=0&o=user_ptime&asc=0
&offset=0&show_dir=1&limit=24&code=&scid=&snap=0
&natsort=1&source=&format=json HTTP/1.1

有些参数的值可能每次不一样,但是每次前面都是

/files?aid=

所以从这里下手。通过多次调试,我最终留下了两个API:HttpOpenRequestW,InternetReadFile
原来的作者HOOK了很多API,但是对于获取文件列表来说,其它没有作用,我全删了,大家可以酌情增删。

流程大概是:

  1. 在HttpOpenRequestW里判断请求的URL,是不是”/files?aid=”,是的话就设置一个标志flag=1
  2. 在InternetReadFile里,直接判断标志flag是不是等于1,是的话把传进来的指针里的内容全部copy出来,存到一个file.txt中
BOOL WINAPI CWininetHook::_InternetReadFile(HINTERNET hFile,LPVOID lpBuffer,DWORD dwNumberOfBytesToRead, LPDWORD lpdwNumberOfBytesRead)
{
    //Access violation
    BOOL result=s_pfnInternetReadFile(hFile,
    lpBuffer,dwNumberOfBytesToRead,lpdwNumberOfBytesRead);

    if (flag==1)
    {
        char tempBuffer[10000]={0};
        int coun2=dwNumberOfBytesToRead;        
        memcpy_s(tempBuffer,coun2,lpBuffer,coun2);

        //打开一个文件,文本格式,如果存在不删为0,只写,文件打开后禁止其他进程对文件的读写操作,
        CStdioFile myFile("file.txt",       CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::shareExclusive);
        //追写,因为这个函数对同一个URL可能要执行很多次
        myFile.SeekToEnd(); 
        myFile.WriteString(tempBuffer);     
        myFile.Close();
    }
    return result;
}
  1. 在MFC界面上添加list control控件,具体设置这里就不说了,可以参考这里点我
  2. 添加按钮,增加按钮事件,在这里做的事情是,
    1. 把file.txt中的内容copy到一个1w字节的char数组里(大小可以适当调整)。
    2. 建一个结构体,保存文件的相关信息。
typedef struct _FileContent 
{
    char fid[100];              //fid
    char name[100];             //名字
    int fSize;                  //文件大小
    int sta;                    //大小的单位
    char time[100];             //时间
}fileContent;       
fileContent FileName[100];
  1. 循环找到”fid”,把fid后面的内容存到filename[0].fid中,这个值在删除文件时要用到,这里的下标0只是举例说明,需要循环的。
  2. 把”n”后面的值存到filename[0].name中,这就是文件名了,
  3. 把”s”后面的值存到filename[0].size中,这就是size了(不是大小哦)。
  4. .把”sta”后面的值存到filename[0].sta中,这是size的单位,所以说大小是由size和sta一起得出的。sta有两个值,2表示B(字节),1表示KB,等于1时,size可能非常大,需要除以1024往大的单位换算,MB,GB,TB,PB.
  5. 把”t”后面的值存到filename[0].time中,这就是上传时间了.

  6. 接下来就是循环在list控件上显示内容了

效果:
显示文件列表

我把修改后的.h和.cpp打包上传了
这个HOOK.zip的使用也非常简单,在你的cXXdlg.cpp中包含hook.h,工程目录视图里把.h和.cpp都添加进去就可以了。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值