吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11002|回复: 44
收起左侧

[Python 原创] 正方教务系统成绩爬取(仅个人)+tk可视化

[复制链接]
bags 发表于 2020-7-6 23:45
本帖最后由 bags 于 2020-7-6 23:54 编辑

查了一下资料,应该是新版的正方教务系统,如果不是请略过。。。
代码比较乱,比较烂。。。有兴趣的同学可以一起探讨优化下
特点:
1.tk可视化,操作简单
2.有两个线程,避免死循环时程序假死
3.出成绩发邮件通知
不足:
1.登录教务系统是密码通过js进行加密,因能力问题无法整合到py中,只能进行整个调用
2.程序运行过程中无法最小化至系统托盘
程序编译后的样图:
1.png 3.png
因为各校教务系统不一样,就不提供成品,以下是python源码和爬下来的js文件(在py中命名为js.js)
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import ttk
import requests,json,execjs,os,smtplib,time,threading
from lxml import etree
from email.mime.text import MIMEText
from email.header import Header

class PyWinDesign:
    def __init__(self, 启动窗口):
        self.启动窗口 = 启动窗口
        self.启动窗口.title('fjut期末成绩查询(循环爬取)——by浅山藏')
        self.启动窗口.resizable(width=False, height=False)
        screenwidth = self.启动窗口.winfo_screenwidth()
        screenheight = self.启动窗口.winfo_screenheight()
        size = '%dx%d+%d+%d' % (448, 452, (screenwidth - 448) / 2, (screenheight - 452) / 2)
        self.启动窗口.geometry(size)
        
        self.标签1_标题 = tk.StringVar()
        self.标签1_标题.set('账号')
        self.标签1 = tk.Label(self.启动窗口,textvariable=self.标签1_标题,anchor=tk.W)
        self.标签1.place(x=20,y=16,width=35,height=30)
        
        self.标签2_标题 = tk.StringVar()
        self.标签2_标题.set('密码')
        self.标签2 = tk.Label(self.启动窗口,textvariable=self.标签2_标题,anchor=tk.W)
        self.标签2.place(x=20,y=56,width=35,height=30)
        
        self.标签3_标题 = tk.StringVar()
        self.标签3_标题.set('邮箱')
        self.标签3 = tk.Label(self.启动窗口,textvariable=self.标签3_标题,anchor=tk.W)
        self.标签3.place(x=20,y=96,width=35,height=30)
        
        self.编辑框1 = tk.Text(self.启动窗口,wrap=tk.NONE)
        self.编辑框1.insert(tk.END,'')
        self.编辑框1.place(x=75,y=20,width=300,height=25)
        
        self.编辑框2_标题 = tk.StringVar()
        self.编辑框2 =tk.Entry(self.启动窗口, textvariable=self.编辑框2_标题, show='*')
        self.编辑框2.place(x=75,y=60,width=300,height=25)
        
        self.编辑框3 = tk.Text(self.启动窗口,wrap=tk.NONE)
        self.编辑框3.insert(tk.END,'')
        self.编辑框3.place(x=75,y=96,width=300,height=25)
        
        self.按钮1_标题 = tk.StringVar()
        self.按钮1_标题.set('查询')
        self.按钮1 = tk.Button(self.启动窗口,textvariable=self.按钮1_标题,command=self.按钮1_被鼠标左键单击)
        self.按钮1.place(x=168,y=139,width=112,height=43)
        
        self.编辑框4_滚动条_纵 = tk.Scrollbar(self.启动窗口)
        self.编辑框4_滚动条_纵.place(x=415,y=191,width=18,height=227)
        self.编辑框4 = tk.Text(self.启动窗口,yscrollcommand=self.编辑框4_滚动条_纵.set,wrap=tk.WORD)
        self.编辑框4_滚动条_纵.config(command=self.编辑框4.yview)
        self.编辑框4.insert(tk.END,'')
        self.编辑框4.place(x=23,y=191,width=392,height=227)
        #此处是通过讯飞及时告知版本失效或需要更新
        url = 'http://www.iyuji.cn/iyuji/s/anZ1T2k2UG9Hak1FdHhmalZ5YmpiUT09/1593880983627694'
        req = requests.get(url).text
        html = etree.HTML(req)
        txts = html.xpath('//*[@class="vp_text"]/p')
        ti = ''
        for txt in txts:
            txt = txt.xpath('.//text()')[0]
            ti = ti + txt + '\n'
        self.编辑框4.insert(tk.END,ti)
        self.编辑框4.insert(tk.END,'\n')  
        #此次检验key文件是否存在,存在则自动填写
        if os.path.exists('key.txt'):
            f = open('key.txt','r')    
            user = f.readline()
            password = f.readline()
            QQ = f.readline()
            self.编辑框1.insert(tk.END,user)
            self.编辑框2.insert(tk.END,password)
            self.编辑框3.insert(tk.END,QQ)
            f.close()
        else:
            pass

    def 按钮1_被鼠标左键单击(self):
        #启动A线程
        t1=A()
        t1.start()


class A(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        while True:
            try:
                #获取编辑框账号密码邮箱并写入文件
                user = app.编辑框1.get('0.0','end')
                password = app.编辑框2.get()
                QQ = app.编辑框3.get('0.0','end')
                user = user.replace('\n','')
                password = password.replace('\n','')
                QQ = QQ.replace('\n','')
                f = open('key.txt','w',encoding='utf-8')   
                f.write(user+'\r'+password+'\r'+QQ)
                f.close()

                #获取webvpn界面的ktoken
                session = requests.session()
                url = 'https://webvpn.****.edu.cn/users/sign_in'
                headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36',
                'Cookie': 'SERVERID=Server1; _webvpn_key=; webvpn_username=; _astraeus_session=cGoxeC9FRlZzSjlORVpFemh0RDRwd2dQeDRzaUp2K0Y2VkU2VWNlTzgyVUJKRWdEYkJPUGVMSGM4QVN6U0FiajN3MGNyVGtXTkhaL0RoT3JhSDBxN1ZTRTlQa1JpS2dab1A0UmgwZ2UzQVQxUmxLbm5Ra0l0N2lSTzRTcVAycjB5SjhGRUV0LzZPcHQzU0RrK3FZUVNiaWhQemNlcE8zVDFlUTNHYnBwV3lRRFlzbmxBcjlsallyMzF0MFR6cmtPcHZlUFJqMnJqelhocHQrRXl4bUJEZz09LS1PVDJBK2F2NEYzQ0I3SEdXczE4TlBBPT0%3D--0df58374967ad0e53ec583a54d7dcc32c848500c'
                }
                r1 = session.get('https://webvpn.****.edu.cn/users/sign_in',headers=headers).text
                html = etree.HTML(r1)
                token = html.xpath('/html/body/div[1]/div[2]/div[2]/form/input[2]/@value')[0]
                
                #登录webvpn
                headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36',
                'Cookie': 'SERVERID=Server1; _webvpn_key=; webvpn_username=; _astraeus_session=cGoxeC9FRlZzSjlORVpFemh0RDRwd2dQeDRzaUp2K0Y2VkU2VWNlTzgyVUJKRWdEYkJPUGVMSGM4QVN6U0FiajN3MGNyVGtXTkhaL0RoT3JhSDBxN1ZTRTlQa1JpS2dab1A0UmgwZ2UzQVQxUmxLbm5Ra0l0N2lSTzRTcVAycjB5SjhGRUV0LzZPcHQzU0RrK3FZUVNiaWhQemNlcE8zVDFlUTNHYnBwV3lRRFlzbmxBcjlsallyMzF0MFR6cmtPcHZlUFJqMnJqelhocHQrRXl4bUJEZz09LS1PVDJBK2F2NEYzQ0I3SEdXczE4TlBBPT0%3D--0df58374967ad0e53ec583a54d7dcc32c848500c'
                }
                data = {
                'utf8': '✓',
                'authenticity_token': token,
                'user[login]': user,
                'user[password]': password,
                'user[dymatice_code]': 'unknown',
                'commit': '登录 Login'
                }
                r2 = session.post('https://webvpn.****.edu.cn/users/sign_in',headers=headers,data=data)
                #登录教务系统
                url = 'https://nids-443.webvpn.****.edu.cn/authserver/login?service=https%3A%2F%2Fjwxt-443.webvpn.****.edu.cn%2Fsso%2Fjziotlogin'
                headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36',}
                r3 = session.get(url,headers=headers).text
                html = etree.HTML(r3)
                pwdDefaultEncryptSalt  = html.xpath('//*[@id="pwdDefaultEncryptSalt"]/@value')[0]
                lk = html.xpath('//*[@id="casLoginForm"]/input[1]/@value')[0]
                execution = html.xpath('//*[@id="casLoginForm"]/input[3]/@value')[0]
                f = open("js.js", "r") 
                js = f.read()            # 读取js文件
                js = execjs.compile(js)  # 编译执行js代码
                password_new = js.call('_etd2',password,pwdDefaultEncryptSalt )
                password_new = str(password_new)
                data = {
                'username': user,
                'password': password_new,
                'lt':lk,
                'dllt': 'userNamePasswordLogin',
                'execution': execution,
                '_eventId': 'submit',
                'rmShown': '1'
                }
                headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36'}
                r4 = session.post(url,headers=headers,data=data)
                #打开成绩查询界面
                url = 'https://jwxt-443.webvpn.****.edu.cn/jwglxt/cjcx/cjcx_cxDgXscj.html?doType=query&gnmkdm=N305005'
                headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36'}
                data = {
                'xnm':'2019',
                'xqm':'12',
                'queryModel.showCount': '20'
                }
                r5 = session.post(url,data=data,headers=headers).json()
                xm = r5['items'][0]['xm']
                path = xm+'.txt'
                #检验本地成绩文件是否存在并于爬取到的成绩进行对比
                if os.path.exists(path):
                    n = int(r5['totalResult'])
                    f = open(path,'r+',encoding="utf-8")
                    lines = f.readlines()
                    cj_all = ''
                    for line in lines:
                        cj_all = cj_all+line
                    f.close()

                    for i in range(0,n):
                        kcmc = r5['items'][i]['kcmc']
                        bfzcj = r5['items'][i]['bfzcj']
                        cj = str(kcmc)+'    成绩:'+str(bfzcj) + '分 '
                        if cj+'\n' in lines:
                            app.编辑框4.insert(tk.END,'成绩未更新\n')
                            pass
                        else:
                            fo = open(path,'a',encoding="utf-8")
                            fo.write(cj+'\n')
                            fo.close()
                            new_cj = cj
                            cj_all = cj_all + new_cj
                            app.编辑框4.delete('1.0','end')
                            app.编辑框4.insert(tk.END,'出新成绩了!\n')
                            app.编辑框4.insert(tk.END,new_cj+'\n')
                            
                            #发送邮件
                            from_addr = ''                                                                  ########此处写入发送邮件的邮箱###########
                            password = ''                                                                         ##########此处写入该邮箱密钥#############
                            to_addr = QQ
                            smtp_server = 'smtp.qq.com'  
                            msg = MIMEText(cj_all,'plain','utf-8')
                            # 邮件头信息
                            msg['From'] = Header(from_addr)
                            msg['To'] = Header(to_addr)
                            msg['Subject'] = Header('出新成绩啦: '+new_cj)
                            server=smtplib.SMTP_SSL(smtp_server)
                            server.connect(smtp_server,465)
                            # 登录发信邮箱
                            server.login(from_addr, password)
                            # 发送邮件
                            server.sendmail(from_addr, to_addr, msg.as_string())
                            # 关闭服务器
                            server.quit()
                            app.编辑框4.insert(tk.END,'邮件发送成功\n')
                    
                else:
                    app.编辑框4.delete('1.0','end')
                    f = open(path,'w',encoding="utf-8")
                    f.close()
                    n = int(r5['totalResult'])
                    f = open(path,'r+',encoding="utf-8")
                    for i in range(0,n):
                        kcmc = r5['items'][i]['kcmc']
                        bfzcj = r5['items'][i]['bfzcj']
                        cj = str(kcmc)+'    成绩:'+str(bfzcj) + '分 '
                        app.编辑框4.insert(tk.END,cj+'\n')
                        fo = open(path,'a+',encoding="utf-8")
                        fo.write(cj+'\n')
                        fo.close()
                    app.编辑框4.insert(tk.END,'未检测到本地成绩信息,已创建文件\n')
                time.sleep(300)
            except:
                app.编辑框4.delete('1.0','end')
                app.编辑框4.insert(tk.END,'查询成绩失败,原因未知,如首次报错请检查账号密码及邮箱是否正确,如运行过程中报错,请尝试重启,还是报错。。。请等待修复——by.浅山藏')
            
if __name__ == '__main__':
    root = tk.Tk()
    app = PyWinDesign(root)
    root.mainloop()



JS 文件:
[JavaScript] 纯文本查看 复制代码
var CryptoJS = CryptoJS || function (u, p) {
    var d = {},
        l = d.lib = {},
        s = function () {},
        t = l.Base = {
            extend: function (a) {
                s.prototype = this;
                var c = new s;
                a && c.mixIn(a);
                c.hasOwnProperty("init") || (c.init = function () {
                    c.$super.init.apply(this, arguments)
                });
                c.init.prototype = c;
                c.$super = this;
                return c
            }, create: function () {
                var a = this.extend();
                a.init.apply(a, arguments);
                return a
            }, init: function () {}, mixIn: function (a) {
                for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
                a.hasOwnProperty("toString") && (this.toString = a.toString)
            }, clone: function () {
                return this.init.prototype.extend(this)
            }
        },
        r = l.WordArray = t.extend({
            init: function (a, c) {
                a = this.words = a || [];
                this.sigBytes = c != p ? c : 4 * a.length
            }, toString: function (a) {
                return (a || v).stringify(this)
            }, concat: function (a) {
                var c = this.words,
                    e = a.words,
                    j = this.sigBytes;
                a = a.sigBytes;
                this.clamp();
                if (j % 4)
                    for (var k = 0; k < a; k++) c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
                else if (65535 < e.length)
                    for (k = 0; k < a; k += 4) c[j + k >>> 2] = e[k >>> 2];
                else c.push.apply(c, e);
                this.sigBytes += a;
                return this
            }, clamp: function () {
                var a = this.words,
                    c = this.sigBytes;
                a[c >>> 2] &= 4294967295 <<
                    32 - 8 * (c % 4);
                a.length = u.ceil(c / 4)
            }, clone: function () {
                var a = t.clone.call(this);
                a.words = this.words.slice(0);
                return a
            }, random: function (a) {
                for (var c = [], e = 0; e < a; e += 4) c.push(4294967296 * u.random() | 0);
                return new r.init(c, a)
            }
        }),
        w = d.enc = {},
        v = w.Hex = {
            stringify: function (a) {
                var c = a.words;
                a = a.sigBytes;
                for (var e = [], j = 0; j < a; j++) {
                    var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
                    e.push((k >>> 4).toString(16));
                    e.push((k & 15).toString(16))
                }
                return e.join("")
            }, parse: function (a) {
                for (var c = a.length, e = [], j = 0; j < c; j += 2) e[j >>> 3] |= parseInt(a.substr(j,
                    2), 16) << 24 - 4 * (j % 8);
                return new r.init(e, c / 2)
            }
        },
        b = w.Latin1 = {
            stringify: function (a) {
                var c = a.words;
                a = a.sigBytes;
                for (var e = [], j = 0; j < a; j++) e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
                return e.join("")
            }, parse: function (a) {
                for (var c = a.length, e = [], j = 0; j < c; j++) e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
                return new r.init(e, c)
            }
        },
        x = w.Utf8 = {
            stringify: function (a) {
                try {
                    return decodeURIComponent(escape(b.stringify(a)))
                } catch (c) {
                    throw Error("Malformed UTF-8 data");
                }
            }, parse: function (a) {
                return b.parse(unescape(encodeURIComponent(a)))
            }
        },
        q = l.BufferedBlockAlgorithm = t.extend({
            reset: function () {
                this._data = new r.init;
                this._nDataBytes = 0
            }, _append: function (a) {
                "string" == typeof a && (a = x.parse(a));
                this._data.concat(a);
                this._nDataBytes += a.sigBytes
            }, _process: function (a) {
                var c = this._data,
                    e = c.words,
                    j = c.sigBytes,
                    k = this.blockSize,
                    b = j / (4 * k),
                    b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0);
                a = b * k;
                j = u.min(4 * a, j);
                if (a) {
                    for (var q = 0; q < a; q += k) this._doProcessBlock(e, q);
                    q = e.splice(0, a);
                    c.sigBytes -= j
                }
                return new r.init(q, j)
            }, clone: function () {
                var a = t.clone.call(this);
                a._data = this._data.clone();
                return a
            }, _minBufferSize: 0
        });
    l.Hasher = q.extend({
        cfg: t.extend(),
        init: function (a) {
            this.cfg = this.cfg.extend(a);
            this.reset()
        }, reset: function () {
            q.reset.call(this);
            this._doReset()
        }, update: function (a) {
            this._append(a);
            this._process();
            return this
        }, finalize: function (a) {
            a && this._append(a);
            return this._doFinalize()
        }, blockSize: 16,
        _createHelper: function (a) {
            return function (b, e) {
                return (new a.init(e)).finalize(b)
            }
        }, _createHmacHelper: function (a) {
            return function (b, e) {
                return (new n.HMAC.init(a,
                    e)).finalize(b)
            }
        }
    });
    var n = d.algo = {};
    return d
}(Math);
(function () {
    var u = CryptoJS,
        p = u.lib.WordArray;
    u.enc.Base64 = {
        stringify: function (d) {
            var l = d.words,
                p = d.sigBytes,
                t = this._map;
            d.clamp();
            d = [];
            for (var r = 0; r < p; r += 3)
                for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++) d.push(t.charAt(w >>> 6 * (3 - v) & 63));
            if (l = t.charAt(64))
                for (; d.length % 4;) d.push(l);
            return d.join("")
        }, parse: function (d) {
            var l = d.length,
                s = this._map,
                t = s.charAt(64);
            t && (t = d.indexOf(t), -1 != t && (l = t));
            for (var t = [], r = 0, w = 0; w <
                l; w++)
                if (w % 4) {
                    var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4),
                        b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
                    t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
                    r++
                }
            return p.create(t, r)
        }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    }
})();
(function (u) {
    function p(b, n, a, c, e, j, k) {
        b = b + (n & a | ~n & c) + e + k;
        return (b << j | b >>> 32 - j) + n
    }

    function d(b, n, a, c, e, j, k) {
        b = b + (n & c | a & ~c) + e + k;
        return (b << j | b >>> 32 - j) + n
    }

    function l(b, n, a, c, e, j, k) {
        b = b + (n ^ a ^ c) + e + k;
        return (b << j | b >>> 32 - j) + n
    }

    function s(b, n, a, c, e, j, k) {
        b = b + (a ^ (n | ~c)) + e + k;
        return (b << j | b >>> 32 - j) + n
    }
    for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++) b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
    r = r.MD5 = v.extend({
        _doReset: function () {
                this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878])
            },
            _doProcessBlock: function (q, n) {
                for (var a = 0; 16 > a; a++) {
                    var c = n + a,
                        e = q[c];
                    q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
                }
                var a = this._hash.words,
                    c = q[n + 0],
                    e = q[n + 1],
                    j = q[n + 2],
                    k = q[n + 3],
                    z = q[n + 4],
                    r = q[n + 5],
                    t = q[n + 6],
                    w = q[n + 7],
                    v = q[n + 8],
                    A = q[n + 9],
                    B = q[n + 10],
                    C = q[n + 11],
                    u = q[n + 12],
                    D = q[n + 13],
                    E = q[n + 14],
                    x = q[n + 15],
                    f = a[0],
                    m = a[1],
                    g = a[2],
                    h = a[3],
                    f = p(f, m, g, h, c, 7, b[0]),
                    h = p(h, f, m, g, e, 12, b[1]),
                    g = p(g, h, f, m, j, 17, b[2]),
                    m = p(m, g, h, f, k, 22, b[3]),
                    f = p(f, m, g, h, z, 7, b[4]),
                    h = p(h, f, m, g, r, 12, b[5]),
                    g = p(g, h, f, m, t, 17, b[6]),
                    m = p(m, g, h, f, w, 22, b[7]),
                    f = p(f, m, g, h, v, 7, b[8]),
                    h = p(h, f, m, g, A, 12, b[9]),
                    g = p(g, h, f, m, B, 17, b[10]),
                    m = p(m, g, h, f, C, 22, b[11]),
                    f = p(f, m, g, h, u, 7, b[12]),
                    h = p(h, f, m, g, D, 12, b[13]),
                    g = p(g, h, f, m, E, 17, b[14]),
                    m = p(m, g, h, f, x, 22, b[15]),
                    f = d(f, m, g, h, e, 5, b[16]),
                    h = d(h, f, m, g, t, 9, b[17]),
                    g = d(g, h, f, m, C, 14, b[18]),
                    m = d(m, g, h, f, c, 20, b[19]),
                    f = d(f, m, g, h, r, 5, b[20]),
                    h = d(h, f, m, g, B, 9, b[21]),
                    g = d(g, h, f, m, x, 14, b[22]),
                    m = d(m, g, h, f, z, 20, b[23]),
                    f = d(f, m, g, h, A, 5, b[24]),
                    h = d(h, f, m, g, E, 9, b[25]),
                    g = d(g, h, f, m, k, 14, b[26]),
                    m = d(m, g, h, f, v, 20, b[27]),
                    f = d(f, m, g, h, D, 5, b[28]),
                    h = d(h, f,
                        m, g, j, 9, b[29]),
                    g = d(g, h, f, m, w, 14, b[30]),
                    m = d(m, g, h, f, u, 20, b[31]),
                    f = l(f, m, g, h, r, 4, b[32]),
                    h = l(h, f, m, g, v, 11, b[33]),
                    g = l(g, h, f, m, C, 16, b[34]),
                    m = l(m, g, h, f, E, 23, b[35]),
                    f = l(f, m, g, h, e, 4, b[36]),
                    h = l(h, f, m, g, z, 11, b[37]),
                    g = l(g, h, f, m, w, 16, b[38]),
                    m = l(m, g, h, f, B, 23, b[39]),
                    f = l(f, m, g, h, D, 4, b[40]),
                    h = l(h, f, m, g, c, 11, b[41]),
                    g = l(g, h, f, m, k, 16, b[42]),
                    m = l(m, g, h, f, t, 23, b[43]),
                    f = l(f, m, g, h, A, 4, b[44]),
                    h = l(h, f, m, g, u, 11, b[45]),
                    g = l(g, h, f, m, x, 16, b[46]),
                    m = l(m, g, h, f, j, 23, b[47]),
                    f = s(f, m, g, h, c, 6, b[48]),
                    h = s(h, f, m, g, w, 10, b[49]),
                    g = s(g, h, f, m,
                        E, 15, b[50]),
                    m = s(m, g, h, f, r, 21, b[51]),
                    f = s(f, m, g, h, u, 6, b[52]),
                    h = s(h, f, m, g, k, 10, b[53]),
                    g = s(g, h, f, m, B, 15, b[54]),
                    m = s(m, g, h, f, e, 21, b[55]),
                    f = s(f, m, g, h, v, 6, b[56]),
                    h = s(h, f, m, g, x, 10, b[57]),
                    g = s(g, h, f, m, t, 15, b[58]),
                    m = s(m, g, h, f, D, 21, b[59]),
                    f = s(f, m, g, h, z, 6, b[60]),
                    h = s(h, f, m, g, C, 10, b[61]),
                    g = s(g, h, f, m, j, 15, b[62]),
                    m = s(m, g, h, f, A, 21, b[63]);
                a[0] = a[0] + f | 0;
                a[1] = a[1] + m | 0;
                a[2] = a[2] + g | 0;
                a[3] = a[3] + h | 0
            }, _doFinalize: function () {
                var b = this._data,
                    n = b.words,
                    a = 8 * this._nDataBytes,
                    c = 8 * b.sigBytes;
                n[c >>> 5] |= 128 << 24 - c % 32;
                var e = u.floor(a /
                    4294967296);
                n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
                n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
                b.sigBytes = 4 * (n.length + 1);
                this._process();
                b = this._hash;
                n = b.words;
                for (a = 0; 4 > a; a++) c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
                return b
            }, clone: function () {
                var b = v.clone.call(this);
                b._hash = this._hash.clone();
                return b
            }
    });
    t.MD5 = v._createHelper(r);
    t.HmacMD5 = v._createHmacHelper(r)
})(Math);
(function () {
    var u = CryptoJS,
        p = u.lib,
        d = p.Base,
        l = p.WordArray,
        p = u.algo,
        s = p.EvpKDF = d.extend({
            cfg: d.extend({
                keySize: 4,
                hasher: p.MD5,
                iterations: 1
            }),
            init: function (d) {
                this.cfg = this.cfg.extend(d)
            }, compute: function (d, r) {
                for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) {
                    n && s.update(n);
                    var n = s.update(d).finalize(r);
                    s.reset();
                    for (var a = 1; a < p; a++) n = s.finalize(n), s.reset();
                    b.concat(n)
                }
                b.sigBytes = 4 * q;
                return b
            }
        });
    u.EvpKDF = function (d, l, p) {
        return s.create(p).compute(d,
            l)
    }
})();
CryptoJS.lib.Cipher || function (u) {
    var p = CryptoJS,
        d = p.lib,
        l = d.Base,
        s = d.WordArray,
        t = d.BufferedBlockAlgorithm,
        r = p.enc.Base64,
        w = p.algo.EvpKDF,
        v = d.Cipher = t.extend({
            cfg: l.extend(),
            createEncryptor: function (e, a) {
                    return this.create(this._ENC_XFORM_MODE, e, a)
                }, createDecryptor: function (e, a) {
                    return this.create(this._DEC_XFORM_MODE, e, a)
                }, init: function (e, a, b) {
                    this.cfg = this.cfg.extend(b);
                    this._xformMode = e;
                    this._key = a;
                    this.reset()
                }, reset: function () {
                    t.reset.call(this);
                    this._doReset()
                }, process: function (e) {
                    this._append(e);
                    return this._process()
                },
                finalize: function (e) {
                    e && this._append(e);
                    return this._doFinalize()
                }, keySize: 4,
            ivSize: 4,
            _ENC_XFORM_MODE: 1,
            _DEC_XFORM_MODE: 2,
            _createHelper: function (e) {
                return {
                    encrypt: function (b, k, d) {
                        return ("string" == typeof k ? c : a).encrypt(e, b, k, d)
                    }, decrypt: function (b, k, d) {
                        return ("string" == typeof k ? c : a).decrypt(e, b, k, d)
                    }
                }
            }
        });
    d.StreamCipher = v.extend({
        _doFinalize: function () {
            return this._process(!0)
        }, blockSize: 1
    });
    var b = p.mode = {},
        x = function (e, a, b) {
            var c = this._iv;
            c ? this._iv = u : c = this._prevBlock;
            for (var d = 0; d < b; d++) e[a + d] ^=
                c[d]
        },
        q = (d.BlockCipherMode = l.extend({
            createEncryptor: function (e, a) {
                return this.Encryptor.create(e, a)
            }, createDecryptor: function (e, a) {
                return this.Decryptor.create(e, a)
            }, init: function (e, a) {
                this._cipher = e;
                this._iv = a
            }
        })).extend();
    q.Encryptor = q.extend({
        processBlock: function (e, a) {
            var b = this._cipher,
                c = b.blockSize;
            x.call(this, e, a, c);
            b.encryptBlock(e, a);
            this._prevBlock = e.slice(a, a + c)
        }
    });
    q.Decryptor = q.extend({
        processBlock: function (e, a) {
            var b = this._cipher,
                c = b.blockSize,
                d = e.slice(a, a + c);
            b.decryptBlock(e, a);
            x.call(this,
                e, a, c);
            this._prevBlock = d
        }
    });
    b = b.CBC = q;
    q = (p.pad = {}).Pkcs7 = {
        pad: function (a, b) {
            for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4) l.push(d);
            c = s.create(l, c);
            a.concat(c)
        }, unpad: function (a) {
            a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
        }
    };
    d.BlockCipher = v.extend({
        cfg: v.cfg.extend({
            mode: b,
            padding: q
        }),
        reset: function () {
            v.reset.call(this);
            var a = this.cfg,
                b = a.iv,
                a = a.mode;
            if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor;
            else c = a.createDecryptor, this._minBufferSize = 1;
            this._mode = c.call(a,
                this, b && b.words)
        }, _doProcessBlock: function (a, b) {
            this._mode.processBlock(a, b)
        }, _doFinalize: function () {
            var a = this.cfg.padding;
            if (this._xformMode == this._ENC_XFORM_MODE) {
                a.pad(this._data, this.blockSize);
                var b = this._process(!0)
            } else b = this._process(!0), a.unpad(b);
            return b
        }, blockSize: 4
    });
    var n = d.CipherParams = l.extend({
            init: function (a) {
                this.mixIn(a)
            }, toString: function (a) {
                return (a || this.formatter).stringify(this)
            }
        }),
        b = (p.format = {}).OpenSSL = {
            stringify: function (a) {
                var b = a.ciphertext;
                a = a.salt;
                return (a ? s.create([1398893684,
                    1701076831
                ]).concat(a).concat(b) : b).toString(r)
            }, parse: function (a) {
                a = r.parse(a);
                var b = a.words;
                if (1398893684 == b[0] && 1701076831 == b[1]) {
                    var c = s.create(b.slice(2, 4));
                    b.splice(0, 4);
                    a.sigBytes -= 16
                }
                return n.create({
                    ciphertext: a,
                    salt: c
                })
            }
        },
        a = d.SerializableCipher = l.extend({
            cfg: l.extend({
                format: b
            }),
            encrypt: function (a, b, c, d) {
                    d = this.cfg.extend(d);
                    var l = a.createEncryptor(c, d);
                    b = l.finalize(b);
                    l = l.cfg;
                    return n.create({
                        ciphertext: b,
                        key: c,
                        iv: l.iv,
                        algorithm: a,
                        mode: l.mode,
                        padding: l.padding,
                        blockSize: a.blockSize,
                        formatter: d.format
                    })
                },
                decrypt: function (a, b, c, d) {
                    d = this.cfg.extend(d);
                    b = this._parse(b, d.format);
                    return a.createDecryptor(c, d).finalize(b.ciphertext)
                }, _parse: function (a, b) {
                    return "string" == typeof a ? b.parse(a, this) : a
                }
        }),
        p = (p.kdf = {}).OpenSSL = {
            execute: function (a, b, c, d) {
                d || (d = s.random(8));
                a = w.create({
                    keySize: b + c
                }).compute(a, d);
                c = s.create(a.words.slice(b), 4 * c);
                a.sigBytes = 4 * b;
                return n.create({
                    key: a,
                    iv: c,
                    salt: d
                })
            }
        },
        c = d.PasswordBasedCipher = a.extend({
            cfg: a.cfg.extend({
                kdf: p
            }),
            encrypt: function (b, c, d, l) {
                l = this.cfg.extend(l);
                d = l.kdf.execute(d,
                    b.keySize, b.ivSize);
                l.iv = d.iv;
                b = a.encrypt.call(this, b, c, d.key, l);
                b.mixIn(d);
                return b
            }, decrypt: function (b, c, d, l) {
                l = this.cfg.extend(l);
                c = this._parse(c, l.format);
                d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);
                l.iv = d.iv;
                return a.decrypt.call(this, b, c, d.key, l)
            }
        })
}();
(function () {
    for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++) a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
    for (var e = 0, j = 0, c = 0; 256 > c; c++) {
        var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4,
            k = k >>> 8 ^ k & 255 ^ 99;
        l[e] = k;
        s[k] = e;
        var z = a[e],
            F = a[z],
            G = a[F],
            y = 257 * a[k] ^ 16843008 * k;
        t[e] = y << 24 | y >>> 8;
        r[e] = y << 16 | y >>> 16;
        w[e] = y << 8 | y >>> 24;
        v[e] = y;
        y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
        b[k] = y << 24 | y >>> 8;
        x[k] = y << 16 | y >>> 16;
        q[k] = y << 8 | y >>> 24;
        n[k] = y;
        e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1
    }
    var H = [0, 1, 2, 4, 8,
            16, 32, 64, 128, 27, 54
        ],
        d = d.AES = p.extend({
            _doReset: function () {
                for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)
                    if (j < d) e[j] = c[j];
                    else {
                        var k = e[j - 1];
                        j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24);
                        e[j] = e[j - d] ^ k
                    }
                c = this._invKeySchedule = [];
                for (d = 0; d < a; d++) j = a - d, k = d % 4 ? e[j] : e[j - 4], c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>>
                    8 & 255]] ^ n[l[k & 255]]
            }, encryptBlock: function (a, b) {
                this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l)
            }, decryptBlock: function (a, c) {
                var d = a[c + 1];
                a[c + 1] = a[c + 3];
                a[c + 3] = d;
                this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s);
                d = a[c + 1];
                a[c + 1] = a[c + 3];
                a[c + 3] = d
            }, _doCryptBlock: function (a, b, c, d, e, j, l, f) {
                for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++) var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++],
                    s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++],
                    t =
                    d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++],
                    n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++],
                    g = q,
                    h = s,
                    k = t;
                q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];
                s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];
                t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];
                n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];
                a[b] = q;
                a[b + 1] = s;
                a[b + 2] = t;
                a[b + 3] = n
            }, keySize: 8
        });
    u.AES = p._createHelper(d)
})();

function _gas(data, key0,
    iv0) {
    key0 = key0.replace(/(^\s+)|(\s+$)/g, "");
    var key = CryptoJS.enc.Utf8.parse(key0);
    var iv = CryptoJS.enc.Utf8.parse(iv0);
    var encrypted = CryptoJS.AES.encrypt(data, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

function encryptAES(data, _p1) {
    if (!_p1) {
        return data;
    }
    var encrypted = _gas(_rds(64) + data, _p1, _rds(16));
    return encrypted;
}

function _ep(p0, p1) {
    try {
        return encryptAES(p0, p1);
    } catch (e) {}
    return p0;
}
var $_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
var _chars_len = $_chars.length;

function _rds(len) {
    var retStr = '';
    for (i = 0; i < len; i++) {
        retStr += $_chars.charAt(Math.floor(Math.random() * _chars_len));
    }
    return retStr;
}

function _etd2(_p0, _p1) {
    var _p2 = encryptAES(_p0, _p1);
    return _p2
}


喜欢的童鞋可以给个评分,我的币快不够我逛论坛了{:301_973:}
PS.fjut同学可以私聊我

免费评分

参与人数 11威望 +1 吾爱币 +23 热心值 +10 收起 理由
学校塌了是晴天 + 1 + 1 热心回复!
PeanutMan + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
纱雾我老婆 + 1 我很赞同!
hj170520 + 1 + 1 谢谢@Thanks!
52soft + 1 + 1 我很赞同!
17606520543 + 1 + 1 用心讨论,共获提升!
处女-大龙猫 + 1 + 1 用心讨论,共获提升!
细水流长 + 2 + 1 谢谢@Thanks!
苏紫方璇 + 1 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hostclsecho + 1 + 1 我很赞同!
luanshils + 3 + 1 我很赞同!

查看全部评分

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

我是sss 发表于 2022-1-2 09:32
这个可能是加密的部分,可以打个断点

[JavaScript] 纯文本查看 复制代码
function _gas(data, key0,
    iv0) {
    key0 = key0.replace(/(^\s+)|(\s+$)/g, "");
    var key = CryptoJS.enc.Utf8.parse(key0);
    var iv = CryptoJS.enc.Utf8.parse(iv0);
    var encrypted = CryptoJS.AES.encrypt(data, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}
 
function encryptAES(data, _p1) {
    if (!_p1) {
        return data;
    }
    var encrypted = _gas(_rds(64) + data, _p1, _rds(16));
    return encrypted;
}
luanshils 发表于 2020-7-7 00:15
bags 发表于 2020-7-7 00:03
看到大佬的百科全书奖章不敢说话

我这百科是以前弄的,和编程一点也无关



                                            藏起来的小尾巴,不让你看!  
     楼主| bags 发表于 2020-7-6 23:50
    感觉是不是因为每次都是深更半夜发帖,都没人看
     楼主| bags 发表于 2020-7-6 23:56
    人间惨案
    luanshils 发表于 2020-7-7 00:01
    tql,献上我的膝盖,py+js



                                              藏起来的小尾巴,不让你看!  
       楼主| bags 发表于 2020-7-7 00:03
      luanshils 发表于 2020-7-7 00:01
      tql,献上我的膝盖,py+js

      看到大佬的百科全书奖章不敢说话
       楼主| bags 发表于 2020-7-7 00:18
      luanshils 发表于 2020-7-7 00:15
      我这百科是以前弄的,和编程一点也无关

      啊哈哈哈,感谢评分,cb终于又破百了
      xccxvb 发表于 2020-7-7 00:28
      好家伙,这个教务处不用验证码的吗,我的教务处还得识别验证码。cookie有效期只有20分钟
      zhenqiao 发表于 2020-7-7 00:39
      bags 发表于 2020-7-6 23:50
      感觉是不是因为每次都是深更半夜发帖,都没人看

      大佬,我得抱着你单膝跪地
      luanshils 发表于 2020-7-7 01:04
      本帖最后由 luanshils 于 2020-7-7 01:08 编辑

      到时候抽个时间看看运行


                                              藏起来的小尾巴,不让你看!  
      您需要登录后才可以回帖 登录 | 注册[Register]

      本版积分规则

      返回列表

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

      GMT+8, 2024-11-25 07:53

      Powered by Discuz!

      Copyright © 2001-2020, Tencent Cloud.

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