Python爬虫实战,JS加密数据逆向解析

Python绿色通道

共 56295字,需浏览 113分钟

 ·

2022-07-23 13:20

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包

背景说明:

我们有些时候接到的单子,并不是都没有反爬,有些网站是有反爬取策略的,比如我们在请求接口的时候,发现返回结果是加密数据,该如何处理呢?今天介绍一种通过调试js进行数据逆向解析,就是常说的扣js。通过这篇文章会让你知道扣js的过程。

目标网址:

https://www.qimingpian.cn/finosda/project/pinvestment

页面分析:

通过图文的介绍方式,一步一步的告诉你页面分析的过程。

代码实现:

code_js.js

function o(e, t, i, n, a, o{
    var s, c, r, l, d, u, h, p, f, m, v, g, y, b, C = new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756), _ = new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344), w = new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584), k = new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928), x = new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080), T = new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312), $ = new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154), N = new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696), A = function(e{
        for (var t, i, n, a = new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964), o = new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697), s = new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272), c = new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144), r = new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256), l = new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488), d = new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746), u = new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568), h = new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578), p = new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488), f = new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800), m = new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744), v = new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128), g = new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261), y = e.length > 8 ? 3 : 1, b = new Array(32 * y), C = new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0), _ = 0, w = 0, k = 0; k < y; k++) {
            var x = e.charCodeAt(_++) << 24 | e.charCodeAt(_++) << 16 | e.charCodeAt(_++) << 8 | e.charCodeAt(_++)
              , T = e.charCodeAt(_++) << 24 | e.charCodeAt(_++) << 16 | e.charCodeAt(_++) << 8 | e.charCodeAt(_++);
            x ^= (n = 252645135 & (x >>> 4 ^ T)) << 4,
            x ^= n = 65535 & ((T ^= n) >>> -16 ^ x),
            x ^= (n = 858993459 & (x >>> 2 ^ (T ^= n << -16))) << 2,
            x ^= n = 65535 & ((T ^= n) >>> -16 ^ x),
            x ^= (n = 1431655765 & (x >>> 1 ^ (T ^= n << -16))) << 1,
            x ^= n = 16711935 & ((T ^= n) >>> 8 ^ x),
            n = (x ^= (n = 1431655765 & (x >>> 1 ^ (T ^= n << 8))) << 1) << 8 | (T ^= n) >>> 20 & 240,
            x = T << 24 | T << 8 & 16711680 | T >>> 8 & 65280 | T >>> 24 & 240,
            T = n;
            for (var $ = 0; $ < C.length; $++)
                C[$] ? (x = x << 2 | x >>> 26,
                T = T << 2 | T >>> 26) : (x = x << 1 | x >>> 27,
                T = T << 1 | T >>> 27),
                T &= -15,
                t = a[(x &= -15) >>> 28] | o[x >>> 24 & 15] | s[x >>> 20 & 15] | c[x >>> 16 & 15] | r[x >>> 12 & 15] | l[x >>> 8 & 15] | d[x >>> 4 & 15],
                i = u[T >>> 28] | h[T >>> 24 & 15] | p[T >>> 20 & 15] | f[T >>> 16 & 15] | m[T >>> 12 & 15] | v[T >>> 8 & 15] | g[T >>> 4 & 15],
                n = 65535 & (i >>> 16 ^ t),
                b[w++] = t ^ n,
                b[w++] = i ^ n << 16
        }
        return b
    }(e), L = 0, S = t.length, z = 0, B = 32 == A.length ? 3 : 9;
    p = 3 == B ? i ? new Array(0,32,2) : new Array(30,-2,-2) : i ? new Array(0,32,2,62,30,-2,64,96,2) : new Array(94,62,-2,32,64,2,30,-2,-2),
    2 == o ? t += "        " : 1 == o ? i && (r = 8 - S % 8,
    t += String.fromCharCode(r, r, r, r, r, r, r, r),
    8 === r && (S += 8)) : o || (t += "\0\0\0\0\0\0\0\0");
    var F = ""
      , I = "";
    for (1 == n && (f = a.charCodeAt(L++) << 24 | a.charCodeAt(L++) << 16 | a.charCodeAt(L++) << 8 | a.charCodeAt(L++),
    v = a.charCodeAt(L++) << 24 | a.charCodeAt(L++) << 16 | a.charCodeAt(L++) << 8 | a.charCodeAt(L++),
    L = 0); L < S; ) {
        for (u = t.charCodeAt(L++) << 24 | t.charCodeAt(L++) << 16 | t.charCodeAt(L++) << 8 | t.charCodeAt(L++),
        h = t.charCodeAt(L++) << 24 | t.charCodeAt(L++) << 16 | t.charCodeAt(L++) << 8 | t.charCodeAt(L++),
        1 == n && (i ? (u ^= f,
        h ^= v) : (m = f,
        g = v,
        f = u,
        v = h)),
        u ^= (r = 252645135 & (u >>> 4 ^ h)) << 4,
        u ^= (r = 65535 & (u >>> 16 ^ (h ^= r))) << 16,
        u ^= r = 858993459 & ((h ^= r) >>> 2 ^ u),
        u ^= r = 16711935 & ((h ^= r << 2) >>> 8 ^ u),
        u = (u ^= (r = 1431655765 & (u >>> 1 ^ (h ^= r << 8))) << 1) << 1 | u >>> 31,
        h = (h ^= r) << 1 | h >>> 31,
        c = 0; c < B; c += 3) {
            for (y = p[c + 1],
            b = p[c + 2],
            s = p[c]; s != y; s += b)
                l = h ^ A[s],
                d = (h >>> 4 | h << 28) ^ A[s + 1],
                r = u,
                u = h,
                h = r ^ (_[l >>> 24 & 63] | k[l >>> 16 & 63] | T[l >>> 8 & 63] | N[63 & l] | C[d >>> 24 & 63] | w[d >>> 16 & 63] | x[d >>> 8 & 63] | $[63 & d]);
            r = u,
            u = h,
            h = r
        }
        h = h >>> 1 | h << 31,
        h ^= r = 1431655765 & ((u = u >>> 1 | u << 31) >>> 1 ^ h),
        h ^= (r = 16711935 & (h >>> 8 ^ (u ^= r << 1))) << 8,
        h ^= (r = 858993459 & (h >>> 2 ^ (u ^= r))) << 2,
        h ^= r = 65535 & ((u ^= r) >>> 16 ^ h),
        h ^= r = 252645135 & ((u ^= r << 16) >>> 4 ^ h),
        u ^= r << 4,
        1 == n && (i ? (f = u,
        v = h) : (u ^= m,
        h ^= g)),
        I += String.fromCharCode(u >>> 24, u >>> 16 & 255, u >>> 8 & 255255 & u, h >>> 24, h >>> 16 & 255, h >>> 8 & 255255 & h),
        512 == (z += 8) && (F += I,
        I = "",
        z = 0)
    }
    if (F = (F += I).replace(/\0*$/g""),
    !i) {
        if (1 === o) {
            var j = 0;
            (S = F.length) && (j = F.charCodeAt(S - 1)),
            j <= 8 && (F = F.substring(0, S - j))
        }
        F = decodeURIComponent(escape(F))
    }
    return F
}

function decode1(t{
    var f = /[\t\n\f\r ]/g
    var c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    var e = (t = String(t).replace(f, "")).length;
    e % 4 == 0 && (e = (t = t.replace(/==?$/"")).length),
    (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
    for (var n, r, i = 0, o = "", a = -1; ++a < e; )
        r = c.indexOf(t.charAt(a)),
        n = i % 4 ? 64 * n + r : r,
        i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
    return o
}

function s(e{
    return o("5e5062e82f15fe4ca9d24bc5", decode1(e), 00"012345677890123"1)

}
// // 加密的数据 也是就是e
// data = "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"
// // 调用 s函数,尝试看下结果
// console.log(s(data))

代码.py

# -- coding: utf-8 --
# @Time : 2022/7/8 20:22
# @Author : 小牛刀
# @File : 代码.py
# @Software: PyCharm

import requests
import json
import execjs
from jsonpath import jsonpath

header = {

    "User-Agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
data = {
    "time_interval""",
    "tag""",
    "tag_type""",
    "province""",
    "lunci""",
    "page"1,
    "num"20,
    "unionid""",
}
url = 'https://vipapi.qimingpian.cn/DataList/productListVip'
res = requests.post(url, headers=header, data=data).text
# print(res)
result = json.loads(res)
data = result['encrypt_data']
# print(data)

with open('./code_js.js''r', encoding='utf-8'as f:
    js_code = f.read()
# compile 调用文件,call 调用js的函数 s
js_result = execjs.compile(js_code).call('s', data)
# print(js_result)
json_data = json.loads(js_result)
# print(json_data)

# 数据提取
product_list = jsonpath(json_data, "$..product")
icon_list = jsonpath(json_data, "$..icon")
yewu_list = jsonpath(json_data, "$..yewu")
print(product_list,icon_list,yewu_list)

总结:

通过这个小案例,可以了解数据在加密的情况下怎么确定数据接口,可以了解js调试的过程,从而也可以知道怎么处理类似这样的单子,其实数据取数据不难,关键是怎样解密数据。

- EOF -


  1. 放弃 Notepad++,事实证明,还有 5 款更牛逼……

  2. Python如何进行大数据分析?

  3. Python办公自动化,全网最全整理!



浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报