|
import os |
|
import base64 |
|
import httpx |
|
import re |
|
from fake_useragent import UserAgent |
|
from Crypto.Random import get_random_bytes |
|
from Crypto.Protocol.KDF import PBKDF2 |
|
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes |
|
from cryptography.hazmat.backends import default_backend |
|
from cryptography.hazmat.primitives import padding |
|
|
|
|
|
class AesUtil: |
|
def __init__(self): |
|
self.user_agent = UserAgent().random |
|
self.keySize = int(128 / 8) |
|
self.iterationCount = 1000 |
|
self.headers = { |
|
"User-Agent": self.user_agent, |
|
} |
|
|
|
def get_password(self): |
|
resp = httpx.get("http://course.wku.ac.kr/ULecture/login.jsp", headers=self.headers) |
|
regex = re.compile(r'[0-9]{22}') |
|
listed = regex.findall(resp.text)[0] |
|
return [listed, listed[:13], resp.cookies] |
|
|
|
def generateKey(self, salt, passPhrase: str): |
|
key = PBKDF2( |
|
password=passPhrase.encode('utf-8'), |
|
salt=salt, |
|
dkLen=self.keySize, |
|
count=self.iterationCount |
|
) |
|
return key |
|
|
|
def encrypt(self, salt, iv: str, password, plainText: str): |
|
print(plainText) |
|
key = self.generateKey(salt, password) |
|
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) |
|
encryptor = cipher.encryptor() |
|
padder = padding.PKCS7(algorithms.AES.block_size).padder() |
|
padded_data = padder.update(plainText.encode('utf-8')) + padder.finalize() |
|
chipper_text = encryptor.update(padded_data) + encryptor.finalize() |
|
encrypted_data = base64.b64encode(chipper_text).decode('utf-8') |
|
return encrypted_data |
|
|
|
if __name__ == '__main__': |
|
iv = get_random_bytes(int(128/8)) |
|
salt = get_random_bytes(int(128/8)) |
|
|
|
AESEngine = AesUtil() |
|
passwords = AESEngine.get_password() |
|
ID = AESEngine.encrypt(salt, iv, passwords[0], os.environ.get('WKU_ID')) |
|
PW = AESEngine.encrypt(salt, iv, passwords[0], os.environ.get('WKU_PW')) |
|
res = 'I`' + iv.hex() + '`' + salt.hex() + '`' + ID + '`' + PW + f'`{passwords[1]}`' |
|
print(res) |
|
resp = httpx.post("http://course.wku.ac.kr/ULecture/User/Login/login.jsp", headers=AESEngine.headers, data={'dummystring': res}, cookies=passwords[2]) |
|
print(resp.text) |