從第六題開始就要有個先看看請求頭的習慣了[doge]。
別問博主為什么要你養成這個習慣,問就是博主被坑過。。。
headers
里面有一個加密參數S
,然后你就去逆向這個S對吧。
然后一看響應:
好家伙返回的還是個密文,所以要兩次逆向咯。。。
目錄列表
- 過程分析
- headers中的S參數
- 返回密文的解密
- 代碼實現
過程分析
headers中的S參數
可以看到這個S
是32位的[瘋狂暗示]。。。
根據啟動器可以定位到headers
參數生成的位置。
打上斷點,可以看到headers
是賦了一個hhh
變量的值。
然后這個hhh
就在上面的不遠處。。。
所以大致的加密邏輯就是這個window.xxoo
方法了,先不急著點進去~
可以看到加密的明文就是sssssbbbbb
與一個13位的時間戳做了一個字符串的拼接操作,然后傳給了加密函數。(結果是個32位的[doge])
我們可以大膽的猜測一下~
OK破案了,就是一個標準的md5
加密算法,頭部參數就解決了~
返回密文的解密
回到我們剛剛跟棧的位置,可以清晰的看到解密的方法就在下面。。。
打上斷點進去看看,發現就是這里咯~
點進去查看方法內部具體的解密邏輯
然后就破案了,發現是個標準的AES
算法。。。
所以這里就不要扣代碼了,直接用標準庫來還原算法,把key
和iv
都換成它的值就行了。。。
代碼實現
"""
-*- coding: utf-8 -*-
@File : .py
@author : @鯊魚愛兜兜
@Time : 2025/04/05 21:25
"""import json
import time
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import binascii
import requests
from hashlib import md5def decrypt(encrypted_hex):"""My Decrypt Func:param encrypted_hex::return:"""key = b'xxxxxxxxoooooooo'iv = b'0123456789ABCDEF'ciphertext = binascii.unhexlify(encrypted_hex)cipher = AES.new(key, AES.MODE_CBC, iv)decrypted = cipher.decrypt(ciphertext)plaintext = unpad(decrypted, AES.block_size)return plaintext.decode()cookies = {'Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183': '1743857254','HMACCOUNT': 'C8ED1E9E0FB8E4AC','sessionid': '你的值','v': '你的值','Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183': '1743860531',
}
s = 0
for page in range(1, 21):tt = int(time.time() * 1000)headers = {'accept': '*/*','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/6/','s': md5(f'sssssbbbbb{tt}'.encode()).hexdigest(),'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','tt': f'{tt}','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',}params = {'page': f'{page}'}response = requests.get('https://stu.tulingpyton.cn/api/problem-detail/6/data/', params=params, cookies=cookies,headers=headers)response.raise_for_status()response.encoding = 'utf-8'data = json.loads(decrypt(response.json()['t']))print(data)s += sum(data['current_array'])
print(s)
第六題秒了[doge]~
@鯊魚愛兜兜