python爬虫-逆向实例小记-2

注意!!!!某数据网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!!

案例分析

第一步:分析请求和响应内容。该网站任何一请求和内容都不可直接阅读

 

第二步: 通过分析(至于咋分析的,全凭经验)。个人通过加密内容对全局进行AES关键词搜索,并未查到。因此在搜索 JSON.parse 可查到多个。筛选后选择 可传入object对象的。或者此网站 可以对 请求参数的payload 和sig 进行确定。总之我是凭经验

 第三步:打断点,通过json.parse查找 可以对关键处打断点。刷新后可以看到一些重要信息。可以在console 中进行查看。下图所示可以看到

t :是第一次请求

s: 是加密前的参数

f:是加密后的参数一

p: 是加密后的参数二

扫描二维码关注公众号,回复: 15531940 查看本文章

 第四步:第一次请求后,响应内容加载和解析

l:是第一次请求后加密响应内容

v:是第一次请求后解密响应内容

 

第五步:第二次请求后,响应和内容

t :是第一次请求

s: 是加密前的参数

f:是加密后的参数一

p: 是加密后的参数二

 第六步:将鼠标放在object 后面上能够看到调用的函数。出现提示点进去即可查看,加密解密内核。例如:e2 和 d1 该网站调用了一些,不止于给出的例子。活学活用!最后v 是解密后的内容

 

 

最后加密解密

鄙人能力有限仅在js 文件中测试出来结果未能将其改写成python

var md5 = require('md5');
var _p = "W5D80NFZHAYB8EUI2T649RT2MNRMVE2O";
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function d1(e) {
                var t, n, r, o, i, a, c = "", u = 0;

                for (e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); u < e.length; )
                    t = _keyStr.indexOf(e.charAt(u++)) << 2 | (o = _keyStr.indexOf(e.charAt(u++))) >> 4,
                    n = (15 & o) << 4 | (i = _keyStr.indexOf(e.charAt(u++))) >> 2,
                    r = (3 & i) << 6 | (a = _keyStr.indexOf(e.charAt(u++))),
                    c += String.fromCharCode(t),
                    64 != i && (c += String.fromCharCode(n)),
                    64 != a && (c += String.fromCharCode(r));
                return c
            }
function _u_d(e) {
                for (var t = "", n = 0, r = 0, o = 0, i = 0; n < e.length; )
                    (r = e.charCodeAt(n)) < 128 ? (t += String.fromCharCode(r),
                    n++) : r > 191 && r < 224 ? (o = e.charCodeAt(n + 1),
                    t += String.fromCharCode((31 & r) << 6 | 63 & o),
                    n += 2) : (o = e.charCodeAt(n + 1),
                    i = e.charCodeAt(n + 2),
                    t += String.fromCharCode((15 & r) << 12 | (63 & o) << 6 | 63 & i),
                    n += 3);
                return t
            }

function d2(e) {

                for (var t = "", n = 0; n < e.length; n++) {
                    var r = _p.charCodeAt(n % _p.length);
                    t += String.fromCharCode(e.charCodeAt(n) ^ r)
                }
                return t = _u_d(t)
            }

 function _u_e(e) {
     if (null == e)
         return null;
     e = e.replace(/\r\n/g, "\n");
     for (var t = "", n = 0; n < e.length; n++) {
         var r = e.charCodeAt(n);
         r < 128 ? t += String.fromCharCode(r) : r > 127 && r < 2048 ? (t += String.fromCharCode(r >> 6 | 192),
             t += String.fromCharCode(63 & r | 128)) : (t += String.fromCharCode(r >> 12 | 224),
             t += String.fromCharCode(r >> 6 & 63 | 128),
             t += String.fromCharCode(63 & r | 128))
     }
     return t
 }
function e1(e) {
                if (null == e)
                    return null;
                for (var t, n, r, o, i, a, c, u = "", s = 0; s < e.length; )
                    o = (t = e.charCodeAt(s++)) >> 2,
                    i = (3 & t) << 4 | (n = e.charCodeAt(s++)) >> 4,
                    a = (15 & n) << 2 | (r = e.charCodeAt(s++)) >> 6,
                    c = 63 & r,
                    isNaN(n) ? a = c = 64 : isNaN(r) && (c = 64),
                    u = u + _keyStr.charAt(o) + _keyStr.charAt(i) + _keyStr.charAt(a) + _keyStr.charAt(c);
                return u
            }

function e2(e) {
                if (null == (e = _u_e(e)))
                    return null;
                for (var t = "", n = 0; n < e.length; n++) {
                    var r = _p.charCodeAt(n % _p.length);
                    t += String.fromCharCode(e.charCodeAt(n) ^ r)
                }
                return t
            }
function sig(e) {
                return md5(e + _p).toUpperCase()
            }

function s1(n) {
    var s = JSON.stringify(n)
        , l = JSON.parse(s);
    var f = e1(e2(JSON.stringify(l.payload)))
        ,p = sig(f);
    l.payload = f
    l.sig = p
    return l;
}


n = {}
// l = s1(n)
// console.log(l)
// l1 = d1(l.payload)
// l2 = d2(l1)
// console.log(l2)

 仅作为笔记记录,如有问题请各位大佬来指导

猜你喜欢

转载自blog.csdn.net/weixin_43124425/article/details/131398203
今日推荐