近日听闻Ben的百度网盘直链获取方法失效了,于是过去百度网盘看了一下。
恩,百度网盘的确改版了,看起来大气了一点,上面一条硬又黑又粗,恩......好的,之前Ben的方法呢,是抓取下载按钮这个a标签指向的地址,但是现在的a标签指向的是javascript:;,这让PHP情何以堪啊= =
不过,既然是javascript:;,那么就一定是通过JS解析然后document.location="xxx"之类的方法让浏览器下载的(尽管后来看起来用的是坑人的iFrame),这样就简单啦。
通过笔者这几月练就的js功法,而且对各种js隐藏链接的破解已经不下十次,对于这种东西是游刃有余啊。那接下来呢,就是详细的探索方法(以http://pan.baidu.com/share/link?shareid=442143&uk=3239637208为例子)
1. 众所周知,这种网盘的下载链接一般都很长,例子中呢就是"http://d.pcs.baidu.com/file/595205d49f4f79a60c8b80380500e91d?fid=3239637208-250528-1465378333&time=1375422786&sign=FDTAR-DCb740ccc5511e5e8fedcff06b081203-vbTow%2FT8qtdg04n%2FEuHEEfx07q8%3D&rt=sh&expires=8h&r=859564580&sh=1”,那这么长的链接呢,如果让JS通过一大堆东西组合而成,是不太可能的,一般都是让PHP直接输出在网页中。
2. 那么,PHP输出在哪里呢?既然不是在普通的a标签的href里,那就有可能在script标签里面哦,并且很有可能在Inline Script里面。那么我们就来搜索页面中出现的Inline Script,找到几行Inline Script。
3. 为了方便,我们直接定位至240行(其实还有一行也有我们感兴趣的代码),有兴趣的可以研究其他的Inline Script= =我们把这一行的内容Copy出来,Paste到一个地方,比如这里:
- var server_filename="TM截图20130430144309.png";disk.util.ViewShareUtils.bdstoken="null";disk.util.ViewShareUtils.viewShareData="{/"fs_id/":/"1465378333/",/"app_id/":/"250528/",/"path/":/"/////u6211//u7684//u7167//u7247///TM//u622a//u56fe20130430144309.png/",/"root_ns/":/"470270398/",/"parent_path/":/"%2F%E6%88%91%E7%9A%84%E7%85%A7%E7%89%87/",/"server_filename/":/"TM//u622a//u56fe20130430144309.png/",/"size/":/"633038/",/"server_mtime/":/"1367306293/",/"server_ctime/":/"1367306293/",/"local_mtime/":/"1367306291/",/"local_ctime/":/"1367306291/",/"isdir/":/"0/",/"isdelete/":/"0/",/"status/":/"41/",/"category/":/"3/",/"share/":/"0/",/"path_md5/":/"4798597560377886785/",/"delete_fs_id/":/"0/",/"md5/":/"595205d49f4f79a60c8b80380500e91d/",/"headurl/":/"http://////bs.baidu.com///p-2f7f3dee6354e7906f2e2b1ad072c814///595205d49f4f79a60c8b80380500e91d?sign=MBOT:gNQ17x3aoMs8:4vbKLEcq7BgE6v4YUfYZxS1GRB8%3D&time=1375470051&response-content-disposition=attachment;%20filename=TM%E6%88%AA%E5%9B%BE20130430144309.png/",/"mediaType/":/"image/",/"orientation/":/"UndefinedOrientation/",/"resolution/":/"width:1024,height:768/",/"dlink/":/"http://////d.pcs.baidu.com///file///595205d49f4f79a60c8b80380500e91d?fid=3239637208-250528-1465378333&time=1375426851&sign=FDTAR-DCb740ccc5511e5e8fedcff06b081203-eyN%2BATKVSh6IANCxa%2FOwS8rZvzQ%3D&rt=sh&expires=8h&r=333845478&sh=1/",/"thumbs/":{/"url1/":/"http://////www.baidupcs.com///thumbnail///595205d49f4f79a60c8b80380500e91d?fid=3239637208-250528-1465378333&time=1375426851&sign=FDTAR-DCb740ccc5511e5e8fedcff06b081203-PTZwEhWuDJ%2BgrHFG%2BMhWPlhGVY8%3D&rt=sh&expires=8h&size=c140_u90&quality=100/",/"url3/":/"http://////www.baidupcs.com///thumbnail///595205d49f4f79a60c8b80380500e91d?fid=3239637208-250528-1465378333&time=1375426851&sign=FDTAR-DCb740ccc5511e5e8fedcff06b081203-PTZwEhWuDJ%2BgrHFG%2BMhWPlhGVY8%3D&rt=sh&expires=8h&size=c850_u580&quality=100/"}}";disk.util.ViewShareUtils.fsId="1465378333";disk.util.ViewShareUtils.pubshareCount=13;disk.util.ViewShareUtils.followCount=0;disk.util.ViewShareUtils.fansCount=0;
3. 很明显,这一行里面定义了很多的变量,最重要的就是disk.util.ViewShareUtils.viewShareData对象,仔细看看,是不是看到dlink这个东西?后面就是我们想要的直链啦~
4. 那么,如何用PHP获取dlink的内容呢?我们还是按照Ben方法的思路,使用正则将他提取出来。具体的PHP代码见下方:
- <?php
- $uk = '3239637208';//把uk码改成你自己的
- $url = 'http://pan.baidu.com/share/link?shareid=' . $_GET['shareid'] . '&uk='. $uk;
- $src = file_get_contents($url);//获取下载页面源码
- $pattern = '/"dlink///":///"(.*?)///"/is';//匹配下载按钮
- preg_match_all($pattern, $src, $result);
- $fileurl = str_replace("//", "", $result[1][0]);//各种替换
- header("location:$fileurl");//Got it
- ?>
使用方法(来自Ben)
上传文件,分享文件,得到分享链接:
http://pan.baidu.com/share/link?shareid=442143&uk=3239637208
上面褐色部分是shareid,紫色部分是uk码。用uk码替换掉代码第一行的3239637208
,然后用shareid替换
http://PHP文件地址.com/download.php?shareid=xxxxxx
里面的xxxxxx
,最后得到的地址就是百度网盘文件的直链啦~ 例如我的就是
http://labcdn.sinaapp.com/mp3/download.php?shareid=435578
好了,就这样吧= =累死我了,正则表达式十分的变态啊!
评论列表()