“某志愿”高考報(bào)考平臺(tái)

請求加密 響應(yīng)解密 字體解密

地址: aHR0cHM6Ly95b3V6eS5jbi8=
字體加密暫時(shí)沒有公開密文,看我代碼應(yīng)該能搞出來

# -*- coding: utf-8 -*-
import re
import html, js2py
from hashlib import md5


class DecryptFont:
    """
    解密字體
    """
    str_code="評論區(qū)"
    kv_data="評論區(qū)"

    def _str_index_list(self):
        """
        字體文件中字體和位置的映射
        :return:
        """
        return re.findall(r'\S+?', self.str_code)  # 從文件中提取

    def _ascii_index_dict(self):
        """
        字體文件中 獲取id和字符編碼的映射關(guān)系
        :return:
        """
        #
        # with open('./font_file/yfe2.xml', 'r', encoding='utf-8') as f:
        #     xml_data = f.read()
        # kv_data = re.findall(r'<GlyphID id="(\d+)" name="(\S+)"/>', xml_data)
        y_dict = dict(self.kv_data)
        reversed_dict = dict(zip(y_dict.values(), y_dict.keys()))
        return reversed_dict

    @staticmethod
    def _tran_code(string):
        # 編碼為 Unicode 轉(zhuǎn)義序列
        unicode_escape = string.encode('unicode_escape')
        # 轉(zhuǎn)為字符串并打印
        unicode_escape_string = unicode_escape.decode('utf-8')
        return unicode_escape_string

    def decrypt_str(self, S_str):
        reversed_dict = self._ascii_index_dict()
        dd_list = self._str_index_list()
        r_s = ""
        for S in S_str:
            code = self._tran_code(S)
            if r'\uc' in code:
                S = dd_list[int(reversed_dict[code.upper().replace(r'\UC', 'uniC')])]
            elif r'\ud' in code:
                S = dd_list[int(reversed_dict[code.upper().replace(r'\UD', 'uniD')])]
            r_s += S
        return r_s


class DecryptResData:
    '''
    響應(yīng)值解密
    '''
    js_code = """
        function cnDeCryptV2(str) {
            var k = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", l = k.length, b, b0, b1, b2, b3, d = 0, s;
            s = new Array(Math.floor(str.length / 4)),
            b = s.length;
            for (var i = 0; i < b; i++)
                b0 = k.indexOf(str.charAt(d)),
                d++,
                b1 = k.indexOf(str.charAt(d)),
                d++,
                b2 = k.indexOf(str.charAt(d)),
                d++,
                b3 = k.indexOf(str.charAt(d)),
                d++,
                s[i] = ((b1 + b0 * l) * l + b2) * l + b3;
            b = eval("String.fromCharCode(" + s.join(",") + ")");
            var w = "";
            return b.split("|").forEach((function(e, t) {
                t > 0 && (-1 != e.search(/【(.*?)】/) ? w += e.replace("【", "").replace("】", "") : e.length > 0 && (w += "&#x" + e + ";"))
            }
            )),
            w
        }
        """

    def __init__(self):
        self.context = js2py.EvalJs()
        self.context.execute(self.js_code)

    def decrypt(self, k):
        result = self.context.cnDeCryptV2(k)
        return html.unescape(result)


class DecryptReqData:
    '''
    請求參數(shù)加密
    '''
    key = '9SASji5OWnG41iRKiSvTJHlXHmRySRp1'

    def encrypt(self, data):
        sign_data = f"{data.lower()}&{self.key.lower()}"
        return md5(sign_data.encode()).hexdigest()



if __name__ == '__main__':
    dd = "????"
    res = DecryptFont().decrypt_str(dd)
    print(res)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容