美文网首页Python
JS解密:破解爱奇艺登录请求参数 passwd 的加密方法

JS解密:破解爱奇艺登录请求参数 passwd 的加密方法

作者: dex0423 | 来源:发表于2020-06-26 15:41 被阅读0次

    1. 前言

    • 本文要破解的网站是爱奇艺,地址:https://www.iqiyi.com/
    • 本文的主要内容,是破解爱奇艺视频网站账号登录时、密码参数的 JS 加密方法

    2. 抓包

    • 打开网页,右键调出调试窗口的 Network 工具;
    • 点击右上角登录按钮,弹出登录 frame 之后,切换成账号密码登录;
    • 随便输入账号(这里输入12345678@qq.com)、密码(这里输入 111111),点击登录按钮,查看网络抓包情况;
      --注意:这里我们找到登录窗口的 url(https://www.iqiyi.com/iframe/loginreg),转到此窗口可以直接访问登录窗口;
      image.png
    • 打开登录页面后,调出浏览器抓包工具,随便输入账号(这里输入12345678@qq.com)、密码(这里输入 111111),点击登录按钮,再次抓包;
      -- 注意:点击登录后弹出验证码窗口,本文不涉及验证码内容,此处忽略不用管;

    3. 分析

    • 通过分析抓包数据,发现 login 的 POST 请求中的 passwd 参数值不固定,生成方式未知;
      -- 另外请注意:通过多次抓包,发现 ptiddfp 参数值是固定的;
      image.png
    • 打开全局搜索,查找生成 passwd 参数的 JS 代码,并在代码位置下断点;
    image.png
    • 刷线输入页面,重新输入账号、密码,点击登录按钮,发现被断下来;
    • 通过分析发现,下面这段代码是我们要查找的代码,按照下图所示,进入查看 r.rsaFun 函数代码;
    image.png
    • 如下图红框所示, r.rsaFun 函数代码就是生成 passwd 参数的代码;
    image.png
    • 按照前面的方法,回溯分析代码中调用的函数 getKeyPairencryptedString,发现两个函数都位于一个 js 文件下的同一个外部函数 c = function(a, b) 中;
    image.png
    • 按照下图所示,首先找到我们需要的 js 代码的开始和结束位置;
      -- 注意:因为 getKeyPairencryptedString 两个函数位于同一个 外部函数 c = function(a, b),我们只需要把 function(a, b) 这个外部函数的代码复制出来就可以,即图中 {} 中间的代码;
    image.png image.png
    • 4. 调试 JS

    • 打开发条调试工具,如果没有此工具可以点击链接:https://pan.baidu.com/s/13APz4SiiY2dYCSrYfSlpNw 提取码:numa,进行下载;
    • 将前面复制的代码粘贴进调试工具输入框,格式化以后加载代码;
    • 加载后发现抱错 -->错误描述:'b' 未定义,于是在最前面加上代码 b = {};
    • 再次加载发现报错 -->错误描述:'a' 未定义,于是在最前面加上代码 a = {};
    • 在尾部重写 rsaFun 函数,并重新命名为 getPwd,代码如下所示;
    function getPwd(e) {
    var t = "ab86b6371b5318aaa1d3c9e612a9f1264f372323c8c0f19875b5fc3b3fd3afcc1e5bec527aa94bfa85bffc157e4245aebda05389a5357b75115ac94f074aefcd",
    a = "10001",
    n = f.getKeyPair(a, "", t),
    i = f.encryptedString(n, encodeURIComponent(e)).replace(/\s/g, "-");
    return i
    }
    
    • 注意:
      -- 上面代码中,f.getKeyPair 对应原始代码的 Q.crypto.rsa.RSAUtils.getKeyPair
      -- 上面代码中,f.encryptedString 对应原始代码的 Q.crypto.rsa.RSAUtils.encryptedString
    • 加载代码,尝试计算 getpwd('666666') 的结果值,得到的结果与调试器中的额参数值做对比,发现结果是一样的;
    image.png
    • 破解成功。

    5. 构造爬虫

    • 编辑 py 调用 js,构造请求参数;
      -- 此处具体代码省略;

    相关文章

      网友评论

        本文标题:JS解密:破解爱奇艺登录请求参数 passwd 的加密方法

        本文链接:https://www.haomeiwen.com/subject/cuqufktx.html