parent
f1d366aba9
commit
f0d07ed1cd
11 changed files with 335 additions and 427 deletions
@ -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…
Reference in new issue