产业政策大数据 spolicy 爬虫逆向 解密 Py代码获取数据 较难 2023版

本文主要是介绍产业政策大数据 spolicy 爬虫逆向 解密 Py代码获取数据 较难 2023版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.spolicy.com/detail?id=64e42c4c46da919979b41299

目录

1 调试

1.1 f12无效的调试

1.2 用hook过无限DEBUG

2 加密位置确定

2.1 在XHR里面进行搜索定位

2.2 观察明文到密文

3 最终代码


1 调试

1.1 f12无效的调试

该网页直接按键盘f12无调试页面出来,chrome浏览器需要鼠标右键随后点击“检查"选项进入调试页面

1.2 用hook过无限DEBUG

进入调试页面后会有一个无限DEBUG

我们输入如下hook代码过点击三角过掉DEBUG

let AAA=Function.prototype.constructor


Function.prototype.constructor=function(x){
    console.log(x)
    if(X!="debugger") {
        return AAA(x)
    };
    return function(){};
}

2 加密位置确定

2.1 在XHR里面进行搜索定位

这里我们发送的报文r已经是加密后的一串数字了,我们需要找到原始加密报文

经过点击多次单步调试后,发现会在一个axiosInstance处停留

经过查看混淆的代码发现他是一个response拦截器

我们需要找到requeset的拦截器,可以看到这里有8个 axiosInstance,我们在可疑处打上断点

我们可以看到在request之处断住

2.2 观察明文到密文

接下来一步很重要,

我们需要关闭当前页面,重新打开页面,重新过无限DEBUGGER后断到request这步,我们观察最右边的e变量,现在e变量还没有data属性 

我们再次点击一下三角按钮,可以看到出现一个data属性,这个就是我们要加密的数据

多次点击单步调试发现在此处data会变成密文,这里无法跟栈,我们需要重新debug调试

重新调试时候我们发现如下这步是加密步骤

我们还原后是,我们需要获取f['encode']方法

f['encode'](data)['finish']()['slice']()

我们进入方法

这里需要过w这个加密方法 

我们点击进入

进入以后是一段webpack我们扣下这段webpack 

3 最终代码

代码结构如下 我们需要补一个环境commonjsGlobal

最终js代码

window = global
commonjsGlobal = windowvar _temp
!function(g) {var r, e, t, i;r = {1: [function(e, t, n) {t.exports = function(e, t) {for (var n = Array(arguments.length - 1), o = 0, r = 2, i = !0; r < arguments.length; )n[o++] = arguments[r++];return new Promise((function(r, s) {n[o] = function(e) {if (i)if (i = !1,e)s(e);else {for (var t = Array(arguments.length - 1), n = 0; n < t.length; )t[n++] = arguments[n];r.apply(null, t)}};try {e.apply(t || null, n)} catch (a) {i && (i = !1,s(a))}}))}}, {}],2: [function(e, t, n) {n.length = function(e) {var t = e.length;if (!t)return 0;for (var n = 0; 1 < --t % 4 && "=" == (e[0 | t] || ""); )++n;return Math.ceil(3 * e.length) / 4 - n};for (var o = Array(64), r = Array(123), i = 0; i < 64; )r[o[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;n.encode = function(e, t, n) {for (var r, i = null, s = [], a = 0, c = 0; t < n; ) {var l = e[t++];switch (c) {case 0:s[a++] = o[l >> 2],r = (3 & l) << 4,c = 1;break;case 1:s[a++] = o[r | l >> 4],r = (15 & l) << 2,c = 2;break;case 2:s[a++] = o[r | l >> 6],s[a++] = o[63 & l],c = 0}8191 < a && ((i = i || []).push(String.fromCharCode.apply(String, s)),a = 0)}return c && (s[a++] = o[r],s[a++] = 61,1 === c && (s[a++] = 61)),i ? (a && i.push(String.fromCharCode.apply(String, s.slice(0, a))),i.join("")) : String.fromCharCode.apply(String, s.slice(0, a))};var s = "invalid encoding";n.decode = function(e, t, n) {for (var o, i = n, a = 0, c = 0; c < e.length; ) {var l = e.charCodeAt(c++);if (61 == l && 1 < a)break;if ((l = r[l]) === g)throw Error(s);switch (a) {case 0:o = l,a = 1;break;case 1:t[n++] = o << 2 | (48 & l) >> 4,o = l,a = 2;break;case 2:t[n++] = (15 & o) << 4 | (60 & l) >> 2,o = l,a = 3;break;case 3:t[n++] = (3 & o) << 6 | l,a = 0}}if (1 === a)throw Error(s);return n - i},n.test = function(e) {return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}}, {}],3: [function(e, t, n) {(t.exports = function e(t, n) {"string" == typeof t && (n = t,t = g);var o = [];function r(t) {if ("string" != typeof t) {var n = i();if (e.verbose && console.log("codegen: " + n),n = "return " + n,t) {for (var s = Object.keys(t), a = Array(s.length + 1), c = Array(s.length), l = 0; l < s.length; )a[l] = s[l],c[l] = t[s[l++]];return a[l] = n,Function.apply(null, a).apply(null, c)}return Function(n)()}for (var u = Array(arguments.length - 1), d = 0; d < u.length; )u[d] = arguments[++d];if (d = 0,t = t.replace(/%([%dfijs])/g, (function(e, t) {var n = u[d++];switch (t) {case "d":case "f":return "" + +("" + n);case "i":return "" + Math.floor(n);case "j":return JSON.stringify(n);case "s":return "" + n}return "%"})),d !== u.length)throw Error("parameter count mismatch");return o.push(t),r}function i(e) {return "function " + (e || n || "") + "(" + (t && t.join(",") || "") + "){\n  " + o.join("\n  ") + "\n}"}return r.toString = i,r}).verbose = !1}, {}],4: [function(e, t, n) {function o() {this.t = {}}(t.exports = o).prototype.on = function(e, t, n) {return (this.t[e] || (this.t[e] = [])).push({fn: t,ctx: n || this}),this},o.prototype.off = function(e, t) {if (e === g)this.t = {};else if (t === g)this.t[e] = [];elsefor (var n = this.t[e], o = 0; o < n.length; )n[o].fn === t ? n.splice(o, 1) : ++o;return this},o.prototype.emit = function(e) {var t = this.t[e];if (t) {for (var n = [], o = 1; o < arguments.length; )n.push(arguments[o++]);for (o = 0; o < t.length; )t[o].fn.apply(t[o++].ctx, n)}return this}}, {}],5: [function(e, t, n) {t.exports = i;var o = e(1), r = e(7)("fs");function i(e, t, n) {return t = "function" == typeof t ? (n = t,{}) : t || {},n ? !t.xhr && r && r.readFile ? r.readFile(e, (function(o, r) {return o && "undefined" != typeof XMLHttpRequest ? i.xhr(e, t, n) : o ? n(o) : n(null, t.binary ? r : r.toString("utf8"))})) : i.xhr(e, t, n) : o(i, this, e, t)}i.xhr = function(e, t, n) {var o = new XMLHttpRequest;o.onreadystatechange = function() {if (4 !== o.readyState)return g;if (0 !== o.status && 200 !== o.status)return n(Error("status " + o.status));if (t.binary) {if (!(e = o.response))for (var e = [], r = 0; r < o.responseText.length; ++r)e.push(255 & o.responseText.charCodeAt(r));return n(null, "undefined" != typeof Uint8Array ? new Uint8Array(e) : e)}return n(null, o.responseText)},t.binary && ("overrideMimeType"in o && o.overrideMimeType("text/plain; charset=x-user-defined"),o.responseType = "arraybuffer"),o.open("GET", e),o.send()}}, {1: 1,7: 7}],6: [function(e, t, n) {function o(e) {function t(e, t, n, o) {var r = t < 0 ? 1 : 0;e(0 === (t = r ? -t : t) ? 0 < 1 / t ? 0 : 2147483648 : isNaN(t) ? 2143289344 : 34028234663852886e22 < t ? (r << 31 | 2139095040) >>> 0 : t < 11754943508222875e-54 ? (r << 31 | Math.round(t / 1401298464324817e-60)) >>> 0 : (r << 31 | 127 + (r = Math.floor(Math.log(t) / Math.LN2)) << 23 | 8388607 & Math.round(t * Math.pow(2, -r) * 8388608)) >>> 0, n, o)}function n(e, t, n) {return t = 2 * ((e = e(t, n)) >> 31) + 1,n = e >>> 23 & 255,e &= 8388607,255 == n ? e ? NaN : 1 / 0 * t : 0 == n ? 1401298464324817e-60 * t * e : t * Math.pow(2, n - 150) * (8388608 + e)}function o(e, t, n) {d[0] = e,t[n] = f[0],t[n + 1] = f[1],t[n + 2] = f[2],t[n + 3] = f[3]}function c(e, t, n) {d[0] = e,t[n] = f[3],t[n + 1] = f[2],t[n + 2] = f[1],t[n + 3] = f[0]}function l(e, t) {return f[0] = e[t],f[1] = e[t + 1],f[2] = e[t + 2],f[3] = e[t + 3],d[0]}function u(e, t) {return f[3] = e[t],f[2] = e[t + 1],f[1] = e[t + 2],f[0] = e[t + 3],d[0]}var d, f, p, h, m;function v(e, t, n, o, r, i) {var s, a = o < 0 ? 1 : 0;0 === (o = a ? -o : o) ? (e(0, r, i + t),e(0 < 1 / o ? 0 : 2147483648, r, i + n)) : isNaN(o) ? (e(0, r, i + t),e(2146959360, r, i + n)) : 17976931348623157e292 < o ? (e(0, r, i + t),e((a << 31 | 2146435072) >>> 0, r, i + n)) : o < 22250738585072014e-324 ? (e((s = o / 5e-324) >>> 0, r, i + t),e((a << 31 | s / 4294967296) >>> 0, r, i + n)) : (e(4503599627370496 * (s = o * Math.pow(2, -(o = 1024 === (o = Math.floor(Math.log(o) / Math.LN2)) ? 1023 : o))) >>> 0, r, i + t),e((a << 31 | o + 1023 << 20 | 1048576 * s & 1048575) >>> 0, r, i + n))}function g(e, t, n, o, r) {return t = e(o, r + t),r = 2 * ((o = e(o, r + n)) >> 31) + 1,t = 4294967296 * (1048575 & o) + t,2047 == (n = o >>> 20 & 2047) ? t ? NaN : 1 / 0 * r : 0 == n ? 5e-324 * r * t : r * Math.pow(2, n - 1075) * (t + 4503599627370496)}function W(e, t, n) {p[0] = e,t[n] = h[0],t[n + 1] = h[1],t[n + 2] = h[2],t[n + 3] = h[3],t[n + 4] = h[4],t[n + 5] = h[5],t[n + 6] = h[6],t[n + 7] = h[7]}function y(e, t, n) {p[0] = e,t[n] = h[7],t[n + 1] = h[6],t[n + 2] = h[5],t[n + 3] = h[4],t[n + 4] = h[3],t[n + 5] = h[2],t[n + 6] = h[1],t[n + 7] = h[0]}function b(e, t) {return h[0] = e[t],h[1] = e[t + 1],h[2] = e[t + 2],h[3] = e[t + 3],h[4] = e[t + 4],h[5] = e[t + 5],h[6] = e[t + 6],h[7] = e[t + 7],p[0]}function C(e, t) {return h[7] = e[t],h[6] = e[t + 1],h[5] = e[t + 2],h[4] = e[t + 3],h[3] = e[t + 4],h[2] = e[t + 5],h[1] = e[t + 6],h[0] = e[t + 7],p[0]}return "undefined" != typeof Float32Array ? (d = new Float32Array([-0]),m = 128 === (f = new Uint8Array(d.buffer))[3],e.writeFloatLE = m ? o : c,e.writeFloatBE = m ? c : o,e.readFloatLE = m ? l : u,e.readFloatBE = m ? u : l) : (e.writeFloatLE = t.bind(null, r),e.writeFloatBE = t.bind(null, i),e.readFloatLE = n.bind(null, s),e.readFloatBE = n.bind(null, a)),"undefined" != typeof Float64Array ? (p = new Float64Array([-0]),m = 128 === (h = new Uint8Array(p.buffer))[7],e.writeDoubleLE = m ? W : y,e.writeDoubleBE = m ? y : W,e.readDoubleLE = m ? b : C,e.readDoubleBE = m ? C : b) : (e.writeDoubleLE = v.bind(null, r, 0, 4),e.writeDoubleBE = v.bind(null, i, 4, 0),e.readDoubleLE = g.bind(null, s, 0, 4),e.readDoubleBE = g.bind(null, a, 4, 0)),e}function r(e, t, n) {t[n] = 255 & e,t[n + 1] = e >>> 8 & 255,t[n + 2] = e >>> 16 & 255,t[n + 3] = e >>> 24}function i(e, t, n) {t[n] = e >>> 24,t[n + 1] = e >>> 16 & 255,t[n + 2] = e >>> 8 & 255,t[n + 3] = 255 & e}function s(e, t) {return (e[t] | e[t + 1] << 8 | e[t + 2] << 16 | e[t + 3] << 24) >>> 0}function a(e, t) {return (e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]) >>> 0}t.exports = o(o)}, {}],7: [function(t, i, n) {function r(t) {try {var i = eval("require")(t);if (i && (i.length || Object.keys(i).length))return i} catch (t2) {}return null}i.exports = r}, {}],8: [function(e, t, n) {var o = (n = n).isAbsolute = function(e) {return /^(?:\/|\w+:)/.test(e)}, r = n.normalize = function(e) {var t = (e = e.replace(/\\/g, "/").replace(/\/{2,}/g, "/")).split("/"), n = o(e);e = "";n && (e = t.shift() + "/");for (var r = 0; r < t.length; )".." === t[r] ? 0 < r && ".." !== t[r - 1] ? t.splice(--r, 2) : n ? t.splice(r, 1) : ++r : "." === t[r] ? t.splice(r, 1) : ++r;return e + t.join("/")};n.resolve = function(e, t, n) {return n || (t = r(t)),!o(t) && (e = (e = n ? e : r(e)).replace(/(?:\/|^)[^/]+$/, "")).length ? r(e + "/" + t) : t}}, {}],9: [function(e, t, n) {t.exports = function(e, t, n) {var o = n || 8192, r = o >>> 1, i = null, s = o;return function(n) {return n < 1 || r < n ? e(n) : (o < s + n && (i = e(o),s = 0),n = t.call(i, s, s += n),7 & s && (s = 1 + (7 | s)),n)}}}, {}],10: [function(e, t, n) {n.length = function(e) {for (var t, n = 0, o = 0; o < e.length; ++o)(t = e.charCodeAt(o)) < 128 ? n += 1 : t < 2048 ? n += 2 : 55296 == (64512 & t) && 56320 == (64512 & e.charCodeAt(o + 1)) ? (++o,n += 4) : n += 3;return n},n.read = function(e, t, n) {if (n - t < 1)return "";for (var o, r = null, i = [], s = 0; t < n; )(o = e[t++]) < 128 ? i[s++] = o : 191 < o && o < 224 ? i[s++] = (31 & o) << 6 | 63 & e[t++] : 239 < o && o < 365 ? (o = ((7 & o) << 18 | (63 & e[t++]) << 12 | (63 & e[t++]) << 6 | 63 & e[t++]) - 65536,i[s++] = 55296 + (o >> 10),i[s++] = 56320 + (1023 & o)) : i[s++] = (15 & o) << 12 | (63 & e[t++]) << 6 | 63 & e[t++],8191 < s && ((r = r || []).push(String.fromCharCode.apply(String, i)),s = 0);return r ? (s && r.push(String.fromCharCode.apply(String, i.slice(0, s))),r.join("")) : String.fromCharCode.apply(String, i.slice(0, s))},n.write = function(e, t, n) {for (var o, r, i = n, s = 0; s < e.length; ++s)(o = e.charCodeAt(s)) < 128 ? t[n++] = o : (o < 2048 ? t[n++] = o >> 6 | 192 : (55296 == (64512 & o) && 56320 == (64512 & (r = e.charCodeAt(s + 1))) ? (++s,t[n++] = (o = 65536 + ((1023 & o) << 10) + (1023 & r)) >> 18 | 240,t[n++] = o >> 12 & 63 | 128) : t[n++] = o >> 12 | 224,t[n++] = o >> 6 & 63 | 128),t[n++] = 63 & o | 128);return n - i}}, {}],11: [function(e, t, n) {var o = e(14), r = e(33);function i(e, t, n, r) {if (t.resolvedType)if (t.resolvedType instanceof o) {e("switch(d%s){", r);for (var i = t.resolvedType.values, s = Object.keys(i), a = 0; a < s.length; ++a)t.repeated && i[s[a]] === t.typeDefault && e("default:"),e("case%j:", s[a])("case %i:", i[s[a]])("m%s=%j", r, i[s[a]])("break");e("}")} elsee('if(typeof d%s!=="object")', r)("throw TypeError(%j)", t.fullName + ": object expected")("m%s=types[%i].fromObject(d%s)", r, n, r);else {var c = !1;switch (t.type) {case "double":case "float":e("m%s=Number(d%s)", r, r);break;case "uint32":case "fixed32":e("m%s=d%s>>>0", r, r);break;case "int32":case "sint32":case "sfixed32":e("m%s=d%s|0", r, r);break;case "uint64":c = !0;case "int64":case "sint64":case "fixed64":case "sfixed64":e("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j", r, r, c)('else if(typeof d%s==="string")', r)("m%s=parseInt(d%s,10)", r, r)('else if(typeof d%s==="number")', r)("m%s=d%s", r, r)('else if(typeof d%s==="object")', r)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", r, r, r, c ? "true" : "");break;case "bytes":e('if(typeof d%s==="string")', r)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", r, r, r)("else if(d%s.length)", r)("m%s=d%s", r, r);break;case "string":e("m%s=String(d%s)", r, r);break;case "bool":e("m%s=Boolean(d%s)", r, r)}

这篇关于产业政策大数据 spolicy 爬虫逆向 解密 Py代码获取数据 较难 2023版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243340

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n