From f0d07ed1cd89844fc25ce45b0ff590dd6fe12b6f Mon Sep 17 00:00:00 2001 From: liudongqi Date: Fri, 13 Sep 2024 10:07:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Sm4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 10 +- package-lock.json | 6 + package.json | 1 + routes/{index.js => Rs6.js} | 0 routes/Sm4.js | 91 ++++++++++++++ routes/service/Sm4Service.js | 231 +++++++++++++++++++++++++++++++++++ test/rs6/hubei.js | 109 ----------------- test/rs6/hubei2.js | 52 -------- test/rs6/shangbiao.js | 52 -------- test/rs6/yunnan.js | 160 ------------------------ test/test.js | 50 -------- 11 files changed, 335 insertions(+), 427 deletions(-) rename routes/{index.js => Rs6.js} (100%) create mode 100644 routes/Sm4.js create mode 100644 routes/service/Sm4Service.js delete mode 100644 test/rs6/hubei.js delete mode 100644 test/rs6/hubei2.js delete mode 100644 test/rs6/shangbiao.js delete mode 100644 test/rs6/yunnan.js delete mode 100644 test/test.js diff --git a/app.js b/app.js index 8f7583f..937c539 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,8 @@ const express = require('express'); // const bodyParser = require('body-parser'); 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; @@ -16,15 +17,16 @@ const app = express(); /* 配置框架环境 S */ // 设置 express 的中间件 body-parser -app.use(express.json({ limit: '10mb' })); -app.use(express.urlencoded({ limit: '10mb', extended: true })); +app.use(express.json({limit: '10mb'})); +app.use(express.urlencoded({limit: '10mb', extended: true})); // 设置 public 为静态文件的存放文件夹 // app.use('/public', express.static('public')); /* 配置框架环境 E */ -app.use("/", rs); +app.use("/rs", rs6); +app.use("/sm", sm4); app.listen(port, "0.0.0.0", () => { diff --git a/package-lock.json b/package-lock.json index 8c6c311..8151a5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "body-parser": "^1.20.2", + "crypto-js": "^4.2.0", "express": "^4.19.2", "node-fetch": "^2.7.0", "sdenv": "^0.2.2", @@ -1738,6 +1739,11 @@ "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": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", diff --git a/package.json b/package.json index d0158a6..0da7e38 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "license": "ISC", "dependencies": { "body-parser": "^1.20.2", + "crypto-js": "^4.2.0", "express": "^4.19.2", "node-fetch": "^2.7.0", "sdenv": "^0.2.2", diff --git a/routes/index.js b/routes/Rs6.js similarity index 100% rename from routes/index.js rename to routes/Rs6.js diff --git a/routes/Sm4.js b/routes/Sm4.js new file mode 100644 index 0000000..1ab113d --- /dev/null +++ b/routes/Sm4.js @@ -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 \ No newline at end of file diff --git a/routes/service/Sm4Service.js b/routes/service/Sm4Service.js new file mode 100644 index 0000000..c007298 --- /dev/null +++ b/routes/service/Sm4Service.js @@ -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 \ No newline at end of file diff --git a/test/rs6/hubei.js b/test/rs6/hubei.js deleted file mode 100644 index 461344c..0000000 --- a/test/rs6/hubei.js +++ /dev/null @@ -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(); diff --git a/test/rs6/hubei2.js b/test/rs6/hubei2.js deleted file mode 100644 index 9960585..0000000 --- a/test/rs6/hubei2.js +++ /dev/null @@ -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 diff --git a/test/rs6/shangbiao.js b/test/rs6/shangbiao.js deleted file mode 100644 index fd217c0..0000000 --- a/test/rs6/shangbiao.js +++ /dev/null @@ -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 diff --git a/test/rs6/yunnan.js b/test/rs6/yunnan.js deleted file mode 100644 index 386036b..0000000 --- a/test/rs6/yunnan.js +++ /dev/null @@ -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(); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index d10ec5b..0000000 --- a/test/test.js +++ /dev/null @@ -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 => { -})