【2020-09-21】 JS逆向之data返回数据加密破解--python爬虫之药智网

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

项目场景:

我们通常遇到的JS加密呢一般是请求参数经过加密的,而这次遇到了返回参数经过加密,其实这两者的解密方法都是一样的,就是要找到前端调用的JS解密的函数,话不多说,我们直接开始。

在这里插入图片描述


解决方案:


1.这里抓的是药品研发–药品注册与受理数据库里的信息

在这里插入图片描述


2.清空下xhr,点个第二页看看请求,可以明显的看出data参数是加密过后的,那么我们就需要找到data解密的JS代码,怎么着呢,这里给两个思路①:ctrl+shift+f全局搜索请求的链接里主要的部分即/zhuce,然后逐一查找有请求到这个链接的JS代码,看看里面是否有解密的方法。思路②:在翻页时下xhr断点找出解密方法,即我本次使用的方法,接下来会慢慢讲解。

在这里插入图片描述


3.然后下xhr断点,请求下一页,然后进去慢慢找解密的地方……

在这里插入图片描述
在这里插入图片描述


4.最终,我们在app开头的JS文件中找到了解密的位置,可以看到a参数就是前端返回的加密数据,然后使用at.decryptResponse(a.data, "yaozh_vip2020")去解密。

在这里插入图片描述


5.我们点at.decryptResponse方法进去看看,这下一目了然,直接将at函数整个抠出来。

在这里插入图片描述


6.这里我帮大家抠出来了,这里要注意的是this.decryptResponse方法里的a = et()(i),这个参数a是个定值,即MD5('yaozh_vip2020') --> c8d9534c6e599a37818fc0d613515b88,然后我们找一个加密过的data,执行一下。
var at = new function () {
    
    
        var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
            , a = ""
            , t = 0
            , n = []
            , o = function (e) {
    
    
            return 32 == t && (t = 0),
                e ^= a.charCodeAt(t++),
                i(e)
        }
            , i = function (e) {
    
    
            if (n.length) {
    
    
                var a = n[0];
                if (a > 191 && a < 224)
                    return n = [],
                        String.fromCharCode((31 & a) << 6 | 63 & e);
                if (1 === n.length)
                    return n.push(e),
                        "";
                var t = n[1];
                return n = [],
                    String.fromCharCode((15 & a) << 12 | (63 & t) << 6 | 63 & e)
            }
            return e < 128 ? String.fromCharCode(e) : (n.push(e),
                "")
        };
        this.decryptResponse = function (n) {
    
    
            var i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "yaozh_cydn";
            if (!n)
                return !1;
            // a = et()(i), //MD5('yaozh_vip2020') --> c8d9534c6e599a37818fc0d613515b88
            a = 'c8d9534c6e599a37818fc0d613515b88';
            t = 0;
            var s = ""
                , r = 0;
            for (n = n.replace(/[^A-Za-z0-9\+\/\=]/g, ""); r < n.length;) {
    
    
                var A = e.indexOf(n.charAt(r++))
                    , c = e.indexOf(n.charAt(r++))
                    , u = e.indexOf(n.charAt(r++))
                    , m = e.indexOf(n.charAt(r++));
                s += o(A << 2 | c >> 4),
                64 != u && (s += o((15 & c) << 4 | u >> 2)),
                64 != m && (s += o((3 & u) << 6 | m))
            }
            return s
        }
    }
;

7.最终的结果如期而至,那么这次的data加密破解就成功了!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_26079939/article/details/108705794