添加测试文件以及解密文件

master
刘东琪 8 months ago
parent efbd7cbb05
commit a7dc9e132c
  1. 46
      routes/service/FpService.js
  2. 325
      routes/service/static/fp/fp-crypt.js
  3. 17
      test/fp/chunk-npjg4qgmmrfrjl3r.js
  4. 512
      test/fp/chunk-vendors.5dea4a66.js
  5. 2
      test/fp/index.03e16cb9.js
  6. 2
      test/fp/invoice-business.html
  7. 4
      test/fp/test_fp_fetch.js
  8. 146
      test/fp/test_ueryFpjcxx.js

@ -3,11 +3,31 @@ const {jsdomFromText, browser} = require("sdenv");
const {Script} = require("node:vm");
const fs = require("node:fs");
const path = require("node:path");
const FpCrypt = require("./static/fp/fp-crypt");
class FpService {
js = fs.readFileSync(path.resolve(__dirname, './static/fp/chunk-npjg4qgmmrfrjl3r.js'), 'utf8').toString();
/**
*
* @param url
* @param param
* @param html
* @param loginCookieStr
* @returns {Promise<*>}
*/
async get_los(url, param, html, loginCookieStr) {
let baseUrl = new URL(url).origin;
let urlPath = url.replace(baseUrl, "");
let headers = {};
if (param != null || param !== "") {
let fpCrypt = new FpCrypt(loginCookieStr);
let $e = fpCrypt.$e(param, urlPath);
param = JSON.stringify({'jmbw': $e["enVal"]});
headers['security-mes-key'] = $e["enMesKey"]
}
console.time('js执行时长')
const [jsDom, cookieJar] = jsdomFromText({
url: `${baseUrl}/invoice-query/invoice-query`,
@ -36,8 +56,8 @@ class FpService {
window.$dunm.$byno();
}
let los = window[window["_d_ts"]](url.replace(baseUrl,""), param);
console.log(url.replace(baseUrl,""))
let los = window[window["_d_ts"]](urlPath, param);
console.log(urlPath)
let cookies = cookieJar.getCookieStringSync(baseUrl);
los["cookies"] = cookies
console.log('js执行完成,返回结果 ', los)
@ -46,13 +66,23 @@ class FpService {
console.timeEnd('js执行时长')
return los
}
random_32(param) {
var n, i,e=null,
a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"["split"](""), c = [];
if (e = e || a["length"], 32) for (n = 0; n < 32; n++) c[n] = a[0 | (Math["random"]() * e)]; else for (c[8] = c[13] = c[18] = c[23] = "-", c[14] = "4", n = 0; (n < 36); n++) c[n] || (i = 0 | (16 * Math["random"]()), c[n] = a[19 === n ? 8 | (3 & i) : i]);
var n, i, e,
a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), c = [];
if (e = a["length"], 32) {
for (n = 0; n < 32; n++) {
c[n] = a[0 | Math.random() * e];
}
} else {
for (c[8] = c[13] = c[18] = c[23] = "-", c[14] = "4", n = 0; (n < 36); n++) {
c[n] || (i = 0 | 16 * Math.random(), c[n] = a[19 === n ? 8 | (3 & i) : i]);
}
}
console.log(`生成随机 ${e} 位字符串`, c["join"](""))
return c["join"]("")
}
get_cookie(key, loginCookieStr) {
var key_list = loginCookieStr.split("; ")
for (var k = 0; key_list["length"] > k; k++) {
@ -61,6 +91,7 @@ class FpService {
}
}
}
reverse_str(t, loginCookieStr) {
var i = this.get_cookie("dzfp-ssotoken", loginCookieStr), r = this.qe(i),
c = t.split('').reverse().join("") + i.split('').reverse().join(""),
@ -73,6 +104,7 @@ class FpService {
console.log('倒叙处理字符返回20位', res)
return res;
}
qe(n) {
null === n && (n = "");
var o = n["match"]("[0-9]+");
@ -82,15 +114,18 @@ class FpService {
}
return o
}
get_url(url) {
return url + "?"
}
hex_md5(reverse_str, url) {
var strlist = reverse_str + "+" + this.get_url(url)
var res = CryptoJS.MD5(strlist).toString()
console.log('md5:', res)
return res
}
aes_encrypt(value, key) {
const srcs = CryptoJS.enc.Utf8.parse(value);
const key1 = CryptoJS.enc.Utf8.parse(key);
@ -102,6 +137,7 @@ class FpService {
return cipherTxt
}
}
fp = new FpService()
fp.random_32()
fp.get_cookie("dzfp-ssotoken", "tpass_tct8zta97w6c46zdt9zc2648227df5z2=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjA3NGE2NzEzZGE2ZjQ0YTFiMjA3ODRhZGM0MmUxNmM5In0.zgO2rco0oWhTgOX6tVbZVoLI_qysOfJ1fdlcghe8KyI3iUmFV_IuHvZINQWeSmKesyefAyOxWflWsbSzQiiOgw; oauth2_referer=tpass.zhejiang.chinatax.gov.cn; dzfp-ssotoken=4fa8538cee014e3b84f88ead04610dea; SSO_SECURITY_CHECK_TOKEN=bd1e0dc3898d4239af9c3b11dc8b7983; lzkqow39189=9ef06defe6d34ad7aba79ae8bbe419f8; DTSwUOYx7MiWN=dcf74815ad6d7fef22601131e58a180b8a80b714fe9224c72c6b881b3f42d8b3")

@ -0,0 +1,325 @@
const CryptoJS = require('crypto-js');
logger = console.info;
class FpCrypt {
cookie = "";
publicKey = {
publicKey: "", tokenKey: ""
};
constructor(cookies, publicKey) {
this.cookie = cookies
if (publicKey) {
this.publicKey = publicKey
}
}
/**
* 处理 url 后缀
* @param t url
* @param e
* @returns {*}
*/
handleSuffix = function (t, e) {
var a = '1|4|2|0|3'['split']("|"),
c = 0, s, l, f, d, p, h;
if (!t) return t;
if (t['indexOf']('cssSecurity/v1/getPublicKey') > -1) return t;
s = t;
l = this.Re();
f = l['publicKey'];
d = l['tokenKey'];
h = l['urlType'];
p = l['urlYzm'];
s = this.He(s, d, 0, e)
if (p) {
var u = (new Date)['valueOf']();
s += '&urls='['concat'](u)
}
logger(`处理url后缀${t} 完成返回${s}`)
return s;
// while (1) {
// switch (a[c++]) {
// case "0":
// // if (h && ("" !== h) && "1" !== h && (1 !== h))
// // ("2" === h) && (s = function (t, e, r) {
// // var a = t;
// // if (t['indexOf']('urlyzm=') > -1) return t;
// // if (t = this.He(t), r) {
// // var c = t["indexOf"]("?"), u = t['substring']((c + 1)), s = u['indexOf']('ruuid='),
// // l = u['substring'](s + 6);
// // l = l['substring'](0, l['indexOf']("&"));
// // var f = t['substring'](0, c),
// // d = t["indexOf"]("?") > -1 ? t['substring'](0, t['indexOf']("?")) : t;
// // t = Ye(u, d);
// // t = ""["concat"](f, '?urlyzm=')['concat'](encodeURIComponent(t), '&ruuid=')['concat'](l)
// // }
// // return t
// // }(s, 0, f));
// // else
// s = this.He(s, d, 0, e)
// if (p) {
// var u = (new Date)['valueOf']();
// s += '&urls='['concat'](u)
// }
// logger(`处理url后缀${t} 完成返回${s}`)
// return s;
// case "1":
// if (!t) return t;
// continue;
// case "2":
// s = t;
// l = this.Re();
// f = l['publicKey'];
// d = l['tokenKey'];
// h = l['urlType'];
// p = l['urlYzm'];
// continue;
// case "3":
// logger(`处理url后缀${t} 完成返回${s}`)
// return s;
// case "4":
// if (t['indexOf']('cssSecurity/v1/getPublicKey') > -1) return t;
// continue
// }
// break
// }
}
/**
* 处理 Param
* @param t
* @param e
* @returns {{mesKey: string, enMesKey: string, enVal}}
*/
handleParam(t, e) {
var l = {
mesKey: "", enMesKey: "", enVal: t
};
if (t != null && t !== '') {
l['enVal'] = this.Ye(t, e);
}
logger(`处理返回`, l)
return l
}
He (t, e, n, o) {
var s = t;
if (s["indexOf"]("urlyzm=") > -1) return s;
s = this.Ke(s);
var l, f = (new Date)['valueOf'](),
d = (this.qe()["num"] % 2) === 0 ? (50 * Math['random'](1)) : (49 * Math[c(2638)]()) + 51;
if((d >= 0) && (d <= 50)){
l = this.Qs(f)
}
// (d >= 0) && (d <= 50) ? l = this.Qs(f) : (d >= 51) && d <= 100 && (l = function (t, e) {
// // TODO: 偷懒
// return null;
// // var n = c;
// // if ('PwUOp' === 'PwUOp') {
// // for (var r = this.qe(), o = r[n(3123)], s = r[n(2049)], l = i[n(5528)](i[n(2694)](a, ""["concat"](t)[n(619)](""))["join"](""), a(""["concat"](s)[n(619)](""))[n(739)]("")), f = "", d = 0; i[n(3114)](d, l[n(6147)]); d += o) {
// // var h = l[n(6370)](d, d + o);
// // f += i[n(2694)](a, h[n(619)](""))[n(739)]("")
// // }
// // var p = "", v = e;
// // if (e) for (var b = 0; i[n(3114)](b, v[n(6147)]); b += o) {
// // var g = v["substring"](b, i[n(5528)](b, o));
// // p += a(g["split"](""))["join"]("")
// // } else p = i[n(5434)];
// // return p = i[n(2694)](a, ""['concat'](p)[n(619)](""))[n(739)](""), i[n(5528)](i[n(5528)](i[n(5528)](f[n(6370)](0, 5), p[n(6370)](5, 10)), f[n(6370)](15, 20)), p["substring"](20, 25))
// // }
// // for (var m = _0x34c263[_0x383cd9], y = u[n(5694)](_0x30e1f9, 1); y < _0x181e94["length"] && u[n(4847)](m, _0x4913da);) m *= _0x12c36b[y++];
// // for (m = _0x469f9b[n(1024)](m); u["tKkZS"](_0x4bdcfe, y);) if (u[n(5152)](u["wSsxC"](m, _0x4de108[_0x8b459++]), 0)) return !1
// }(f, e));
var h = s['indexOf']("?") === (s["length"] - 1) ? "" : s['indexOf']("?") > -1 ? "&" : "?",
p = s += ""['concat'](h, "ruuid=")['concat'](f);
// if (o) {
// var v = p['split']("?")['splice'](1);
// for (var b in v['map']((function (t) {
// return t["split"]("=")[0]
// })), o) if (!v["includes"](""["concat"](b))) if (i[c(2228)](i[c(315)], c(6715))) _0x2cc2bd("crypto"); else {
// var g = b["charAt"](0)['toUpperCase']();
// b['length'] > 1 && (g += b['slice'](1));
// var m = o[b];
// i[c(2228)](void 0, m) && (p += "&"["concat"](g, "=")["concat"](m))
// }
// }
var y = ""["concat"](l, "+")["concat"](p), x = this.he(y);
return s + ""["concat"](s["indexOf"]("?") ? "&" : "?", "urlyzm=")["concat"](encodeURIComponent(x))
}
Re() {
return this.publicKey;
}
Qs(t) {
var r = this.qe(), o = r['num'], u = r["tokenVal"],
s = (this.a(""['concat'](t)['split'](""))['join']("") + this.a(""['concat'](u)['split'](""))["join"]("")),
l = "";
for (var f = 0; (f < s['length']); f += o) {
var v = s["substring"](f, (f + o));
l += this.a(v['split'](""))['join']("")
}
return (((l["substring"](0, 5) + l['substring'](15, 20)) + l['substring'](5, 10)) + l['substring'](20, 25))
};
Ye(t, e) {
var o = this.ke(32), a = "".concat(o).concat(t), c = this.Ue("", e);
return this.de(a, c)
}
ke(t, e) {
var n, i, a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), c = [];
if (e = e || a.length, t) for (n = 0; n < t; n++) c[n] = a[0 | (Math["random"]() * e)]; else for (c[8] = c[13] = c[18] = c[23] = "-", c[14] = "4", n = 0; (n < 36); n++) c[n] || (i = 0 | (16 * Math["random"]()), c[n] = a[19 === n ? 8 | (3 & i) : i]);
logger(`生成随机 ${e} 位字符串`, c["join"](""))
return c["join"]("")
}
de(t, e) {
var o = this.le(e), a = this.le(t);
var res = CryptoJS.AES.encrypt(a, o, {
mode: CryptoJS.mode.ECB, //ECB模式
padding: CryptoJS.pad.Pkcs7 //padding处理
}).toString();
logger(`AES 加密:${t},${e} 加密所得${res}`)
return res;
}
le(t) {
return CryptoJS.enc.Utf8.parse(t)
}
Ue(t, e) {
var c = this.rt(t), u = this.Ke(e);
c = "".concat(c, "+").concat(u)
return this.he(c)
}
rt(t) {
var n = this.qe(), r = n["num"], i = n["tokenVal"],
c = this.a(""["concat"](t)["split"](""))["join"]("") + this.a(""["concat"](i)["split"](""))["join"](""),
u = "";
for (var s = 0; (s < c["length"]); s += r) {
var l = c["substring"](s, s + r);
u += this.a(l["split"](""))["join"]("")
}
var res = u["substring"](0, 20);
logger('倒叙处理字符返回20位', res)
return res;
}
Ke(t) {
var n = "6|5|4|3|0|1|2"["split"]("|"), o = 0;
while (1) {
switch (n[o++]) {
case "0":
(s["length"] > 1) && (f = s[0], l = s[1]["split"]("&"));
continue;
case "1":
for (var a = 0; a < l["length"]; a++) {
var c = l[a], u = c.split("=");
("t" !== u[0]) && "urlyzm" !== u[0] && "ruuid" !== u[0] && (f += "".concat(f.includes("?") ? "&" : "?").concat(c))
}
continue;
case "2":
(-1 === f.indexOf("?")) && (f += "?");
logger(`处理url后缀${t}完成返回${f}`)
return f;
case "3":
var s = t["split"]("?"), l = [];
continue;
case "4":
(0 !== f["indexOf"]("/")) && (f += "/");
continue;
case "5":
var f = t;
continue;
case "6":
if ("" === t || null == t) {
return t;
}
continue
}
break
}
}
he(t) {
let res = CryptoJS.MD5(t).toString();
logger('生成32位小写md5', t, res)
return res
}
qe() {
var e = this.Le(), n = this.Ae(e);
null === n && (n = "");
var o = n["match"]("[0-9]+");
if ((null === o)) {
o = 3;
} else {
var a = o["index"];
o = parseInt(n["substring"](a, (a + 1)), 10) + 3
}
return {
num: o, tokenVal: n
}
}
Le() {
var e = this.Ae("security-token-key");
if (!e) {
var a = this.Ae('lsmhToken');
e = a && ('lsmhToken' === a) ? 'SSOTicket' : 'dzfp-ssotoken'
}
return e
};
Ae(t) {
var n = "4|2|1|3|0"["split"]("|"), i = 0,o,l,s;
while (1) {
switch (n[i++]) {
case "0":
return null;
case "1":
o = s["indexOf"](l);
continue;
case "2":
l += "=";
continue;
case "3":
if ((-1 !== o)) {
var a = (o + l["length"]), c = s.indexOf(";", a);
(-1 === c) && (c = s.length);
var u = s.substring(a, c);
var res = unescape(u);
logger('获取token', t, '16进制解码', res)
return res;
}
continue;
case "4":
// todo: 这里获取 cookie
s = this.cookie;
l = JSON["parse"](JSON["stringify"](t));
continue
}
break
}
};
a(t) {
return t.reverse()
};
}
// let fpCrypt = new FpCrypt("oauth2_referer=dppt.hubei.chinatax.gov.cn; dzfp-ssotoken=37c347d5ab014bacb418d7756b9e7ee1; SSO_SECURITY_CHECK_TOKEN=91081171bc604d16910500c4982e74ea; c_time=12; lzkqow39189=c6edeb37685b423c8298eaa8e1b41097; DTSwUOYx7MiWN=5c199c6d5d4fda3505876d98a7e173007f4ab2ae661119adf9143257d71d06e5; lzkqow38189=1727098216617; MKls83gqduGS=e4ec10654056af2f2641b3ce60f124ee7cc607e9ac44bb8b86b9e6d5879ce1c3c7b827862a2ff46be48061c039dccddf");
// fpCrypt.handleParam('{"gjbq": "1","fpztDm": ["01","02","03","04"],"fplyDm": "0","fplxDm": [],"kprqq": "2024-09-08","kprqz": "2024-09-24","tfrqq": "2024-09-08","tfrqz": "2024-09-24","sflzfp": "","dtBz": "N","pageNumber": 1,"pageSize": 20}',
// "/szzhzz/qlfpcx/v1/queryFpjcxx?t=1727101152631")
// let handleSuffix = fpCrypt.handleSuffix("/szzhzz/qlfpcx/v1/queryFpjcxx?t=1727115438241");
// console.log(handleSuffix)
module.exports = FpCrypt

@ -2975,6 +2975,7 @@ logger = console.info;
// xhr 请求?
var _0x34f507 = _0x2e5698(function (_0x308b47) {
logger('xhr 请求 接收', _0x308b47)
var _0x4b8bab = this["xhr"];
_0x308b47 = _0x308b47 || _0x4b8bab["config"];
_0x4b8bab["withCredentials"] = _0x308b47["withCredentials"];
@ -3807,7 +3808,7 @@ logger = console.info;
_0x4692b9 = _0xe54f04["lW"]["from"]((_0x5d1268 ? "04" : '') + (0 === _0x5b85c5 ? _0x236d2 + _0x123c57 + _0x2a920d : _0x236d2 + _0x2a920d + _0x123c57), "hex");
return _0x23624e ? _0x4692b9["toString"](_0x23624e) : _0x497813()(_0x4692b9);
}, "decrypt": function (_0x1dcc90, _0x57cd19, _0x2b7c30) {
logger('decrypt 入参 ', _0x1dcc90, _0x57cd19, _0x2b7c30)
// logger('decrypt 入参 ', _0x1dcc90, _0x57cd19, _0x2b7c30)
var _0x500689 = _0x2b7c30 || {}, _0x275313 = _0x500689["mode"],
_0x3ceb51 = void (0) === _0x275313 ? 1 : _0x275313, _0x38d0f4 = _0x500689["outputEncoding"],
_0x3c013e = _0x500689["pc"];
@ -3823,7 +3824,7 @@ logger = console.info;
_0x5fd65d = new _0x2c2f9a[("BigInteger")](_0x20430d["toString"]("hex"), 16)["xor"](new _0x2c2f9a["BigInteger"](_0x2b932f["toString"]("hex"), 16))["toString"](16),
_0x1e6951 = _0x523d76(_0x21a9eb + _0x5fd65d + _0x544b37, "hex", "hex") === _0x454060["toString"]("hex") ? _0xe54f04["lW"]["from"](_0x5fd65d, "hex") : _0xe54f04["lW"]["alloc"](0);
var res = _0x38d0f4 ? _0x1e6951["toString"](_0x38d0f4) : _0x497813()(_0x1e6951);
logger('decrypt 结果 ', res)
// logger('decrypt 结果 ', res)
return res;
}
},
@ -4496,7 +4497,7 @@ logger = console.info;
}
["returnCurrentFunction"]() {
logger('into returnCurrentFunction')
// logger('into returnCurrentFunction')
const _0x42bd34 = this['stack'], _0x545515 = this['fp'];
this['fp'] = _0x42bd34[_0x545515], this['ip'] = _0x42bd34[_0x545515 - (1)], this['sp'] = _0x545515 - _0x42bd34[_0x545515 - (2)] - (4), this["stack"]["splice"](this['sp'] + (1)), this["callingFunctionInfo"]["returnValue"] === _0x43707b && (this['stack'][0] = undefined), this["allThis"]["pop"](), this["currentThis"] = this['allThis'][this["allThis"]['length'] - (1)], this["callingFunctionInfos"]["pop"](), this["callingFunctionInfo"] = this["callingFunctionInfos"][this.callingFunctionInfos.length - (1)];
// logger('123123123',this["callingFunctionInfos"])
@ -4599,7 +4600,7 @@ logger = console.info;
return _0x51aa8e;
}
if (_0x262507) {
logger('callFunction 执行方法', _0x3bed74, _0x262507)
// logger('callFunction 执行方法', _0x3bed74, _0x262507)
}
!_0x4b5a8d ? _0x2f055c[0] = _0x18661b ? new _0x335804[_0x3bed74](..._0x262507) : _0x335804[_0x3bed74](..._0x262507) : _0x2f055c[0] = _0x18661b ? new _0x38bafa(..._0x262507) : _0x38bafa(..._0x262507), this["stack"]["splice"](this["sp"] + (1));
}
@ -5045,7 +5046,7 @@ logger = console.info;
constructor() {
this["sm3hash"] = _0x532197 => {
_0x532197 = this["bs5"](_0x532197), _0x532197 = _0x1f11de["digest"](_0x532197, "utf8", "hex"), _0x532197;
logger('sm3hash ', _0x532197)
// logger('sm3hash ', _0x532197)
return _0x532197
}
this["sha1hash"] = _0x5993d3 => {
@ -5084,7 +5085,7 @@ logger = console.info;
}
this["bs5"] = _0xa129df => {
var res = _0x27cd99["instance"]["hex_md5"](_0xa129df);
logger('bs5 处理结果', res)
// logger('bs5 处理结果', res)
return res;
}
this["setCookie"] = (_0x53def9, _0x2a3574, _0x3d869c) => {
@ -5163,9 +5164,9 @@ logger = console.info;
const _0x475ce7 = document["querySelector"]("head meta[name='_y_ds']");
if (_0x475ce7) {
var _0x13f88b = _0x475ce7["content"];
logger('1.获取meta标签 _y_ds', _0x13f88b)
// logger('1.获取meta标签 _y_ds', _0x13f88b)
var _0x4a87cf = _0x2c29b1(_0x13f88b, window);
logger('2.获取密钥', _0x4a87cf)
// logger('2.获取密钥', _0x4a87cf)
if (_0x4a87cf == null) {
return;
}

File diff suppressed because it is too large Load Diff

@ -18571,7 +18571,7 @@
_0xbde754 = function (_0x84c202, _0x35bb6d) {
var _0x790497 = a52_0xf611;
if ("JRCQY" !== 'JRCQY') return _0x1e6477; else {
console.log('加密url', _0x35bb6d, '加密参数', _0x84c202)
console.log('加密url', _0x35bb6d, '加密参数', JSON.stringify(_0x84c202))
var _0x5048bc = Object(_0x46f840["getEncryptInfo"])(JSON["stringify"](_0x84c202), _0x35bb6d),
_0x4ef65f = {
'jmbw': _0x5048bc["enVal"]

File diff suppressed because one or more lines are too long

@ -63,8 +63,6 @@ async function get_los_test_service(){
console.log('测试getPublicKey请求', await getPublicKey.json())
}
var loginCookieStr = "tpass_tct8zta97w6c46zdt9zc2648227df5z2=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjA3NGE2NzEzZGE2ZjQ0YTFiMjA3ODRhZGM0MmUxNmM5In0.zgO2rco0oWhTgOX6tVbZVoLI_qysOfJ1fdlcghe8KyI3iUmFV_IuHvZINQWeSmKesyefAyOxWflWsbSzQiiOgw; oauth2_referer=tpass.zhejiang.chinatax.gov.cn; dzfp-ssotoken=4fa8538cee014e3b84f88ead04610dea; SSO_SECURITY_CHECK_TOKEN=bd1e0dc3898d4239af9c3b11dc8b7983; lzkqow39189=9ef06defe6d34ad7aba79ae8bbe419f8; DTSwUOYx7MiWN=dcf74815ad6d7fef22601131e58a180b8a80b714fe9224c72c6b881b3f42d8b3"
async function get_los(url, param) {
console.time('js执行时长')
const [jsDom, cookieJar] = jsdomFromText({
@ -149,8 +147,6 @@ async function get_los(url, param) {
console.log('测试getPublicKey请求', await getPublicKey.json())
}
var url = `/kpfw/cssSecurity/v1/getPublicKey?t=${new Date().getTime()}`
// TODO:如果有 param 加密后得到 enParam
var enParam = ""
get_los(url, enParam);

@ -0,0 +1,146 @@
const {jsdomFromText, browser} = require("sdenv");
const {Script} = require("node:vm");
const fs = require("node:fs");
const FpCrypt = require("../../routes/service/static/fp/fp-crypt");
var baseUrl = 'https://dppt.hubei.chinatax.gov.cn:8443'
// TODO 需要文件内的 meta name="_y_ds" content 标签内容
var html = fs.readFileSync('./invoice-business.html', 'utf8').toString();
let js = fs.readFileSync('./chunk-npjg4qgmmrfrjl3r.js', 'utf8').toString();
// TODO:用户登陆token 测试时需要替换
var loginCookieStr = "oauth2_referer=dppt.hubei.chinatax.gov.cn; dzfp-ssotoken=37c347d5ab014bacb418d7756b9e7ee1; SSO_SECURITY_CHECK_TOKEN=91081171bc604d16910500c4982e74ea; c_time=12; lzkqow39189=9b8cabc2e1194d5b93f6ef9f46004612; DTSwUOYx7MiWN=f2045053f3ad56575c946fd47a49632842e4f7850c561ccaddecc28de91fa92e; lzkqow38189=1727122084863; MKls83gqduGS=d3ba2a8eb4284ff70c7c0fff4a9dcbdd85c92b046de5b0045c3d61eecc23acb1f48a82f31cb672cd93e47b163696b0d9"
var urlPath = `/szzhzz/qlfpcx/v1/queryFpjcxx?t=${new Date().getTime()}`
// var urlPath = `/szzhzz/qlfpcx/v1/queryFpjcxx`
// TODO:如果有 param 加密后得到 enParam
var param = '{"gjbq":"1","fpztDm":["01","02","03","04"],"fplyDm":"0","fplxDm":[],"kprqq":"2024-09-09","kprqz":"2024-09-25","tfrqq":"2024-09-09","tfrqz":"2024-09-25","sflzfp":"","dtBz":"N","pageNumber":1,"pageSize":20}';
let fpCrypt = new FpCrypt(loginCookieStr, {
"publicKey": "MIGf1MA0GCSqGSI2b03DQEBAQUAA4GNADCBiQKBgQDzT/x0AfuV0vtyMKvPWDNMKZbDo8uBqouTYAF8X8uS//z/HqpXBC07CLpnfpOoijwI/zbiPD9RTaEB3PaukaDYxBxE/yBFSByBH3wh5XcIOxi8lpqMBEKun+AjAr91tXUnjkKioI3u7S2hSxh5HgWTVXm1OHAMPW/+w2nmA0Hk2QIDAQAB",
"tokenKey": "f84df3d0021d4c09b270c5d17d86535f",
});
let handleParam = fpCrypt.handleParam(param, urlPath);
var enParam = JSON.stringify({'Jmbw': handleParam["enVal"]});
// headers['security-mes-key'] = $e["enMesKey"]
let handleSuffix = fpCrypt.handleSuffix(urlPath);
get_los(handleSuffix, enParam);
// fpService = new FpService()
// get_los_test_service()
// async function get_los_test_service() {
// let los = await fpService.get_los(url, enParam, html, loginCookieStr);
// var getPublicKey = await fetch(`${baseUrl + los.hurl}`, {
// "headers": {
// "accept": "*/*",
// "accept-language": "zh-CN,zh;q=0.9",
// "cache-control": "no-cache",
// "content-type": "text/plain;charset=UTF-8",
// "lzkqow23819": `${los.hd}`,
// // "bluewareguid": "d8fd3f2be1d8f629",
// // "cache-contro": "no-store",
// // "connection": "keep-alive",
// // "content-length": "421",
// // "date": "Mon, 23 Sep 2024 06:38:44 GMT",
// // "pragma": "no-cache",
// // "server": "Unknown",
// // "x-content-options": "nosniff",
// // "x-proxy-by": "Tif-accessgate",
// // "x-xss-protection": "1;mode=block",
// // "pragma": "no-cache",
// // "sec-ch-ua": "\"Not)A;Brand\";v=\"99\", \"Google Chrome\";v=\"127\", \"Chromium\";v=\"127\"",
// // "sec-ch-ua-mobile": "?0",
// // "sec-ch-ua-platform": "\"Linux\"",
// // "sec-fetch-dest": "empty",
// // "sec-fetch-mode": "cors",
// // "sec-fetch-site": "same-origin",
// "sso_security_check_token": "e133ba1f6f124599af5fa5262e1adf02",
// "x-requested-with": "XMLHttpRequest",
// "cookie": cookieJar.getCookieStringSync(baseUrl),
// // "Referer": "https://dppt.hubei.chinatax.gov.cn:8443/invoice-business?ruuid=1726970597058",
// "Referrer-Policy": "strict-origin-when-cross-origin"
// },
// "body": "",
// "method": "POST"
// });
//
//
// console.log('测试getPublicKey请求', await getPublicKey.json())
// }
async function get_los(url, param) {
console.time('js执行时长')
const [jsDom, cookieJar] = jsdomFromText({
url: `${baseUrl}/invoice-query/invoice-query`,
referrer: baseUrl,
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
contentType: "text/html",
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only'
})
// 加载dom
let dom = await jsDom(html);
const window = dom.window
// 设置 cookie
for (let cookie of loginCookieStr.trim().split("; ")) {
cookieJar.setCookieSync(cookie, baseUrl);
}
browser(window, 'chrome');
// 加载js
let script = new Script(js);
let internalVMContext = dom.getInternalVMContext();
// 执行 js
script.runInContext(internalVMContext, {timeout: 1000});
if (window.$dunm.$byno) {
window.$dunm.$byno();
}
let los = window[window["_d_ts"]](url, param);
console.log('js执行完成,返回结果 ', los)
// 关闭
dom.window.close()
console.timeEnd('js执行时长')
console.log(cookieJar.getCookieStringSync(baseUrl))
var getPublicKey = await fetch(`${baseUrl + los.hurl}`, {
"headers": {
"security-mes-key": "",
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9",
"accept-encoding": "gzip, deflate, br, zstd",
"nsrsbh": "91420112MA49HA6G1W",
// "origin": "https://dppt.hubei.chinatax.gov.cn:8443",
// "cache-control": "no-cache",
"content-type": "application/json",
"lzkqow23819": `${los.hd}`,
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
// "x-api-type": "xhr",
"sso_security_check_token": "91081171bc604d16910500c4982e74ea",
"x-requested-with": "XMLHttpRequest",
"cookie": cookieJar.getCookieStringSync(baseUrl),
// "Referer": "https://dppt.hubei.chinatax.gov.cn:8443/invoice-business?ruuid=1726970597058",
"Referrer-Policy": "strict-origin-when-cross-origin",
// "x-b3-sampled":"1",
// "x-b3-spanid": "c850e3c1a85ee988",
// "x-b3-traceid": "c850e3c1a85ee988",
// "x-tsf-client-timestamp": `${new Date().getTime()}000`
},
"body": `${los.bd}`,
"method": "POST"
});
let newVar = await getPublicKey.json();
console.log('测试请求', newVar)
if (newVar['data']) {
console.log(newVar['data'])
}
}
Loading…
Cancel
Save