zoukankan      html  css  js  c++  java
  • 兄弟,你爬虫基础这么好,需要研究js逆向了,一起吧(有完整JS代码)

    这几天的确有空了,看更新多快,专门研究了一下几个网站登录中密码加密方法,比起滑块验证码来说都相对简单,适合新手js逆向入门,大家可以自己试一下,试不出来了再参考我的js代码。篇幅有限,完整的js代码在这里:从今天开始种树

    前戏

    今天要碰的是汽车之家,关于这个网站网上大多都再研究其字体反爬,如果想研究字体反爬的话直接搜一下就有很多。
    在这里插入图片描述
    今天主要是研究汽车之家在登录时的password加密方法,并通过python调用js的方式运行出加密结果。

    开始

    老规矩,打开登录页面,长下面这样,与大多网站一样的布局,切换到账号密码登录。
    在这里插入图片描述
    接下来应该知道怎么做了吧(花5秒钟假装思考一下),跟长颈鹿装进冰箱里一样,一共4步:

    • 把冰箱门打开:F12,切到Network页签(一般默认就是这个页签,建议大家都用chrome);
    • 把大象拿出来:输入账号密码,可别输入正确的哦;
    • 把长颈鹿放进去:在请求列表里查询关于登录发起的请求;
    • 把冰箱门关上:找到请求,查看POST(一般都是post请求,暂时还没见过其它方式的) url,还有FormData里的参数。

    把冰箱门打开

    按F12打开工具
    在这里插入图片描述

    把大象拿出来

    输入错误的账号密码。
    在这里插入图片描述

    把长颈鹿放进去

    找到请求,一般这种就需要就经验了,有时候这种请求名称会带login等字眼,通常都是ajax请求(切到XHR可以只看ajax请求,如果实在找不到可以切换到XHR),这样就不会有乱七八糟的图片、css、js请求干扰你。
    在这里插入图片描述

    把冰箱门关上

    这里只截取了部分数据,后面没截的大都是滑块验证码相关参数,这个后续再进行研究,今天只看这个pwd参数。
    在这里插入图片描述

    分析

    有了前面查看的结果,我们可以直接拿这个pwdsourecs里查找相关的js文件,从下图看有两个文件包含pwd关键字,第一个看着都不像,不信你可以点进去看看,第二个包含了login关键字,八九不离十就是它,点进去。
    在这里插入图片描述
    进行来后继续搜索pwd关键字,幸运的是只有一个结果:
    在这里插入图片描述
    那可以确定加密函数就是hex_md5了,一般我们会碰到的就是带有rsaMD5encrypt之类的函数,可以作为经验留意一下。

    调试

    整一个断点,我整在了413行,大家看自己的在第几行。
    在这里插入图片描述
    输入账号密码,点击登录然后应该就会跳转到413行,点击右侧下一步箭头,就是下面这个:
    在这里插入图片描述

    hex_md5函数

    一步一步运行进入hex_md5函数,函数长这样:

    function hex_md5(s) {
        return binl2hex(core_md5(str2binl(s), s.length * chrsz));
    }
    

    s是我们的密码,可以看出调用了binl2hexcore_md5,还有一个chrsz变量,往上看一点就发现了chrsz
    在这里插入图片描述
    hex_md5函数返回的就是最终加密的结果。

    binl2hex函数

    function binl2hex(binarray) {
        var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
        var str = "";
        for (var i = 0; i < binarray.length * 4; i++) {
            str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
        }
        return str;
    }
    

    hexcase 在前面那个图里有,binarray先不用管,这是core_md5返回的值,函数相对简单,内部也没有继续调用小函数,我们也不用知道干了啥,到时候抠出来直接调用即可。

    str2binl函数

    function str2binl(str) {
        var bin = Array();
        var mask = (1 << chrsz) - 1;
        for (var i = 0; i < str.length * chrsz; i += chrsz)
            bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
        return bin;
    }
    

    这个函数也没有内部小函数了。

    core_md5函数

    这个函数就长了,内部也调用了很多,这里只截部分了,建议分别去看看调用的这些小函数,比如md5_ff等,这样后面好扣代码:

    function core_md5(x, len) {
        /* append padding */
        x[len >> 5] |= 0x80 << ((len) % 32);
        x[(((len + 64) >>> 9) << 4) + 14] = len;
        var a = 1732584193;
        var b = -271733879;
        var c = -1732584194;
        var d = 271733878;
        for (var i = 0; i < x.length; i += 16) {
            var olda = a;
            var oldb = b;
            var oldc = c;
            var oldd = d;
            a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
            d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
            c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
            b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
            a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
            .....
            省略
            .....
    

    抠出来python运行

    前面已经把js代码加密思路理了一下,大家可以自己试着抠一下,实在抠不出来的点击这里从今天开始种树参考完整js代码,接下来使用python运行,使用的依然是execjs库。

    import execjs
    
    with open('..//js//qichezhijia.js', encoding='utf-8') as f:
        qichezhijia= f.read()
    js = execjs.compile(qichezhijia)
    logid = js.call('get_pwd', "123456")
    print(logid)
    

    结果对比

    FormData里的加密结果:
    在这里插入图片描述
    python运行的结果:
    在这里插入图片描述
    看看的确是一模一样,一方面说明没问题,另外一方面说明加密方法跟时间戳没什么关系,有些网站加密结果还会跟时间戳、useragent等有关。

    结束

    整个过程并不难,又是一个适合js逆向入门练手级网站,可以通过这个例子练习一下调试技巧,完整代码点击这里从今天开始种树,关注下面的公众号,获取更多内容,当然不关注也无所谓。
    在这里插入图片描述

  • 相关阅读:
    Autofs
    markdown 基本语法
    Why Linux Doesn’t Need Defragmenting
    How to reconfigure installed dpkg package (tzdata, locales)
    weblogic性能监控
    exec
    在Oracle中查询表的大小
    hadoop主要概念的理解和学习
    ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
    linux 查看内存和cpu占用比较多的进程
  • 原文地址:https://www.cnblogs.com/luohua13950/p/13551042.html
Copyright © 2011-2022 走看看