侧边栏壁纸
  • 累计撰写 60 篇文章
  • 累计收到 10 条评论

单一窗口js数据解密,货物申报数据爬取

2022-12-5 / 4 评论 / 2515 阅读
温馨提示:
本文最后更新于 2022-12-5,已超过半年没有更新,若内容或图片失效,请留言反馈。

本次主要讲解货物申报详情数据解密,其他模块大同小异的,本教程只允许学习交流,2024年又更新了,不过解决了

单一窗口js数据解密,解密流程很繁琐,单一窗口反debug,很麻烦,而且代码又是混淆的,看起来很吃力,你需要利用中间件把menuManger.js无限debug代码替换掉,才可以debug,

先说改menuManger.js块

把这一块改一下,你们看一下把0x145内容或者其他的内容改一下,你们看着修改

改完之后,用中间代理替换js文件,chrome插件或者fiddler软件都可以,
就可以正常debug了,

接下来说解密的事

主入口在这里

这是内容的解密函数,

function _0xf212f9(_0x3dd02e) { var _0xc944d8, _0x254483, _0x51f7b1 = new Array(); _0xc944d8 = _0x3dd02e.length; for (var _0x8061dc = 0; lx5(_0x8061dc, _0xc944d8); _0x8061dc++) lx10(_0x254483 = _0x3dd02e.charCodeAt(_0x8061dc), 65536) && lx11(_0x254483, 0x10ffff) ? (_0x51f7b1.push(lx11(_0x254483 >> 0x12, 0x7) | 0xf0), _0x51f7b1.push(lx1(lx8(_0x254483, 0xc) & 0x3f, 0x80)), _0x51f7b1.push(lx1(_0x254483 >> 0x6 & 0x3f, 0x80)), _0x51f7b1.push(63 & _0x254483 | 128)) : lx10(_0x254483, 0x800) && lx11(_0x254483, 0xffff) ? (_0x51f7b1.push(lx11(lx8(_0x254483, 0xc), 0xf) | 0xe0), _0x51f7b1.push(lx1(lx1(_0x254483 >> 0x6, 0x3f), 0x80)), _0x51f7b1.push(lx1(lx3(0x3f, _0x254483), 0x80))) : lx3(_0x254483, 0x80) && _0x254483 <= 0x7ff ? (_0x51f7b1.push(lx3(lx8(_0x254483, 0x6), 0x1f) | 0xc0), _0x51f7b1.push(lx8(63 & _0x254483, 128))) : _0x51f7b1.push(0xff & _0x254483); return _0x51f7b1;}
function sk(_0x24d4fd){ var _0x438c63, _0x54abf4, _0x55518c, _0x1a9354, _0x145e69 = new Array(4), _0x162b78 = new Array(36),_0x3cee7a= new Array(32), _0x7697e3 = 0;for (_0x145e69[0] = _0x44008d(_0x24d4fd, 0),_0x145e69[1] = _0x44008d(_0x24d4fd, 4),_0x145e69[2] = _0x44008d( _0x24d4fd, 8),_0x145e69[3] = _0x44008d(_0x24d4fd, 12),_0x162b78[0] = _0x145e69[0] ^ _0x4e6a68[0],_0x162b78[1] = _0x145e69[1] ^ _0x4e6a68[1],_0x162b78[2] = _0x145e69[2] ^ _0x4e6a68[2],_0x162b78[3] = _0x145e69[3] ^ _0x4e6a68[3]; lx5(_0x7697e3, 32); _0x7697e3++) _0x162b78[_0x7697e3 + 4] = _0x162b78[_0x7697e3] ^ (_0x438c63 = lx6(lx6(_0x162b78[lx4(_0x7697e3, 1)], _0x162b78[_0x7697e3 + 2]) ^ _0x162b78[lx4(_0x7697e3, 3)], _0x4d0c98[_0x7697e3]), _0x1a9354 = void 0, _0x55518c = new Array(4), _0x1a9354 = new Array(4), end(_0x438c63, _0x55518c, 0), _0x1a9354[0] = _0x11268a[lx3(255, _0x55518c[0])], _0x1a9354[1] = _0x11268a[lx3(255,_0x55518c[1])], _0x1a9354[2] = _0x11268a[lx3(255,_0x55518c[2])], _0x1a9354[3] = _0x11268a[lx3(255,_0x55518c[3])], lx6((_0x54abf4 = str_han(_0x1a9354, 0)) ^ _0x3818cb( _0x54abf4, 13), _0x3818cb(_0x54abf4, 23))), _0x3cee7a[_0x7697e3] = _0x162b78[_0x7697e3 + 4];return _0x3cee7a.reverse()}
 var n = []; var o = []; var f = typeof Uint8Array !== "undefined" ? Uint8Array : Array; var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for (var a = 0, u = i.length; a < u; ++a) { n[a] = i[a]; o[i.charCodeAt(a)] = a } o["-".charCodeAt(0)] = 62; o["_".charCodeAt(0)] = 63; function d(r) { var e = r.length; if (e % 4 > 0) { throw new Error("Invalid string. Length must be a multiple of 4") } return r[e - 2] === "=" ? 2 : r[e - 1] === "=" ? 1 : 0 } function l(r) { return n[r >> 18 & 63] + n[r >> 12 & 63] + n[r >> 6 & 63] + n[r & 63] } function h(r, e, t) { var n; var o = []; for (var f = e; f < t; f += 3) { n = (r[f] << 16) + (r[f + 1] << 8) + r[f + 2]; o.push(l(n)) } return o.join("") } function s(r) { var e; var t = r.length; var o = t % 3; var f = ""; var i = []; var a = 16383; for (var u = 0, d = t - o; u < d; u += a) { i.push(h(r, u, u + a > d ? d : u + a)) } if (o === 1) { e = r[t - 1]; f += n[e >> 2]; f += n[e << 4 & 63]; f += "==" } else { if (o === 2) { e = (r[t - 2] << 8) + r[t - 1]; f += n[e >> 10]; f += n[e >> 4 & 63]; f += n[e << 2 & 63]; f += "=" } } i.push(f); return i.join("") } function c(r) { return r.length * 3 / 4 - d(r) } function v(r) { var e, t, n, i, a; var u = r.length; i = d(r); a = new f(u * 3 / 4 - i); t = i > 0 ? u - 4 : u; var c = 0; for (e = 0; e < t; e += 4) { n = o[r.charCodeAt(e)] << 18 | o[r.charCodeAt(e + 1)] << 12 | o[r.charCodeAt(e + 2)] << 6 | o[r.charCodeAt(e + 3)]; a[c++] = n >> 16 & 255; a[c++] = n >> 8 & 255; a[c++] = n & 255 } if (i === 2) { n = o[r.charCodeAt(e)] << 2 | o[r.charCodeAt(e + 1)] >> 4; a[c++] = n & 255 } else { if (i === 1) { n = o[r.charCodeAt(e)] << 10 | o[r.charCodeAt(e + 1)] << 4 | o[r.charCodeAt(e + 2)] >> 2; a[c++] = n >> 8 & 255; a[c++] = n & 255 } } return a } function d(r) { var e = r.length; if (e % 4 > 0) { throw new Error("Invalid string. Length must be a multiple of 4") } return r[e - 2] === "=" ? 2 : r[e - 1] === "=" ? 1 : 0 }

只提供部分代码参考,后面还要转义,解密出来要转义两次才可以看到正常的文字。
最后看结果

本教程只允许学习交流,不允许做违法犯罪的事,

2024年更新了解密内容,改动的地方挺多的,挺大的
比较多的是这一块内容

大家慢慢学习吧
以后博主会慢慢更新爬虫项目,

评论一下?

OωO
取消
    1. 头像
      netprawn
      板凳
      你好,可以发一个联系方式吗?有问题请教。
      回复
      1. 头像
        李大叔 管理员
        @netprawn:a843012880
        回复
    1. 头像
      Netprawn
      沙发
      博主方便的话可以加一下联系方式吗?QQ:4428931.
      回复
      1. 头像
        李大叔 管理员
        @Netprawn:a843012880
        回复