当前位置: 首页 > news >正文

图灵逆向——题十-魔改算法

目录列表

    • 过程分析
    • JS代码还原
    • 代码实现
    • 运行结果

本题属于魔改标准加密算法,所以无法使用JS或Python中的标准库来进行模拟加密了,只能一步一步的还原它的环境咯。。。

过程分析

打开控制台发现有个无限debugger,直接过掉~[doge]。。。
在这里插入图片描述
OK过掉无限debugger之后直接看请求参数,发现有一个t是加密的,所以就要找这个t是怎么来的。。

在这里插入图片描述
跟踪堆栈在send那里打个断点开始准备跟栈分析~
在这里插入图片描述
结果你发现它JS是依托。。。

在这里插入图片描述
很明显是混淆过后的代码,使用解混淆工具还原一下,代码就变成了这样的。。。
在这里插入图片描述
使用替换大法把代码换成本地的,然后跟栈分析。就能找到一个加密的位置。
在这里插入图片描述
由于它是一个魔改算法,所以不能直接使用标准算法库对他的加密逻辑进行还原,只能通过它魔改的逻辑来补JS代码的环境了。

核心函数就是这个OOOO了,然后就开始扣代码就邢了~

function OOOO(_0x58d4b1, _0x19e7b0, _0x19c60c, _0x21036e, _0x19a1bf) {
    let _0x418c3c = OOXX();
    return sha256(xooo(_0x58d4b1 + _0x418c3c));
}

缺什么补什么就好,然后最后补出来的大概是下面这样的。

JS代码还原

function OOXX(_0x1d2b77, _0x414680, _0x3c906f, _0x3dc595, _0xe29e0c) {
    let _0x57722c = [0x62, 0x73, 0x62, 0x73, 0x62, 0x73, 0x62, 0x73, 0x62, 0x6c];
    let _0x315d43 = [];
    for (let _0x512ce5 = 0x0; _0x512ce5 < _0x57722c.length; _0x512ce5++) {
        _0x315d43.push(String.fromCharCode(_0x57722c[_0x512ce5]));
    }
    return _0x315d43.join("|");
}

function h(_0x26b5cf, _0x41a4dc) {
    var _0x27bd6f;
    var _0x56c5bf;
    var _0x1d88bb;
    var _0x1629f5;
    var _0x5ad387;
    _0x1d88bb = _0x26b5cf & 0x80000000;
    _0x1629f5 = _0x41a4dc & 0x80000000;
    _0x27bd6f = _0x26b5cf & 0x40000000;
    _0x56c5bf = _0x41a4dc & 0x40000000;
    _0x5ad387 = (_0x26b5cf & 0x3fffffff) + (_0x41a4dc & 0x3fffffff);
    return _0x27bd6f & _0x56c5bf ? _0x5ad387 ^ 0x80000000 ^ _0x1d88bb ^ _0x1629f5 : _0x27bd6f | _0x56c5bf ? _0x5ad387 & 0x40000000 ? _0x5ad387 ^ 0xc0000000 ^ _0x1d88bb ^ _0x1629f5 : _0x5ad387 ^ 0x40000000 ^ _0x1d88bb ^ _0x1629f5 : _0x5ad387 ^ _0x1d88bb ^ _0x1629f5;
}

function l(_0x4fcfd0, _0x791862, _0x545c62, _0x492884, _0x1b9409, _0x4f627e, _0x4c98ec) {
    _0x4fcfd0 = h(_0x4fcfd0, h(h(_0x791862 & _0x492884 | _0x545c62 & ~_0x492884, _0x1b9409), _0x4c98ec));
    return h(_0x4fcfd0 << _0x4f627e | _0x4fcfd0 >>> 0x20 - _0x4f627e, _0x791862);
}

function m(_0x130849, _0x4b0430, _0x4ba0ed, _0x4e52aa, _0x25e079, _0x56e69f, _0x40ef4c) {
    _0x130849 = h(_0x130849, h(h(_0x4b0430 ^ _0x4ba0ed ^ _0x4e52aa, _0x25e079), _0x40ef4c));
    return h(_0x130849 << _0x56e69f | _0x130849 >>> 0x20 - _0x56e69f, _0x4b0430);
}

function n(_0x4968e1, _0x1093ec, _0x4c5f59, _0x474b35, _0x353c24, _0xc168b9, _0x46b192) {
    _0x4968e1 = h(_0x4968e1, h(h(_0x4c5f59 ^ (_0x1093ec | ~_0x474b35), _0x353c24), _0x46b192));
    return h(_0x4968e1 << _0xc168b9 | _0x4968e1 >>> 0x20 - _0xc168b9, _0x1093ec);
}

function k(_0x1f8a75, _0x4a3bd3, _0x5a3070, _0x25f36f, _0x4a9473, _0x451bed, _0x437fcb) {
    _0x1f8a75 = h(_0x1f8a75, h(h(_0x4a3bd3 & _0x5a3070 | ~_0x4a3bd3 & _0x25f36f, _0x4a9473), _0x437fcb));
    return h(_0x1f8a75 << _0x451bed | _0x1f8a75 >>> 0x20 - _0x451bed, _0x4a3bd3);
}

var _0x15ef03 = global;
var _0x159519 = [];
_0x2f5ec1.prototype.update = function (_0x12ccc4) {
    var _0x370bf8 = !_0x15ef03.JS_SHA256_NO_COMMON_JS && "object" == typeof module && module.exports;
    var _0x45e279 = "function" == typeof define && define.amd;
    var _0x2cd597 = !_0x15ef03.JS_SHA256_NO_ARRAY_BUFFER && "undefined" != typeof ArrayBuffer;
    var _0x1d090b = "0123456789abcdef".split('');
    var _0x36a98e = [-0x80000000, 0x800000, 0x8000, 0x80];
    var _0x13b4ab = [0x18, 0x10, 0x8, 0x0];
    var _0x4239a7 = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0xfc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x6ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
    var _0x14b3d0 = ["hex", "array", "digest", "arrayBuffer"];
    var _0x159519 = [];
    if (!this.finalized) {
        var _0x3e60f0;
        var _0x1f3147 = typeof _0x12ccc4;
        if ("string" !== _0x1f3147) {
            if ("object" !== _0x1f3147) {
                throw new Error("input is invalid type");
            }
            if (null === _0x12ccc4) {
                throw new Error("input is invalid type");
            }
            if (_0x2cd597 && _0x12ccc4.constructor === ArrayBuffer) {
                _0x12ccc4 = new Uint8Array(_0x12ccc4);
            } else {
                if (!(Array.isArray(_0x12ccc4) || _0x2cd597 && ArrayBuffer.isView(_0x12ccc4))) {
                    throw new Error("input is invalid type");
                }
            }
            _0x3e60f0 = true;
        }
        var _0x1eac44;
        var _0x5ae714;
        var _0x232dbe = 0x0;
        var _0x1a64c7 = _0x12ccc4.length;
        for (var _0x433824 = this.blocks; _0x232dbe < _0x1a64c7;) {
            if (this.hashed) {
                this.hashed = false;
                _0x433824[0x0] = this.block;
                this.block = _0x433824[0x10] = _0x433824[0x1] = _0x433824[0x2] = _0x433824[0x3] = _0x433824[0x4] = _0x433824[0x5] = _0x433824[0x6] = _0x433824[0x7] = _0x433824[0x8] = _0x433824[0x9] = _0x433824[0xa] = _0x433824[0xb] = _0x433824[0xc] = _0x433824[0xd] = _0x433824[0xe] = _0x433824[0xf] = 0x0;
            }
            if (_0x3e60f0) {
                for (_0x5ae714 = this.start; _0x232dbe < _0x1a64c7 && _0x5ae714 < 0x40; ++_0x232dbe) {
                    _0x433824[_0x5ae714 >>> 0x2] |= _0x12ccc4[_0x232dbe] << _0x13b4ab[0x3 & _0x5ae714++];
                }
            } else {
                for (_0x5ae714 = this.start; _0x232dbe < _0x1a64c7 && _0x5ae714 < 0x40; ++_0x232dbe) {
                    if ((_0x1eac44 = _0x12ccc4.charCodeAt(_0x232dbe)) < 0x80) {
                        _0x433824[_0x5ae714 >>> 0x2] |= _0x1eac44 << _0x13b4ab[0x3 & _0x5ae714++];
                    } else if (_0x1eac44 < 0x800) {
                        _0x433824[_0x5ae714 >>> 0x2] |= (0xc0 | _0x1eac44 >>> 0x6) << _0x13b4ab[0x3 & _0x5ae714++];
                        _0x433824[_0x5ae714 >>> 0x2] |= (0x80 | 0x3f & _0x1eac44) << _0x13b4ab[0x3 & _0x5ae714++];
                    } else if (_0x1eac44 < 0xd800 || _0x1eac44 >= 0xe000) {
                        _0x433824[_0x5ae714 >>> 0x2] |= (0xe0 | _0x1eac44 >>> 0xc) << _0x13b4ab[0x3 & _0x5ae714++];
                        _0x433824[_0x5ae714 >>> 0x2] |= (0x80 | _0x1eac44 >>> 0x6 & 0x3f) << _0x13b4ab[0x3 & _0x5ae714++];
                        _0x433824[_0x5ae714 >>> 0x2] |= (0x80 | 0x3f & _0x1eac44) << _0x13b4ab[0x3 & _0x5ae714++];
                    } else {
                        _0x1eac44 = 0x10000 + ((0x3ff & _0x1eac44) << 0xa | 0x3ff & _0x12ccc4.charCodeAt(++_0x232dbe));
                        _0x433824[_0x5ae714 >>> 0x2] |= (0xf0 | _0x1eac44 >>> 0x12) << _0x13b4ab[0x3 & _0x5ae714++];
                        _0x433824[_0x5ae714 >>> 0x2] |= (0x80 | _0x1eac44 >>> 0xc & 0x3f) << _0x13b4ab[0x3 & _0x5ae714++];
                        _0x433824[_0x5ae714 >>> 0x2] |= (0x80 | _0x1eac44 >>> 0x6 & 0x3f) << _0x13b4ab[0x3 & _0x5ae714++];
                        _0x433824[_0x5ae714 >>> 0x2] |= (0x80 | 0x3f & _0x1eac44) << _0x13b4ab[0x3 & _0x5ae714++];
                    }
                }
            }
            this.lastByteIndex = _0x5ae714;
            this.bytes += _0x5ae714 - this.start;
            if (_0x5ae714 >= 0x40) {
                this.block = _0x433824[0x10];
                this.start = _0x5ae714 - 0x40;
                this.hash();
                this.hashed = true;
            } else {
                this.start = _0x5ae714;
            }
        }
        if (this.bytes > 0xffffffff) {
            this.hBytes += this.bytes / 0x100000000 << 0x0;
            this.bytes = this.bytes % 0x100000000;
        }
        return this;
    }
}

function _0x2f5ec1(_0x506d56, _0x142c98) {
    if (_0x142c98) {
        _0x159519[0x0] = _0x159519[0x10] = _0x159519[0x1] = _0x159519[0x2] = _0x159519[0x3] = _0x159519[0x4] = _0x159519[0x5] = _0x159519[0x6] = _0x159519[0x7] = _0x159519[0x8] = _0x159519[0x9] = _0x159519[0xa] = _0x159519[0xb] = _0x159519[0xc] = _0x159519[0xd] = _0x159519[0xe] = _0x159519[0xf] = 0x0;
        this.blocks = _0x159519;
    } else {
        this.blocks = [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];
    }
    if (_0x506d56) {
        this.h0 = 0xc1059ed8;
        this.h1 = 0x367cd507;
        this.h2 = 0x3070dd17;
        this.h3 = 0xf70e5939;
        this.h4 = 0xffc00b31;
        this.h5 = 0x68581511;
        this.h6 = 0x64f98fa7;
        this.h7 = 0xbefa4fa4;
    } else {
        this.h0 = 0x6a09e667;
        this.h1 = 0xbb67ae85;
        this.h2 = 0x3c6ef372;
        this.h3 = 0xa54ff53a;
        this.h4 = 0x510e527f;
        this.h5 = 0x9b05688c;
        this.h6 = 0x1f83d9ab;
        this.h7 = 0x5be0cd19;
    }
    this.block = this.start = this.bytes = this.hBytes = 0x0;
    this.finalized = this.hashed = false;
    this.first = true;
    this.is224 = _0x506d56;
}

function xooo(_0xbece56) {
    function _0x50a213(_0x47e4e0) {
        var _0x4a8091 = '';
        var _0x32f23e = '';
        var _0x1a2975;
        for (_0x1a2975 = 0x0; 0x3 >= _0x1a2975; _0x1a2975++) {
            _0x32f23e = _0x47e4e0 >>> 0x8 * _0x1a2975 & 0xff;
            _0x32f23e = "0" + _0x32f23e.toString(0x10);
            _0x4a8091 += _0x32f23e.substr(_0x32f23e.length - 0x2, 0x2);
        }
        return _0x4a8091;
    }

    var _0x1b8333 = [];
    var _0x28207d;
    var _0x383438;
    var _0x11fccf;
    var _0x3ce4d1;
    var _0x452f67;
    var _0x20d302;
    var _0x3a8a59;
    var _0x58cff2;
    _0xbece56 = function (_0x1a1913) {
        _0x1a1913 = _0x1a1913.replace(/\\r\\n/g, "\\n");
        var _0x34d0f0 = '';
        for (var _0x52db02 = 0x0; _0x52db02 < _0x1a1913.length; _0x52db02++) {
            var _0x23313b = _0x1a1913.charCodeAt(_0x52db02);
            if (0x80 > _0x23313b) {
                _0x34d0f0 += String.fromCharCode(_0x23313b);
            } else {
                if (0x7f < _0x23313b && 0x800 > _0x23313b) {
                    _0x34d0f0 += String.fromCharCode(_0x23313b >> 0x6 | 0xc0);
                } else {
                    _0x34d0f0 += String.fromCharCode(_0x23313b >> 0xc | 0xe0);
                    _0x34d0f0 += String.fromCharCode(_0x23313b >> 0x6 & 0x3f | 0x80);
                }
                _0x34d0f0 += String.fromCharCode(_0x23313b & 0x3f | 0x80);
            }
        }
        return _0x34d0f0;
    }(_0xbece56);
    _0x1b8333 = function (_0x857796) {
        var _0x1608a4;
        var _0x7de62 = _0x857796.length;
        _0x1608a4 = _0x7de62 + 0x8;
        var _0x1b0bcd = 0x10 * ((_0x1608a4 - _0x1608a4 % 0x40) / 0x40 + 0x1);
        var _0x26393 = Array(_0x1b0bcd - 0x1);
        var _0x5e2c4a = 0x0;
        for (var _0x5038ff = 0x0; _0x5038ff < _0x7de62;) {
            _0x1608a4 = (_0x5038ff - _0x5038ff % 0x4) / 0x4;
            _0x5e2c4a = _0x5038ff % 0x4 * 0x8;
            _0x26393[_0x1608a4] |= _0x857796.charCodeAt(_0x5038ff) << _0x5e2c4a;
            _0x5038ff++;
        }
        _0x1608a4 = (_0x5038ff - _0x5038ff % 0x4) / 0x4;
        _0x26393[_0x1608a4] |= 0x80 << _0x5038ff % 0x4 * 0x8;
        _0x26393[_0x1b0bcd - 0x2] = _0x7de62 << 0x3;
        _0x26393[_0x1b0bcd - 0x1] = _0x7de62 >>> 0x1d;
        return _0x26393;
    }(_0xbece56);
    _0x452f67 = 0x10325476;
    _0x20d302 = 0x98badcfe;
    _0x3a8a59 = 0xefcdab89;
    _0x58cff2 = 0x67452301;
    for (_0xbece56 = 0x0; _0xbece56 < _0x1b8333.length; _0xbece56 += 0x10) {
        _0x28207d = _0x452f67;
        _0x383438 = _0x20d302;
        _0x11fccf = _0x3a8a59;
        _0x3ce4d1 = _0x58cff2;
        _0x452f67 = k(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x0], 0x7, 0xd76aa478);
        _0x58cff2 = k(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x1], 0xc, 0xe8c7b756);
        _0x3a8a59 = k(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x2], 0x11, 0x242070db);
        _0x20d302 = k(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x3], 0x16, 0xc1bdceee);
        _0x452f67 = k(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x4], 0x7, 0xf57c0faf);
        _0x58cff2 = k(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x5], 0xc, 0x4787c62a);
        _0x3a8a59 = k(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x6], 0x11, 0xa8304613);
        _0x20d302 = k(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x7], 0x16, 0xfd469501);
        _0x452f67 = k(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x8], 0x7, 0x698098d8);
        _0x58cff2 = k(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x9], 0xc, 0x8b44f7af);
        _0x3a8a59 = k(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xa], 0x11, 0xffff5bb1);
        _0x20d302 = k(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0xb], 0x16, 0x895cd7be);
        _0x452f67 = k(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0xc], 0x7, 0x6b901122);
        _0x58cff2 = k(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0xd], 0xc, 0xfd987193);
        _0x3a8a59 = k(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xe], 0x11, 0xa679438e);
        _0x20d302 = k(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0xf], 0x16, 0x49b40821);
        _0x452f67 = l(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x1], 0x5, 0xf61e2562);
        _0x58cff2 = l(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x6], 0x9, 0xc040b340);
        _0x3a8a59 = l(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xb], 0xe, 0x265e5a51);
        _0x20d302 = l(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x0], 0x14, 0xe9b6c7aa);
        _0x452f67 = l(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x5], 0x5, 0xd62f105d);
        _0x58cff2 = l(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0xa], 0x9, 0x2441453);
        _0x3a8a59 = l(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xf], 0xe, 0xd8a1e681);
        _0x20d302 = l(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x4], 0x14, 0xe7d3fbc8);
        _0x452f67 = l(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x9], 0x5, 0x21e1cde6);
        _0x58cff2 = l(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0xe], 0x9, 0xc33707d6);
        _0x3a8a59 = l(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x3], 0xe, 0xf4d50d87);
        _0x20d302 = l(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x8], 0x14, 0x455a14ed);
        _0x452f67 = l(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0xd], 0x5, 0xa9e3e905);
        _0x58cff2 = l(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x2], 0x9, 0xfcefa3f8);
        _0x3a8a59 = l(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x7], 0xe, 0x676f02d9);
        _0x20d302 = l(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0xc], 0x14, 0x8d2a4c8a);
        _0x452f67 = m(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x5], 0x4, 0xfffa3942);
        _0x58cff2 = m(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x8], 0xb, 0x8771f681);
        _0x3a8a59 = m(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xb], 0x10, 0x6d9d6122);
        _0x20d302 = m(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0xe], 0x17, 0xfde5380c);
        _0x452f67 = m(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x1], 0x4, 0xa4beea44);
        _0x58cff2 = m(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x4], 0xb, 0x4bdecfa9);
        _0x3a8a59 = m(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x7], 0x10, 0xf6bb4b60);
        _0x20d302 = m(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0xa], 0x17, 0xbebfbc70);
        _0x452f67 = m(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0xd], 0x4, 0x289b7ec6);
        _0x58cff2 = m(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x0], 0xb, 0xeaa127fa);
        _0x3a8a59 = m(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x3], 0x10, 0xd4ef3085);
        _0x20d302 = m(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x6], 0x17, 0x4881d05);
        _0x452f67 = m(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x9], 0x4, 0xd9d4d039);
        _0x58cff2 = m(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0xc], 0xb, 0xe6db99e5);
        _0x3a8a59 = m(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xf], 0x10, 0x1fa27cf8);
        _0x20d302 = m(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x2], 0x17, 0xc4ac5665);
        _0x452f67 = n(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x0], 0x6, 0xf4292244);
        _0x58cff2 = n(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x7], 0xa, 0x432aff97);
        _0x3a8a59 = n(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xe], 0xf, 0xab9423a7);
        _0x20d302 = n(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x5], 0x15, 0xfc93a039);
        _0x452f67 = n(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0xc], 0x6, 0x655b59c3);
        _0x58cff2 = n(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0x3], 0xa, 0x8f0ccc92);
        _0x3a8a59 = n(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0xa], 0xf, 0xffeff47d);
        _0x20d302 = n(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x1], 0x15, 0x85845dd1);
        _0x452f67 = n(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x8], 0x6, 0x6fa87e4f);
        _0x58cff2 = n(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0xf], 0xa, 0xfe2ce6e0);
        _0x3a8a59 = n(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x6], 0xf, 0xa3014314);
        _0x20d302 = n(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0xd], 0x15, 0x4e0811a1);
        _0x452f67 = n(_0x452f67, _0x20d302, _0x3a8a59, _0x58cff2, _0x1b8333[_0xbece56 + 0x4], 0x6, 0xf7537e82);
        _0x58cff2 = n(_0x58cff2, _0x452f67, _0x20d302, _0x3a8a59, _0x1b8333[_0xbece56 + 0xb], 0xa, 0xbd3af235);
        _0x3a8a59 = n(_0x3a8a59, _0x58cff2, _0x452f67, _0x20d302, _0x1b8333[_0xbece56 + 0x2], 0xf, 0x2ad7d2bb);
        _0x20d302 = n(_0x20d302, _0x3a8a59, _0x58cff2, _0x452f67, _0x1b8333[_0xbece56 + 0x9], 0x15, 0xeb86d391);
        _0x452f67 = h(_0x452f67, _0x28207d);
        _0x20d302 = h(_0x20d302, _0x383438);
        _0x3a8a59 = h(_0x3a8a59, _0x11fccf);
        _0x58cff2 = h(_0x58cff2, _0x3ce4d1);
    }
    return (_0x50a213(_0x452f67) + _0x50a213(_0x20d302) + _0x50a213(_0x3a8a59) + _0x50a213(_0x58cff2)).toLowerCase();
}

_0x2f5ec1.prototype.hash = function () {
    var _0x4239a7 = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0xfc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x6ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
    var _0x3016bf;
    var _0x446928;
    var _0x5e7b33;
    var _0x3a4c3a;
    var _0x599202;
    var _0x910c6f;
    var _0x1ba87a;
    var _0x5de766;
    var _0x451132;
    var _0x1beb23 = this.h0;
    var _0x43e799 = this.h1;
    var _0x538181 = this.h2;
    var _0x3b26fb = this.h3;
    var _0x4f122e = this.h4;
    var _0x3a1bfd = this.h5;
    var _0x19be1d = this.h6;
    var _0x3bcd00 = this.h7;
    var _0x209954 = this.blocks;
    for (_0x3016bf = 0x10; _0x3016bf < 0x40; ++_0x3016bf) {
        _0x446928 = ((_0x599202 = _0x209954[_0x3016bf - 0xf]) >>> 0x7 | _0x599202 << 0x19) ^ (_0x599202 >>> 0x12 | _0x599202 << 0xe) ^ _0x599202 >>> 0x3;
        _0x5e7b33 = ((_0x599202 = _0x209954[_0x3016bf - 0x2]) >>> 0x11 | _0x599202 << 0xf) ^ (_0x599202 >>> 0x13 | _0x599202 << 0xd) ^ _0x599202 >>> 0xa;
        _0x209954[_0x3016bf] = _0x209954[_0x3016bf - 0x10] + _0x446928 + _0x209954[_0x3016bf - 0x7] + _0x5e7b33 << 0x0;
    }
    _0x451132 = _0x43e799 & _0x538181;
    for (_0x3016bf = 0x0; _0x3016bf < 0x40; _0x3016bf += 0x4) {
        if (this.first) {
            if (this.is224) {
                _0x910c6f = 0x49400;
                _0x3bcd00 = (_0x599202 = _0x209954[0x0] - 0x543c9a5b) - 0x8f1a6c7 << 0x0;
                _0x3b26fb = _0x599202 + 0x170e9b5 << 0x0;
            } else {
                _0x910c6f = 0x2a01a605;
                _0x3bcd00 = (_0x599202 = _0x209954[0x0] - 0xc881298) - 0x5ab00ac6 << 0x0;
                _0x3b26fb = _0x599202 + 0x8909ae5 << 0x0;
            }
            this.first = false;
        } else {
            _0x446928 = (_0x1beb23 >>> 0x2 | _0x1beb23 << 0x1e) ^ (_0x1beb23 >>> 0xd | _0x1beb23 << 0x13) ^ (_0x1beb23 >>> 0x16 | _0x1beb23 << 0xa);
            _0x3a4c3a = (_0x910c6f = _0x1beb23 & _0x43e799) ^ _0x1beb23 & _0x538181 ^ _0x451132;
            _0x3bcd00 = _0x3b26fb + (_0x599202 = _0x3bcd00 + (_0x5e7b33 = (_0x4f122e >>> 0x6 | _0x4f122e << 0x1a) ^ (_0x4f122e >>> 0xb | _0x4f122e << 0x15) ^ (_0x4f122e >>> 0x19 | _0x4f122e << 0x7)) + (_0x4f122e & _0x3a1bfd ^ ~_0x4f122e & _0x19be1d) + _0x4239a7[_0x3016bf] + _0x209954[_0x3016bf]) << 0x0;
            _0x3b26fb = _0x599202 + (_0x446928 + _0x3a4c3a) << 0x0;
        }
        _0x446928 = (_0x3b26fb >>> 0x2 | _0x3b26fb << 0x1e) ^ (_0x3b26fb >>> 0xd | _0x3b26fb << 0x13) ^ (_0x3b26fb >>> 0x16 | _0x3b26fb << 0xa);
        _0x3a4c3a = (_0x1ba87a = _0x3b26fb & _0x1beb23) ^ _0x3b26fb & _0x43e799 ^ _0x910c6f;
        _0x19be1d = _0x538181 + (_0x599202 = _0x19be1d + (_0x5e7b33 = (_0x3bcd00 >>> 0x6 | _0x3bcd00 << 0x1a) ^ (_0x3bcd00 >>> 0xb | _0x3bcd00 << 0x15) ^ (_0x3bcd00 >>> 0x19 | _0x3bcd00 << 0x7)) + (_0x3bcd00 & _0x4f122e ^ ~_0x3bcd00 & _0x3a1bfd) + _0x4239a7[_0x3016bf + 0x1] + _0x209954[_0x3016bf + 0x1]) << 0x0;
        _0x446928 = ((_0x538181 = _0x599202 + (_0x446928 + _0x3a4c3a) << 0x0) >>> 0x2 | _0x538181 << 0x1e) ^ (_0x538181 >>> 0xd | _0x538181 << 0x13) ^ (_0x538181 >>> 0x16 | _0x538181 << 0xa);
        _0x3a4c3a = (_0x5de766 = _0x538181 & _0x3b26fb) ^ _0x538181 & _0x1beb23 ^ _0x1ba87a;
        _0x3a1bfd = _0x43e799 + (_0x599202 = _0x3a1bfd + (_0x5e7b33 = (_0x19be1d >>> 0x6 | _0x19be1d << 0x1a) ^ (_0x19be1d >>> 0xb | _0x19be1d << 0x15) ^ (_0x19be1d >>> 0x19 | _0x19be1d << 0x7)) + (_0x19be1d & _0x3bcd00 ^ ~_0x19be1d & _0x4f122e) + _0x4239a7[_0x3016bf + 0x2] + _0x209954[_0x3016bf + 0x2]) << 0x0;
        _0x446928 = ((_0x43e799 = _0x599202 + (_0x446928 + _0x3a4c3a) << 0x0) >>> 0x2 | _0x43e799 << 0x1e) ^ (_0x43e799 >>> 0xd | _0x43e799 << 0x13) ^ (_0x43e799 >>> 0x16 | _0x43e799 << 0xa);
        _0x3a4c3a = (_0x451132 = _0x43e799 & _0x538181) ^ _0x43e799 & _0x3b26fb ^ _0x5de766;
        _0x4f122e = _0x1beb23 + (_0x599202 = _0x4f122e + (_0x5e7b33 = (_0x3a1bfd >>> 0x6 | _0x3a1bfd << 0x1a) ^ (_0x3a1bfd >>> 0xb | _0x3a1bfd << 0x15) ^ (_0x3a1bfd >>> 0x19 | _0x3a1bfd << 0x7)) + (_0x3a1bfd & _0x19be1d ^ ~_0x3a1bfd & _0x3bcd00) + _0x4239a7[_0x3016bf + 0x3] + _0x209954[_0x3016bf + 0x3]) << 0x0;
        _0x1beb23 = _0x599202 + (_0x446928 + _0x3a4c3a) << 0x0;
        this.chromeBugWorkAround = true;
    }
    this.h0 = this.h0 + _0x1beb23 << 0x0;
    this.h1 = this.h1 + _0x43e799 << 0x0;
    this.h2 = this.h2 + _0x538181 << 0x0;
    this.h3 = this.h3 + _0x3b26fb << 0x0;
    this.h4 = this.h4 + _0x4f122e << 0x0;
    this.h5 = this.h5 + _0x3a1bfd << 0x0;
    this.h6 = this.h6 + _0x19be1d << 0x0;
    this.h7 = this.h7 + _0x3bcd00 << 0x0;
}
_0x2f5ec1.prototype.finalize = function () {
    var _0x36a98e = [-0x80000000, 0x800000, 0x8000, 0x80]
    if (!this.finalized) {
        this.finalized = true;
        var _0x596268 = this.blocks;
        var _0xc4eb28 = this.lastByteIndex;
        _0x596268[0x10] = this.block;
        _0x596268[_0xc4eb28 >>> 0x2] |= _0x36a98e[0x3 & _0xc4eb28];
        this.block = _0x596268[0x10];
        if (_0xc4eb28 >= 0x38) {
            if (!this.hashed) {
                this.hash();
            }
            _0x596268[0x0] = this.block;
            _0x596268[0x10] = _0x596268[0x1] = _0x596268[0x2] = _0x596268[0x3] = _0x596268[0x4] = _0x596268[0x5] = _0x596268[0x6] = _0x596268[0x7] = _0x596268[0x8] = _0x596268[0x9] = _0x596268[0xa] = _0x596268[0xb] = _0x596268[0xc] = _0x596268[0xd] = _0x596268[0xe] = _0x596268[0xf] = 0x0;
        }
        _0x596268[0xe] = this.hBytes << 0x3 | this.bytes >>> 0x1d;
        _0x596268[0xf] = this.bytes << 0x3;
        this.hash();
    }
}
_0x2f5ec1.prototype.hex = function () {
    var _0x1d090b = "0123456789abcdef".split('');
    this.finalize();
    var _0x47c3b2 = this.h0;
    var _0x69a47f = this.h1;
    var _0x3b8092 = this.h2;
    var _0x4fcff2 = this.h3;
    var _0x309f87 = this.h4;
    var _0xebcba2 = this.h5;
    var _0x137053 = this.h6;
    var _0x445e35 = this.h7;
    var _0x291a21 = _0x1d090b[_0x47c3b2 >>> 0x1c & 0xf] + _0x1d090b[_0x47c3b2 >>> 0x18 & 0xf] + _0x1d090b[_0x47c3b2 >>> 0x14 & 0xf] + _0x1d090b[_0x47c3b2 >>> 0x10 & 0xf] + _0x1d090b[_0x47c3b2 >>> 0xc & 0xf] + _0x1d090b[_0x47c3b2 >>> 0x8 & 0xf] + _0x1d090b[_0x47c3b2 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x47c3b2] + _0x1d090b[_0x69a47f >>> 0x1c & 0xf] + _0x1d090b[_0x69a47f >>> 0x18 & 0xf] + _0x1d090b[_0x69a47f >>> 0x14 & 0xf] + _0x1d090b[_0x69a47f >>> 0x10 & 0xf] + _0x1d090b[_0x69a47f >>> 0xc & 0xf] + _0x1d090b[_0x69a47f >>> 0x8 & 0xf] + _0x1d090b[_0x69a47f >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x69a47f] + _0x1d090b[_0x3b8092 >>> 0x1c & 0xf] + _0x1d090b[_0x3b8092 >>> 0x18 & 0xf] + _0x1d090b[_0x3b8092 >>> 0x14 & 0xf] + _0x1d090b[_0x3b8092 >>> 0x10 & 0xf] + _0x1d090b[_0x3b8092 >>> 0xc & 0xf] + _0x1d090b[_0x3b8092 >>> 0x8 & 0xf] + _0x1d090b[_0x3b8092 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x3b8092] + _0x1d090b[_0x4fcff2 >>> 0x1c & 0xf] + _0x1d090b[_0x4fcff2 >>> 0x18 & 0xf] + _0x1d090b[_0x4fcff2 >>> 0x14 & 0xf] + _0x1d090b[_0x4fcff2 >>> 0x10 & 0xf] + _0x1d090b[_0x4fcff2 >>> 0xc & 0xf] + _0x1d090b[_0x4fcff2 >>> 0x8 & 0xf] + _0x1d090b[_0x4fcff2 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x4fcff2] + _0x1d090b[_0x309f87 >>> 0x1c & 0xf] + _0x1d090b[_0x309f87 >>> 0x18 & 0xf] + _0x1d090b[_0x309f87 >>> 0x14 & 0xf] + _0x1d090b[_0x309f87 >>> 0x10 & 0xf] + _0x1d090b[_0x309f87 >>> 0xc & 0xf] + _0x1d090b[_0x309f87 >>> 0x8 & 0xf] + _0x1d090b[_0x309f87 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x309f87] + _0x1d090b[_0xebcba2 >>> 0x1c & 0xf] + _0x1d090b[_0xebcba2 >>> 0x18 & 0xf] + _0x1d090b[_0xebcba2 >>> 0x14 & 0xf] + _0x1d090b[_0xebcba2 >>> 0x10 & 0xf] + _0x1d090b[_0xebcba2 >>> 0xc & 0xf] + _0x1d090b[_0xebcba2 >>> 0x8 & 0xf] + _0x1d090b[_0xebcba2 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0xebcba2] + _0x1d090b[_0x137053 >>> 0x1c & 0xf] + _0x1d090b[_0x137053 >>> 0x18 & 0xf] + _0x1d090b[_0x137053 >>> 0x14 & 0xf] + _0x1d090b[_0x137053 >>> 0x10 & 0xf] + _0x1d090b[_0x137053 >>> 0xc & 0xf] + _0x1d090b[_0x137053 >>> 0x8 & 0xf] + _0x1d090b[_0x137053 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x137053];
    if (!this.is224) {
        _0x291a21 += _0x1d090b[_0x445e35 >>> 0x1c & 0xf] + _0x1d090b[_0x445e35 >>> 0x18 & 0xf] + _0x1d090b[_0x445e35 >>> 0x14 & 0xf] + _0x1d090b[_0x445e35 >>> 0x10 & 0xf] + _0x1d090b[_0x445e35 >>> 0xc & 0xf] + _0x1d090b[_0x445e35 >>> 0x8 & 0xf] + _0x1d090b[_0x445e35 >>> 0x4 & 0xf] + _0x1d090b[0xf & _0x445e35];
    }
    return _0x291a21;
}

function sha256(_0x5a1594) {
    return new _0x2f5ec1(undefined, true).update(_0x5a1594)["hex"]();
}

function OOOO(_0x58d4b1, _0x19e7b0, _0x19c60c, _0x21036e, _0x19a1bf) {
    let _0x418c3c = OOXX();
    return sha256(xooo(_0x58d4b1 + _0x418c3c));
}

console.log(OOOO("/api/problem-detail/10/data/?page=6"));

本题大概就是解混淆 + 补环境,还原它的魔改算法的逻辑就好了~

代码实现

最后贴出python代码

"""
-*- coding: utf-8 -*-
@File   : .py
@author : @鲨鱼爱兜兜
@Time   : 2025/04/06 0:41
"""

import requests
import execjs

cookies = {
    'sessionid': '你的值',
    'Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183': '1743870511,1743871379,1743932867,1743933915',
    'HMACCOUNT': '你的值',
    'Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183': '1743934341',
}
headers = {
    'accept': 'application/json, text/javascript, */*; q=0.01',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'cache-control': 'no-cache',
    'pragma': 'no-cache',
    'priority': 'u=1, i',
    'referer': 'https://stu.tulingpyton.cn/problem-detail/10/',
    'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
    'x-requested-with': 'XMLHttpRequest',
}
with open('./题十-魔改算法.js', encoding='utf-8') as f:
    js_code = f.read()
s = 0
for page in range(1, 21):
    params = {
        'page': f'{page}',
        't': execjs.compile(js_code).call('OOOO', f"/api/problem-detail/10/data/?page={page}")
    }
    response = requests.get('https://stu.tulingpyton.cn/api/problem-detail/10/data/', params=params, cookies=cookies,
                            headers=headers)
    response.raise_for_status()
    response.encoding = 'utf-8'
    print(response.json())
    s += sum(response.json()['current_array'])
print(s)

运行结果

在这里插入图片描述

第十题,勉强秒了[doge]~
@鲨鱼爱兜兜

相关文章:

  • Tigshop| 一个基于Java的开源商城系统
  • C++初级入门学习
  • Android里面如何优化xml布局
  • 应急物资仓库管理系统|基于GAV仓库管理的应用
  • 美*WMS项目总结
  • ​如何判断安捷伦气质联用仪GCMS 8890-5977B 四级杆是否需要更换​
  • Linux——进程概念
  • RTK 实时动态定位概述
  • Java 中 SQL 注入问题剖析​
  • TrueNAS scale(23.10) Restful API接口调用
  • LLM 为什么使用ID,每个单词不都是有编码的吗
  • vit中的位置编码,RoPE旋转位置编码,torch.nn.functional.embedding
  • 动态路由刷新后消失或重定向到404
  • CCF-GESP(编程能力等级认证)
  • openpyxl合并连续相同元素的单元格
  • RVOS-2.基于NS16550a ,为os添加终端交互功能。
  • 车载刷写架构 --- ECU收到相同的blockSequenceCounter数据包的思考
  • Java Collections 类中常用方法使用
  • Elasticsearch 系列专题 - 第二篇:数据建模与索引管理
  • Traefik应用:配置容器多个网络时无法访问问题
  • 佛山网站建设骏域网站建设专家/seo零基础教学
  • 驻马店做网站哪家好/百度seo关键词排名优化软件
  • 室内设计公司的运营模式/seo关键词优化最多可以添加几个词
  • 如何下载js做的网站/长尾关键词什么意思
  • 代码源/什么是优化师
  • 可以做游戏的网站有哪些内容/石家庄网络推广优化