JS-逆向练习

宁大JS加密逆向

练习URL=https://uis.nbu.edu.cn/authserver/login

  1. 打开调试台,找到POST包如下:发现password是经过js加密混淆的. 这里captchaResponse的值是验证码的参数,lt和


lt的值就是网页的tooken值

execution 的值为tooken值减去1,其余数值不变,主要是这个password要解密出来

2. 通过对password变量名搜索,可以定位到第三个js脚本

3. 对这个js再用变量名定位,基本就是这个_etd2函数了

  1. 来验证下是不是这个_etd2函数,设个断点看是否会进入断点调试这里,可以看到密码的值是我们输入的admin

  2. 通过追踪_etd2函数发现是一长串函数,
    function _etd(_p0) {try{var _p2 = encryptAES(_p0,pwdDefaultEncryptSalt);$("#casLoginForm").find("#passwordEncrypt").val(_p2);}catch(e){$("#casLoginForm").find("#passwordEncrypt").val(_p0);}}function _etd2(_p0,_p1) {try{var _p2 = encryptAES(_p0,_p1);$("#casLoginForm").find("#passwordEncrypt").val(_p2);}catch(e){$("#casLoginForm").find("#passwordEncrypt").val(_p0);}}
    用鬼鬼代码格式化后发现_etd2需要传入2个参数,我们继续追踪encryptAES函数

  3. 这里看到里面又有个_gas函数并且要传入3个值,其中第一和第3个还要调用_rds函数,我们先去看_rds函数

  4. _rds函数 还算简单,就是输个数字,然后生成同等数字大小的随机字符串

    _rds(64)+data: 分别就是64位随机字符串+密码
    _p1:id为#pwdDefaultEncryptSalt的值
    _rds(16) 随机16位的字符串
    然后再传入_gas中进行AES加密

  5. _gas函数是用AES加密,加密方式是CBC,Pkcs7,传入的key就是_p1,iv就是_rds,对_rds(64)+data进行加密

    可以看到_rds(64)+data就是WkjXdfn3pZMDiaN3ziBmmMJJ5xP3JjCNeD8ca87crmjF4EJbEjmASnyQ2z87exTTadmin,这个admin就是输入的密码
    key:5oTEvjuoShogiOTS 和iv:JEj3ZKYi4cYdTyN2

  6. 用工具模拟计算出加密后的数据
    加密后数据为UIGK5b9ieBXhTw+9qK88cqXfJkDWUBnkLaqoBN8FHpXx4xVSIUqXZScdmAqz9rQN5lSPkK5B1QxuXSliw2STbO/U7fP5iSiqyKkUbfos2jE=

  7. 验证
    我们输入encrypted.toString()得出结果为UIGK5b9ieBXhTw+9qK88cqXfJkDWUBnkLaqoBN8FHpXx4xVSIUqXZScdmAqz9rQN5lSPkK5B1QxuXSliw2STbO/U7fP5iSiqyKkUbfos2jE=

    从POST包也可以验证结果一样.

原文地址:https://www.cnblogs.com/Young-shi/p/14867815.html