V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Antigen
V2EX  ›  Python

请教如何拿到百度 bsk[data] 加密参数?目测是 JS 加密得出的

  •  
  •   Antigen · 2017-08-05 14:57:02 +08:00 · 4691 次点击
    这是一个创建于 2669 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正在写一个批量申诉百度贴吧账号的脚本,遇到这个加密参数,希望各位大神不吝赐教,谢谢!

    提供三个被封的测试账号:我晓遮芜严陕芋、躺宪谋、阎录狂沥午伊猿,密码全部是:kuli401

    登陆百度贴吧: https://tieba.baidu.com/ 依次打开:右上角更多 > 服务中心 > 系统处理记录 > 解除并神功护体 > 开始申请,填写解封理由,开始抓包,最后点击“提交申请”会出验证码,抓包数据如下(下面的代码是完成打码之后的 Post 数据,自动打码我已经搞定了。):

    headers = {
        'Host': 'tieba.baidu.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://tieba.baidu.com/pmc/membermanual?msgid=7080795',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Length': '2063',
        'Connection': 'keep-alive',
    }
    cookies = {
        'fixed_bar': '1',
        'TIEBAUID': '62025b4b9be62651ed1db931',
        'TIEBA_USERTYPE': '8d7ee1d441d6674c22ee3835',
        'STOKEN': '4124e1aad3e37a55c9b057c157f341924ad6ced0751863546e97c920ae9bdaad',
        'FP_LASTTIME': '1501588052684',
        'BAIDUID': '76062A7E654C67F4EFB9BC548D354648:FG=1',
        'FP_UID': 'd0d9ad33b8d7eb4e99b9bb12714aa740',
        'BDUSS': 'VNUktPRmt4bXVobTctRkI2VWxkSVJwaHhidmxGU0ZsdWlFdFBjYWxpVk45NmRaSUFBQUFBJCQAAAAAAAAAAAEAAADSElSsztLP~tXazt~Rz8nC0~MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1qgFlNaoBZTG',
    }
    payload = {
        'msgid': '7080795',
        'pid': '0',
        'tid': '0',
        'tbs': 'null',
        'content': '您好!我的这个账号为什么被封了?麻烦您给解封,谢谢了!',
        'captcha_vcode_str': vcode_md5,
        'captcha_input_str': vcode,
        'bsk[data]': 'omzVouOACqkNljzDbdOB_af501e9 ……………………………………………………非常长的一段'
    }
    http = requests.post('http://tieba.baidu.com/pmc/commitmanual', headers=headers, cookies=cookies, data=payload)
    
    • headers 和 payload 中的 msgid 参数在 HTML 代码里
    • cookies 登陆时给

    目前的问题是不加入 bsk[data]参数,返回错误代码:210009 系统错误,所以必须搞定这个参数。

    自己水平有限,只能在这个页面找到加密 JS 文件: https://fex.bdstatic.com/bsk/??dknsaZmLdyKfEeIVbKxn_dcc70f7.js,omzVouOACqkNljzDbdOB_af501e9.js

    然后该怎么办?希望各位大神帮忙解决,或者提供一个思路,我还需要学习哪些知识才能解决这个问题?麻烦指点一二,谢谢!

    6 条回复    2017-08-23 05:23:39 +08:00
    ctsed
        1
    ctsed  
       2017-08-05 15:25:31 +08:00 via Android
    哟,批量解封,贴吧机器人刷广告的?
    codeface
        2
    codeface  
       2017-08-05 15:47:16 +08:00
    pyexecjs
    ctsed
        3
    ctsed  
       2017-08-05 16:16:23 +08:00
    刷完广告还要把人工客服系统艹一遍,真是不要碧莲
    FanWall
        4
    FanWall  
       2017-08-05 16:25:24 +08:00
    代码混淆,学一点 js 吧
    md5
        5
    md5  
       2017-08-05 16:35:53 +08:00 via Android
    贴吧黄图哥?
    bigtrace
        6
    bigtrace  
       2017-08-23 05:23:39 +08:00
    楼上说的不对,这个不是 js 混淆,而是用 js 对参数进行加密。

    我通过加 breakpoint 发现,只要加载了你说的那个 js 之后,在 console 里面

    你可以查看_BSK object 的结构,里面的 function a(){} 用来算出 bsk。

    从当前页面得到 tbs 参数(假设为 ea8e71a7b73bbc181503433430 )后,在 console 里面输入

    t={}
    a={IN:{tbs: "ea8e71a7b73bbc181503433430"} , OUT: t}
    _BSK.a("omzVouOACqkNljzDbdOB", a)
    t.data

    这里的 t.data 便是你想要的_BSK
    JVwFUmcLBmUQOX99TW4YA0hdZWVqFEIHC3xWCmdYd3JrEjIOQCAoFAZYAjYoWxoDLgpzFg5iGn18KQgNdgMGB2cGAn1bbEcAUldpdTYXVw0eORVTIBlkJGASak1VPCoeAVoyOURZRTo9WjZaGXgRZyVeOg0kRU1dIFVQMAUpKxAXRWl1LhdXDR58UhZ2AXVkZQJpQxEldV9PETg5SXh5S2UKL...8ckMRLHVfTxNvZ1UaGlx4GXMWDWMafX4KExYgHQZYd1cJf1B1RABGRStleB9VQ0w4AgpnVHJyaxA2Dl86IVFXRmx1Xg9nBjNBM1gffw1pbl5JNCxfQEQyBhMRNWxAHltcZQAzS0MDBW0fEHEcZhEhQDwKZCwmNhxHcmJXGgRafwh3fzYEdQtyXg0KLlQEbCAWWDBIbDVYGAgoMnUQTRkOY1QWdwxoYWAAcDxSLyUPHBxoZFMDGV9rBH1ETXICZzgfDRAgHQZcd1cJfS8ZOnxIS2cgaQdPF1gsC1UgSA==


    不同时刻即使带入相同 tbs,解出来的_BSK 也会变,不过对于发帖并没有影响。只要带入其中一个值就可以,便可以成功发帖。
    具体百度是如何进行 js 加密的,得从以下代码找出逻辑。
    http://www.jianshu.com/p/61fe2c7ac0b6

    代码放在我的一个帖子里面, 你也可以通过打断点,在 chrome 里的 source 中找到相应文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2710 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.