吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2153|回复: 12
收起左侧

[已解决] 请问如何将压缩过的js代码转为Python代码

 关闭 [复制链接]
thepoy 发表于 2020-10-17 11:56
本帖最后由 thepoy 于 2020-10-17 21:50 编辑

练习爬某网站时,遇到签名问题,找到了签名函数,但js代码压缩混淆,变量名看着头疼,请问高手和大佬,这种代码如何转为python代码啊?
[JavaScript] 纯文本查看 复制代码
function r(e) {
    function t(e, t) {
        return e >>> t | e << 32 - t
    }
    for (var n, i, o = Math.pow, a = o(2, 32), s = "length", u = "", l = [], c = 8 * e[s], h = r.h = r.h || [], d = r.k = r.k || [], f = d[s], p = {}, m = 2; f < 64; m++)
        if (!p[m]) {
            for (n = 0; n < 313; n += m) p[n] = m;
            h[f] = o(m, .5) * a | 0, d[f++] = o(m, 1 / 3) * a | 0
        } e += "?";
    while (e[s] % 64 - 56) e += "\0";
    for (n = 0; n < e[s]; n++) {
        if (i = e.charCodeAt(n), i >> 8) return;
        l[n >> 2] |= i << (3 - n) % 4 * 8
    }
    for (l[l[s]] = c / a | 0, l[l[s]] = c, i = 0; i < l[s];) {
        var g = l.slice(i, i += 16),
            v = h;
        for (h = h.slice(0, 8), n = 0; n < 64; n++) {
            var y = g[n - 15],
                b = g[n - 2],
                x = h[0],
                _ = h[4],
                w = h[7] + (t(_, 6) ^ t(_, 11) ^ t(_, 25)) + (_ & h[5] ^ ~_ & h[6]) + d[n] + (g[n] = n < 16 ? g[n] : g[n - 16] + (t(y, 7) ^ t(y, 18) ^ y >>> 3) + g[n - 7] + (t(b, 17) ^ t(b, 19) ^ b >>> 10) | 0),
                S = (t(x, 2) ^ t(x, 13) ^ t(x, 22)) + (x & h[1] ^ x & h[2] ^ h[1] & h[2]);
            h = [w + S | 0].concat(h), h[4] = h[4] + w | 0
        }
        for (n = 0; n < 8; n++) h[n] = h[n] + v[n] | 0
    }
    for (n = 0; n < 8; n++)
        for (i = 3; i + 1; i--) {
            var C = h[n] >> 8 * i & 255;
            u += (C < 16 ? 0 : "") + C.toString(16)
        }
    return u
}




已手动改完,耗时一整天。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

漁滒 发表于 2020-10-17 12:05
看起来算法并不太难,可以尝试改写为原生的py代码
 楼主| thepoy 发表于 2020-10-17 12:07
漁滒 发表于 2020-10-17 12:05
看起来算法并不太难,可以尝试改写为原生的py代码

看着是不难,变量名都是单字母,改起来很头疼
漁滒 发表于 2020-10-17 12:16
这种其实算简单的了,如果外部调用的话,可以安装nodejs,然后调用运算,再取回结果
axin1999 发表于 2020-10-17 12:27
from execjs import compile  这个模块可以执行js代码
 楼主| thepoy 发表于 2020-10-17 13:15
axin1999 发表于 2020-10-17 12:27
from execjs import compile  这个模块可以执行js代码

刚刚用过了,速度有点慢
徒想er 发表于 2020-10-17 13:32
js格式化: http://jsnice.org/
可以用这个网站先把js代码美化一下,再自己转成python的
EnterpriseSolu 发表于 2020-10-17 14:17
有点像mission impossible,上面的代码显示的算法有点复杂,需要花点时间(1-3天,我在一天内是比较难理解过来的)理解它,写一点测试用例才能完全理解,再才考虑用python来重写
youkan_pj 发表于 2020-10-17 14:33
thepoy 发表于 2020-10-17 12:07
看着是不难,变量名都是单字母,改起来很头疼

还是不要改,很头痛的,还是重写比较好,能加深理解
揰掵佲 发表于 2020-10-17 15:55
本帖最后由 揰掵佲 于 2020-10-17 16:01 编辑

我只想说一句:为什么不直接用py调用js返回结果?

1.png
我对python不熟,直接copy的代码
[Asm] 纯文本查看 复制代码
# -*- coding: utf-8 -*-

import execjs

def get_js():
    f = open("./demo.js", 'r', encoding='utf-8') # 打开JS文件
   
    line = f.readline()
    htmlstr = ''
    while line:
        htmlstr = htmlstr+line
        line = f.readline()
    return htmlstr


def get_des_psswd(e):
    js_str = get_js()
    ctx = execjs.compile(js_str) #加载JS文件
    return (ctx.call('r', e))  #调用js方法  第一个参数是JS的方法名,后面的data和key是js方法的参数


if __name__ == '__main__':
    print(get_des_psswd(e='123'))
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 18:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表