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