master
刘东琪 8 months ago
parent f1d366aba9
commit f0d07ed1cd
  1. 10
      app.js
  2. 6
      package-lock.json
  3. 1
      package.json
  4. 0
      routes/Rs6.js
  5. 91
      routes/Sm4.js
  6. 231
      routes/service/Sm4Service.js
  7. 109
      test/rs6/hubei.js
  8. 52
      test/rs6/hubei2.js
  9. 52
      test/rs6/shangbiao.js
  10. 160
      test/rs6/yunnan.js
  11. 50
      test/test.js

@ -1,7 +1,8 @@
const express = require('express'); const express = require('express');
// const bodyParser = require('body-parser'); // const bodyParser = require('body-parser');
const IpUtil = require('./utils/IpUtil'); const IpUtil = require('./utils/IpUtil');
const rs = require("./routes"); const rs6 = require("./routes/Rs6");
const sm4 = require("./routes/Sm4");
// 读取环境变量 // 读取环境变量
const port = process.env.PORT || 9081; const port = process.env.PORT || 9081;
@ -16,15 +17,16 @@ const app = express();
/* 配置框架环境 S */ /* 配置框架环境 S */
// 设置 express 的中间件 body-parser // 设置 express 的中间件 body-parser
app.use(express.json({ limit: '10mb' })); app.use(express.json({limit: '10mb'}));
app.use(express.urlencoded({ limit: '10mb', extended: true })); app.use(express.urlencoded({limit: '10mb', extended: true}));
// 设置 public 为静态文件的存放文件夹 // 设置 public 为静态文件的存放文件夹
// app.use('/public', express.static('public')); // app.use('/public', express.static('public'));
/* 配置框架环境 E */ /* 配置框架环境 E */
app.use("/", rs); app.use("/rs", rs6);
app.use("/sm", sm4);
app.listen(port, "0.0.0.0", () => { app.listen(port, "0.0.0.0", () => {

6
package-lock.json generated

@ -10,6 +10,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"crypto-js": "^4.2.0",
"express": "^4.19.2", "express": "^4.19.2",
"node-fetch": "^2.7.0", "node-fetch": "^2.7.0",
"sdenv": "^0.2.2", "sdenv": "^0.2.2",
@ -1738,6 +1739,11 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/cssstyle": { "node_modules/cssstyle": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",

@ -11,6 +11,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"crypto-js": "^4.2.0",
"express": "^4.19.2", "express": "^4.19.2",
"node-fetch": "^2.7.0", "node-fetch": "^2.7.0",
"sdenv": "^0.2.2", "sdenv": "^0.2.2",

@ -0,0 +1,91 @@
const express = require("express");
const router = express.Router();
let UUIDUtil = require("../utils/UUIDUtil");
const Sm4Service = require("./service/Sm4Service");
sm4Service = new Sm4Service()
router.post('/getKey', async (req, res) => {
let uuid = UUIDUtil.uuid;
let start = new Date();
try {
// 执行
let key = sm4Service.getKey();
res.status(200).send(key);
} catch (e) {
console.error(e.stack)
return res.status(500).send(e.message)
} finally {
console.log(`${uuid};getKey ${new Date() - start} ms`)
}
})
router.post('/sm4Encrypt', async (req, res) => {
let uuid = UUIDUtil.uuid;
let start = new Date();
try {
// 执行
let key = sm4Service.sm4Encrypt();
res.status(200).send(key);
} catch (e) {
console.error(e.stack)
return res.status(500).send(e.message)
} finally {
console.log(`${uuid};sm4Encrypt ${new Date() - start} ms`)
}
})
router.post('/sm4Decrypt', async (req, res) => {
let uuid = UUIDUtil.uuid;
let start = new Date();
try {
// 执行
let key = sm4Service.sm4Decrypt();
res.status(200).send(key);
} catch (e) {
console.error(e.stack)
return res.status(500).send(e.message)
} finally {
console.log(`${uuid};sm4Encrypt ${new Date() - start} ms`)
}
})
router.post('/getSign', async (req, res) => {
let uuid = UUIDUtil.uuid;
let start = new Date();
try {
// 执行
let key = sm4Service.getSign();
res.status(200).send(key);
} catch (e) {
console.error(e.stack)
return res.status(500).send(e.message)
} finally {
console.log(`${uuid};getSign ${new Date() - start} ms`)
}
})
router.post('/toHex', async (req, res) => {
let uuid = UUIDUtil.uuid;
let start = new Date();
try {
// 执行
let key = sm4Service.toHex();
res.status(200).send(key);
} catch (e) {
console.error(e.stack)
return res.status(500).send(e.message)
} finally {
console.log(`${uuid};getSign ${new Date() - start} ms`)
}
})
module.exports = router

@ -0,0 +1,231 @@
const CryptoJS = require('crypto-js');
// const sm = require('sm-crypto').sm2;
class Sm4Service {
sm4Encrypt(data, key) {
return encrypt(data, key);
}
sm4Decrypt(data, key) {
return decrypt(data, key);
}
getKey() {
return A();
}
getSign(data, key) {
var HmacSHA256 = CryptoJS.HmacSHA256(data, key)
return CryptoJS.enc.Hex.stringify(HmacSHA256);
}
toHex(e) {
for (var t = "", n = 0; n < e.length; n++) {
"" === t ? t = e.charCodeAt(n).toString(16) : t += e.charCodeAt(n).toString(16);
}
return t
}
}
function A() {
var d = "";
return d = r(16, 61), d
}
function r(e, t) {
var n, a, i = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), r = [];
if (t = t || i.length, e) {
for (n = 0; n < e; n++) {
r[n] = i[0 | Math.random() * t];
}
} else {
for (r[8] = r[13] = r[18] = r[23] = "-", r[14] = "4", n = 0; n < 36; n++) {
r[n] || (a = 0 | 16 * Math.random(), r[n] = i[19 == n ? 3 & a | 8 : a]);
}
}
return r.join("")
}
function c(t) {
let e = [];
let n = 0;
let r = t.length;
for (; n < r; n += 2) {
e.push(parseInt(t.substr(n, 2), 16));
}
return e
}
function f(t) {
return t.map((function (t) {
return t = t.toString(16), 1 === t.length ? "0" + t : t
}
)).join("")
}
function l(t) {
for (var e = [], n = 0, r = t.length; n < r; n++) {
var i = t.codePointAt(n);
if (i <= 127) {
e.push(i);
} else if (i <= 2047) {
e.push(192 | i >>> 6), e.push(128 | 63 & i);
} else if (i <= 55295 || i >= 57344 && i <= 65535) {
e.push(224 | i >>> 12), e.push(128 | i >>> 6 & 63), e.push(128 | 63 & i);
} else {
if (!(i >= 65536 && i <= 1114111)) {
throw e.push(i), new Error("input is not supported");
}
n++, e.push(240 | i >>> 18 & 28), e.push(128 | i >>> 12 & 63), e.push(128 | i >>> 6 & 63), e.push(128 | 63 & i)
}
}
return e
}
function h(t) {
for (var e = [], n = 0, r = t.length; n < r; n++) {
t[n] >= 240 && t[n] <= 247 ? (e.push(String.fromCodePoint(((7 & t[n]) << 18) + ((63 & t[n + 1]) << 12) + ((63 & t[n + 2]) << 6) + (63 & t[n + 3]))), n += 3) : t[n] >= 224 && t[n] <= 239 ? (e.push(String.fromCodePoint(((15 & t[n]) << 12) + ((63 & t[n + 1]) << 6) + (63 & t[n + 2]))), n += 2) : t[n] >= 192 && t[n] <= 223 ? (e.push(String.fromCodePoint(((31 & t[n]) << 6) + (63 & t[n + 1]))), n++) : e.push(String.fromCodePoint(t[n]));
}
return e.join("")
}
function d(t, e) {
return t << e | t >>> 32 - e
}
function p(t) {
var s = [214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 20, 194, 40, 251, 44, 5, 43, 103, 154, 118, 42, 190, 4, 195, 170, 68, 19, 38, 73, 134, 6, 153, 156, 66, 80, 244, 145, 239, 152, 122, 51, 84, 11, 67, 237, 207, 172, 98, 228, 179, 28, 169, 201, 8, 232, 149, 128, 223, 148, 250, 117, 143, 63, 166, 71, 7, 167, 252, 243, 115, 23, 186, 131, 89, 60, 25, 230, 133, 79, 168, 104, 107, 129, 178, 113, 100, 218, 139, 248, 235, 15, 75, 112, 86, 157, 53, 30, 36, 14, 94, 99, 88, 209, 162, 37, 34, 124, 59, 1, 33, 120, 135, 212, 0, 70, 87, 159, 211, 39, 82, 76, 54, 2, 231, 160, 196, 200, 158, 234, 191, 138, 210, 64, 199, 56, 181, 163, 247, 242, 206, 249, 97, 21, 161, 224, 174, 93, 164, 155, 52, 26, 85, 173, 147, 50, 48, 245, 140, 177, 227, 29, 246, 226, 46, 130, 102, 202, 96, 192, 41, 35, 171, 13, 83, 78, 111, 213, 219, 55, 69, 222, 253, 142, 47, 3, 255, 106, 114, 109, 108, 91, 81, 141, 27, 175, 146, 187, 221, 188, 127, 17, 217, 92, 65, 31, 16, 90, 216, 10, 193, 49, 136, 165, 205, 123, 189, 45, 116, 208, 18, 184, 229, 180, 176, 137, 105, 151, 74, 12, 150, 119, 126, 101, 185, 241, 9, 197, 110, 198, 132, 24, 240, 125, 236, 58, 220, 77, 32, 121, 238, 95, 62, 215, 203, 57, 72];
return (255 & s[t >>> 24 & 255]) << 24 | (255 & s[t >>> 16 & 255]) << 16 | (255 & s[t >>> 8 & 255]) << 8 | 255 & s[255 & t]
}
function v(t) {
return t ^ d(t, 2) ^ d(t, 10) ^ d(t, 18) ^ d(t, 24)
}
function y(t) {
return t ^ d(t, 13) ^ d(t, 23)
}
function g(t, e, n) {
for (var r = new Array(4), i = new Array(4), o = 0; o < 4; o++) {
i[0] = 255 & t[0 + 4 * o], i[1] = 255 & t[1 + 4 * o], i[2] = 255 & t[2 + 4 * o], i[3] = 255 & t[3 + 4 * o], r[o] = i[0] << 24 | i[1] << 16 | i[2] << 8 | i[3];
}
for (var a, s = 0; s < 32; s += 4) {
a = r[1] ^ r[2] ^ r[3] ^ n[s + 0], r[0] ^= v(p(a)), a = r[2] ^ r[3] ^ r[0] ^ n[s + 1], r[1] ^= v(p(a)), a = r[3] ^ r[0] ^ r[1] ^ n[s + 2], r[2] ^= v(p(a)), a = r[0] ^ r[1] ^ r[2] ^ n[s + 3], r[3] ^= v(p(a));
}
for (var u = 0; u < 16; u += 4) {
e[u] = r[3 - u / 4] >>> 24 & 255, e[u + 1] = r[3 - u / 4] >>> 16 & 255, e[u + 2] = r[3 - u / 4] >>> 8 & 255, e[u + 3] = 255 & r[3 - u / 4]
}
}
function m(t, e, n) {
var i = 0;
var u = [462357, 472066609, 943670861, 1415275113, 1886879365, 2358483617, 2830087869, 3301692121, 3773296373, 4228057617, 404694573, 876298825, 1347903077, 1819507329, 2291111581, 2762715833, 3234320085, 3705924337, 4177462797, 337322537, 808926789, 1280531041, 1752135293, 2223739545, 2695343797, 3166948049, 3638552301, 4110090761, 269950501, 741554753, 1213159005, 1684763257];
for (var r = new Array(4), o = new Array(4), a = 0; a < 4; a++) {
o[0] = 255 & t[0 + 4 * a], o[1] = 255 & t[1 + 4 * a], o[2] = 255 & t[2 + 4 * a], o[3] = 255 & t[3 + 4 * a], r[a] = o[0] << 24 | o[1] << 16 | o[2] << 8 | o[3];
}
r[0] ^= 2746333894, r[1] ^= 1453994832, r[2] ^= 1736282519, r[3] ^= 2993693404;
for (var s, c = 0; c < 32; c += 4) {
s = r[1] ^ r[2] ^ r[3] ^ u[c + 0], e[c + 0] = r[0] ^= y(p(s)), s = r[2] ^ r[3] ^ r[0] ^ u[c + 1], e[c + 1] = r[1] ^= y(p(s)), s = r[3] ^ r[0] ^ r[1] ^ u[c + 2], e[c + 2] = r[2] ^= y(p(s)), s = r[0] ^ r[1] ^ r[2] ^ u[c + 3], e[c + 3] = r[3] ^= y(p(s));
}
if (n === i)
for (var f, l = 0; l < 16; l++) {
f = e[l], e[l] = e[31 - l], e[31 - l] = f
}
}
function encrypt(t, e, n) {
return b(t, e, 1, n)
}
function decrypt(t, e, n) {
return b(t, e, 0, n)
}
function b(t, e, n) {
var o = 32;
var a = 16;
var i = 0;
var s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, u = s.padding,
d = void 0 === u ? "pkcs#5" : u, p = (s.mode, s.output), v = void 0 === p ? "string" : p;
if ("string" === typeof e && (e = c(e)), 16 !== e.length) {
throw new Error("key is invalid");
}
if (t = "string" === typeof t ? n !== i ? l(t) : c(t) : r(t), "pkcs#5" === d && n !== i) {
for (var y = a - t.length % a, b = 0; b < y; b++) {
t.push(y);
}
}
var _ = new Array(o);
m(e, _, n);
var w = [], x = t.length, k = 0;
while (x >= a) {
var A = t.slice(k, k + 16), S = new Array(16);
g(A, S, _);
for (var O = 0; O < a; O++) {
w[k + O] = S[O];
}
x -= a, k += a
}
if ("pkcs#5" === d && n === i) {
var E = w[w.length - 1];
w.splice(w.length - E, E)
}
return "array" !== v ? n !== i ? f(w) : h(w) : w
}
// function sm2(jiamistr, publicKey, cipherMode) {
// return sm.doEncrypt(jiamistr, publicKey, cipherMode);
// }
function De(t, e) {
var n, c = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(""), u = [];
if (e = e || c.length, t) {
for (n = 0; QQfZW(n, t); n++) {
u[n] = c[uApus(0, YcWyY(Math["random"](), e))];
}
}
return u["join"]("")
}
function QQfZW(t, e) {
return HpDDW(t, e)
}
function HpDDW(t, e) {
return t < e
}
function uApus(t, e) {
return Xefio(t, e)
}
function Xefio(t, e) {
return t | e
}
function YcWyY(t, e) {
return wlgCa(t, e)
}
function wlgCa(t, e) {
return t * e
}
module.exports = Sm4Service

@ -1,109 +0,0 @@
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
const {jsdomFromText, browser, jsdomFromUrl} = require("sdenv");
const {Script} = require("vm");
let fs = require('fs');
const cheerio = require('cheerio');
var baseUrl = "https://etax.hubei.chinatax.gov.cn:8443/"
let url = `https://etax.hubei.chinatax.gov.cn:8443/`;
function loadPages(urlBase64, jsBase64, htmlBase64, cookieBase64, userAgentBase64, ts) {
const htmlText = htmlBase64;
const jsText = jsBase64;
const [jsDom, cookieJar] = jsdomFromText({
proxy: 'http://127.0.0.1:8080',
url: url,
referrer: url,
contentType: "text/html",
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only'
})
const dom = jsDom(htmlText);
// console.log('file',dom.serialize())
window = dom.window
// 加载 window.$_ts
let $ = cheerio.load(htmlText);
let nextAll = $('script[r=m]');
let trendJs = $('script').first().html();
let js = trendJs + ";\n" + jsText
// nextAll.each((index, element) => {
// let attr = $(element).html();
// if (attr) {
// js += attr
// } else {
// js += jsText
// }
// js += ";\n"
// })
// fs.writeFileSync('/home/liu/桌面/test111.js', js)
cookieJar.setCookieSync(cookieBase64, baseUrl);
window.onbeforeunload = async (url) => {
const cookies = cookieJar.getCookieStringSync(baseUrl);
console.debug(`${url} 生成cookie:`, cookies);
let fff = await fetch("https://etax.hubei.chinatax.gov.cn:8443/", {
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=0, i",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Linux\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"upgrade-insecure-requests": "1",
// "cookie": "WKFVysqPUWooO=60hpQvjw7ZsGEBT1OJrgQPSqW9IvwKkC7F.ZR1jluU6cX7e7UOWm8eQZB1ZbWnMcg4cEVJcZN9nQtAeSdqDVE_Ea; WKFVysqPUWooP=0MfuEaK_F4sjBozT84fODUBGaz69PKunV0EVKwEm2T2refsm9_SKCDlyB602dwDssmS1E6xPpFjWeYxm.Y1lYG7UhsNpOpuG0XkKH8jySNMcAl8rPBIwAjJ2yjATYrPP8LR__viJamtP2tQ44SVRz1cVIWUN9wPXb8hdLb6_w5WDNz40yGJ8HHlErfshCe_vxWy6QpuT9BDw2Bgzd0d.8HIK9BmcckmPtqXCQE4HvPsPM5bw4.QU.35QlsFl1byPT_A9VIUiohyjHvhfslECM7MXc9JVLUPrpD62nk.qHpI0",
"cookie": cookies,
"Referer": "https://etax.hubei.chinatax.gov.cn:8443/",
"Referrer-Policy": "strict-origin-when-cross-origin"
},
"body": null,
"method": "GET"
});
console.log(fff.status, fff.statusText)
window.close();
}
browser(dom.window, 'chrome');
let script = new Script(js);
let internalVMContext = dom.getInternalVMContext();
// 执行 js
script.runInContext(internalVMContext);
}
async function test() {
let response = await fetch(url, {"method": "GET"});
// 返回页面内容
let htmlStr = await response.text();
// console.log(htmlStr)
// 页面返回cookie
let cookies = response.headers.get("Set-Cookie");
// let htmlCookie = cookies.split('; ')[0];
// console.log(htmlCookie)
let staticJs = fs.readFileSync('/home/liu/桌面/hubei.eh5axISchOau.ed63b8f.js');
loadPages(url, staticJs.toString('utf8'), htmlStr, cookies, "")
}
test();

@ -1,52 +0,0 @@
const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv');
const path = require("path");
const fs = require("fs");
const {Script} = require("vm");
const baseUrl = "https://tpass.hebei.chinatax.gov.cn:8443/"
const files = {
html: path.resolve('../public/hubei/index.html'),
js: path.resolve('../public/hubei/5PXGXoOF7eGJ.ed63b8f.js'),
ts: path.resolve('../public/hubei/ts.json'),
}
function getFile(name) {
const filepath = files[name];
if (!filepath) throw new Error(`getFile: ${name}错误`);
if (!fs.existsSync(filepath)) throw new Error(`文件${filepath}不存在,请使用rs-reverse工具先获取文件`);
return fs.readFileSync(filepath);
}
function loadPages() {
const htmlText = getFile('html');
const jsText = getFile('js');
let file = getFile('ts');
let url = `${baseUrl}sys-api/v1.0/auth/oauth2/getPublicKey`;
const [jsDom, cookieJar] = jsdomFromText({
url: url,
referrer: url,
contentType: "text/html",
runScripts: "outside-only",
})
const dom = jsDom(htmlText);
window = dom.window
window.$_ts = JSON.parse(file.toString());
window.onbeforeunload = async (url) => {
const cookies = cookieJar.getCookieStringSync(baseUrl);
console.debug(`${url} 生成cookie:`, cookies);
window.close();
}
new Script(jsText.toString()).runInContext(dom.getInternalVMContext());
browser(dom.window, 'chrome');
console.log(111)
}
let promise = loadPages()
module.exports = promise

@ -1,52 +0,0 @@
// const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv');
// const path = require("path");
// const fs = require("fs");
// const {Script} = require("vm");
//
// const baseUrl = "https://wcjs.sbj.cnipa.gov.cn"
//
// const files = {
// html: path.resolve('../public/shangbiao/static/makecode_input_html.html'),
// js: path.resolve('../public/shangbiao/static/makecode_input_js.js'),
// ts: path.resolve('../public/shangbiao/static/makecode_input_ts.json'),
// }
//
// function getFile(name) {
// const filepath = files[name];
// if (!filepath) throw new Error(`getFile: ${name}错误`);
// if (!fs.existsSync(filepath)) throw new Error(`文件${filepath}不存在,请使用rs-reverse工具先获取文件`);
// return fs.readFileSync(filepath);
// }
//
//
// function loadPages() {
// const htmlText = getFile('html');
// const jsText = getFile('js');
// let file = getFile('ts');
//
// let url = `${baseUrl}/sgtmi`;
// const [jsDom, cookieJar] = jsdomFromText({
// url: url,
// referrer: url,
// contentType: "text/html",
// runScripts: "outside-only",
// })
// const dom = jsDom(htmlText);
// window = dom.window
// window.$_ts = JSON.parse(file.toString());
// window.onbeforeunload = async (url) => {
// const cookies = cookieJar.getCookieStringSync(baseUrl);
// console.debug(`${url} 生成cookie:`, cookies);
// window.close();
// }
//
// new Script(jsText.toString()).runInContext(dom.getInternalVMContext());
//
// browser(dom.window, 'chrome');
// return cookieJar.getCookieStringSync(baseUrl)
// }
//
//
// let promise = loadPages()
// console.log(promise);
// module.exports = promise

@ -1,160 +0,0 @@
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
const {jsdomFromText, browser, jsdomFromUrl} = require("sdenv");
const {Script} = require("vm");
let fs = require('fs');
const express = require("express");
// const cheerio = require('cheerio');
// const app = express();
var baseUrl = "https://app.yunnan.chinatax.gov.cn"
let url = `https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html`;
// async function extracted(cookieJar) {
// const [jsdomer] = await jsdomFromUrl({
// // proxy: 'http://127.0.0.1:8080',
// strictSSL: false,
// userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
// }, cookieJar);
// const dom = await jsdomer(url);
//
// console.log(dom.serialize())
// }
function loadJs(window, jsText) {
// 加载js
let js = '';
// 加载 页面上的js
const allScript = window.document.querySelectorAll('script[r="m"]');
for (let i = 0; i < allScript.length; i++) {
const script = allScript[i];
let attr = script.textContent;
if (attr) {
js += attr
} else {
js += jsText
}
js += ";\n"
}
return js;
}
async function loadPages(urlBase64, jsBase64, htmlBase64, cookieBase64, userAgentBase64, ts) {
const htmlText = htmlBase64;
const jsText = jsBase64;
const [jsDom, cookieJar] = jsdomFromText({
// proxy: 'http://127.0.0.1:8080',
url: url,
referrer: url,
contentType: "text/html",
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only'
})
const dom = jsDom(htmlText);
// console.log('file',dom.serialize())
window = dom.window
// 加载 window.$_ts
// let $ = cheerio.load(htmlText);
// let nextAll = $('script[r=m]');
// let trendJs = $('script').first().html();
// let js = trendJs + ";\n" + jsText
// nextAll.each((index, element) => {
// let attr = $(element).html();
// if (attr) {
// js += attr
// } else {
// js += jsText
// }
// js += ";\n"
// })
// fs.writeFileSync('/home/liu/桌面/test111.js', js)
cookieJar.setCookieSync(cookieBase64, baseUrl);
window.onbeforeunload = async (url) => {
const cookies = cookieJar.getCookieStringSync(baseUrl);
console.debug(`${url} 生成cookie:`, cookies);
// let fff = await fetch("https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html", {
// "headers": {
// "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
// "accept-language": "zh-CN,zh;q=0.9",
// "cache-control": "no-cache",
// "pragma": "no-cache",
// "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
// "sec-ch-ua-mobile": "?0",
// "sec-ch-ua-platform": "\"Linux\"",
// "sec-fetch-dest": "document",
// "sec-fetch-mode": "navigate",
// "sec-fetch-site": "same-origin",
// "upgrade-insecure-requests": "1",
// "cookie": cookies,
// "Referer": "https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html",
// }, "body": null, "method": "GET"
// });
//
// console.log(fff.status, fff.statusText)
window.close();
}
browser(dom.window, 'chrome');
let js = loadJs(window, jsText);
let script = new Script(js);
let internalVMContext = dom.getInternalVMContext();
// 执行 js
script.runInContext(internalVMContext);
const cookies = cookieJar.getCookieStringSync(baseUrl);
let fff = await fetch("https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html", {
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"pragma": "no-cache",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Linux\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"upgrade-insecure-requests": "1",
"cookie": cookies,
"Referer": "https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html",
}, "body": null, "method": "GET"
});
console.log(fff.status, fff.statusText)
}
async function test() {
let response = await fetch(url, {"method": "GET"});
// 返回页面内容
let htmlStr = await response.text();
console.log(htmlStr)
// 页面返回cookie
let cookies = response.headers.get("Set-Cookie");
// let htmlCookie = cookies.split('; ')[0];
// console.log(htmlCookie)
let staticJs = fs.readFileSync('/home/liu/桌面/MO5zzCMcub4d.b4c45da.js');
await loadPages(url, staticJs.toString('utf8'), htmlStr, cookies, "")
}
test();

@ -1,50 +0,0 @@
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
// const cookie = require('cookie');
const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv');
// const path = require("path");
// const fs = require("fs");
// const {Script} = require("vm");
let sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const baseUrl = "https://app.yunnan.chinatax.gov.cn"
const second = "https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html"
async function extracted(cookieJar) {
const [jsdomer] = await jsdomFromUrl({
proxy: 'http://127.0.0.1:8080',
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
}, cookieJar);
const dom = await jsdomer(second);
console.log(dom.window.document.textContent)
}
async function loadPagesFirst() {
const [jsdomer, cookieJar] = await jsdomFromUrl({
proxy: 'http://127.0.0.1:8080',
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
});
const dom = await jsdomer(second);
window = dom.window
window.document.style = dom.window.style
window.onbeforeunload = async (url) => {
const cookies = cookieJar.getCookieStringSync(baseUrl);
console.debug('生成cookie:', cookies);
// await loadPagesSecond(cookieJar)
await extracted(cookieJar);
window.close();
}
// await sleep(500)
// await extracted(cookieJar);
browser(window, 'chrome');
}
loadPagesFirst().then(r => {
})
Loading…
Cancel
Save