python execjs 问题
这是js文件 自己在网上跟着学的 js逆向
js文件可以正常出结果
//导入一个node.js 第三方库
const crypto = require('crypto')
_keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
_p = "W5D80NFZHAYB8EUI2T649RT2MNRMVE2O"
function e2(e) {
if (null == (e = _u_e(e))) return null;
for (var t = '', n = 0; n < e.length; n++) {
var r = _p.charCodeAt(n % _p.length);
t += String.fromCharCode(e.charCodeAt(n) ^ r)
}
return t
}
function _u_e(e) {
if (null == e) return null;
e = e.replace(/\r\n/g, '\n');
for (var t = '', n = 0; n < e.length; n++) {
var r = e.charCodeAt(n);
r < 128 ? t += String.fromCharCode(r) : r > 127 && r < 2048 ? (t += String.fromCharCode(r >> 6 | 192), t += String.fromCharCode(63 & r | 128)) : (t += String.fromCharCode(r >> 12 | 224), t += String.fromCharCode(r >> 6 & 63 | 128), t += String.fromCharCode(63 & r | 128))
}
return t
}
function e1(e) {
if (null == e) return null;
for (var t, n, r, o, i, a, c, u = '', s = 0; s < e.length;) o = (t = e.charCodeAt(s++)) >> 2,
i = (3 & t) << 4 | (n = e.charCodeAt(s++)) >> 4,
a = (15 & n) << 2 | (r = e.charCodeAt(s++)) >> 6,
c = 63 & r,
isNaN(n) ? a = c = 64 : isNaN(r) && (c = 64),
u = u + _keyStr.charAt(o) + _keyStr.charAt(i) + _keyStr.charAt(a) + _keyStr.charAt(c);
return u
}
// payload已找到 下一步找sig
// payload = e1(e2(JSON.stringify(pay123)))
// console.log(payload)
//找sig, 出现md5,判断是否为md5,在结尾处加上断点 运行到断点处,在控制台中搜索参数的值,并用在线工具解密是否为md5
function sig123(e) {
return md5(e + _p).toUpperCase()
}
// 死方法 写死的 都用这个
function md5(text) {
return crypto.createHash('md5').update(text).digest('hex')
}
// sig = sig123(payload)
// console.log(sig)
function main123() {
h = {}
// 分页参数
pay123 = {
"sort": 1,
"start": 40,
"limit": 20
}
h['payload'] = e1(e2(JSON.stringify(pay123)))
h['sig'] = sig123(h['payload'])
return h
}
// console.log(main123())
下面是调用js文件
import execjs
jscode = open(r'D:\pycharm\学习内容\js学习\2023.4.14\烯牛参数生成.js', 'r', encoding='utf-8').read()
# print(jscode)
parames = execjs.compile(jscode).call('main123')
print(parames)
然后报了这个错误
试了好长时间,没找到错误
js文件可以正常使用 是调用时错了吗
还有就是execjs后面的方法compile输入后在pycharm上看着颜色没有变化
这个有影响吗 一般会用颜色变化的吧
还是其它问题 是在官网下载的node.js自动配置的环境 pycharm插件也已安装
用pycharm终端安装pyexecjs的
可能是因为js中main123函数中h/pay123等变量都挂载到全局对象上,而在这个上下文中没有全局对象,所以出现语法错误。
建议:在js文件中,所有的变量都是用let进行声明。如
function main123() {
let h = {}
// 分页参数
let pay123 = {
"sort": 1,
"start": 40,
"limit": 20
}
h['payload'] = e1(e2(JSON.stringify(pay123)))
h['sig'] = sig123(h['payload'])
return h
}