JS逆向笔记-记录某测试论坛的js逆向练习

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS逆向笔记-记录某测试论坛的js逆向练习相关的知识,希望对你有一定的参考价值。

这个网站应该是专门练习的,因为有个地方说不太通,在此只能算是练习,记录下,方便以后进行查阅。

首先访问主页:

他会设置一个cookie值,并且会把加密的salt

带出来。还有个叫lt的东西也会用html的形式传出来。

这个lt,会在发送请求的时候带出去。

输入用户名密码后,点击登录,发送的是这样的body:

username=admin888&password=H1uFJjwe8ZoS04VFZBOCBfma9qdoxrSd%2FND4gBK3%2F8YlVJaQ4ZJFSIO5PLjgZdYTkrgjILDmfXADSDtWJQpZCp%2FOUSX3nOo5zz6fuVHd%2FuU%3D&captchaResponse=hppx&lt=LT-3032376-qI7M4Pc15tRwukqt4nKojGlPuUL5gx1646621586496-mdSp-cas&dllt=userNamePasswordLogin&execution=e1s1&_eventId=submit&rmShown=1

这里重新刷新了下页面,上面的salt和lt会改变,下面来分析下这个password。关键代码已经定位到此处,下个断点:

 

function _gas(data, key0, iv0) 
    key0 = key0.replace(/(^\\s+)|(\\s+$)/g, "");
    var key = CryptoJS.enc.Utf8.parse(key0);
    var iv = CryptoJS.enc.Utf8.parse(iv0);
    var encrypted = CryptoJS.AES.encrypt(data, key, 
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    );
    return encrypted.toString();

function encryptAES(data, _p1) 
    if (!_p1) 
        return data;
    
    var encrypted = _gas(_rds(64) + data, _p1, _rds(16));
    return encrypted;

function _ep(p0, p1) 
    try 
        return encryptAES(p0, p1);
     catch (e) 
    return p0;

var $_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
var _chars_len = $_chars.length;
function _rds(len) 
    var retStr = '';
    for (i = 0; i < len; i++) 
        retStr += $_chars.charAt(Math.floor(Math.random() * _chars_len));
    
    return retStr;

从中可以知道密码加密是这样的

加密字符串:64位随机数+密码;

密钥:登录首页时服务器给的16位字符串。

偏移量:16位随机的字符串。

加密方式:CBC;

填充:pkcs7

比如这样的:

 他的data是:fa7B3ixA4EP7YBQfjPtbn6PX8THKAYSWD6ncB8RhrNxy5aAcdQWc63PnkGbf8w5padmin888

key0是:Jaj2b6QTiljjdd6J

iv0是:XMZb5i5FEfP4YjSA

用在线AES加密试下:

 GPUjEIFA0wavbfPL9xVlVPE0C/Id2lZfZtiuNfc0Dk4+nA2UD9syrng7xn3PhFrhVRiTI4sMrqfrd+x7Um6REyHwxvyJI38ZoykQAC+SelQ=

看下程序他跑出来是多少

 发现是一样的。看看发的包是不是一样的:

username=admin888&password=GPUjEIFA0wavbfPL9xVlVPE0C%2FId2lZfZtiuNfc0Dk4%2BnA2UD9syrng7xn3PhFrhVRiTI4sMrqfrd%2Bx7Um6REyHwxvyJI38ZoykQAC%2BSelQ%3D&captchaResponse=apcf&lt=LT-3032840-P9cGjCTq3ciu0bTqOitzoL2nzmTLRv1646622551540-mdSp-cas&dllt=userNamePasswordLogin&execution=e1s3&_eventId=submit&rmShown=1

从中可以看到是一样的,只是转成了URI。

注:这里服务器在解码时,必须要偏移量,而从这提交的包中,没有看到对偏移量相关的加密等。在此感觉,这个站点仅仅是个测试站点。但对我也很有启发,后面一篇博文,用这种方式,实现密钥和偏移量的交换。

以上是关于JS逆向笔记-记录某测试论坛的js逆向练习的主要内容,如果未能解决你的问题,请参考以下文章

朴实无华 Python JS逆向实战:某8同城JS逆向,淦就完事了~~~

朴实无华 Python JS逆向实战:某8同城JS逆向,淦就完事了~~~

朴实无华 Python JS逆向实战:某8同城JS逆向,淦就完事了~~~

JS 逆向百例网洛者反爬练习平台第六题:JS 加密,环境模拟检测

爬虫反爬:JS逆向实战练习1

爬虫反爬:JS逆向实战练习1