如题,我想了解一下该游戏的数据包该怎么拉取,万分感谢
挺适合练手的游戏,我这里只给出一些解密函数,其他的自己抓包写
资产
import hashlib
import struct
import hmac
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
if __name__ == "__main__":
k = hmac.new(b"dB3aqcLtAmBd", b"RWd3NusabzRc", hashlib.sha256).digest()
with open("003le.encrypted", "rb") as f:
d = f.read()
if len(d) > 4:
l = struct.unpack("<I", d[:4])[0]
if l + 4 == len(d):
d = d[4:]
dec = unpad(AES.new(k, AES.MODE_CBC, iv=d[:16]).decrypt(d[16:]), 16)
with open("003le", "wb") as f:
f.write(dec)
数据表
import hashlib
import hmac
import base64
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
def read_7bit(f):
res = 0
shift = 0
while True:
byte = f.read(1)
if not byte:
return None
b = ord(byte)
res |= (b & 0x7F) << shift
if (b & 0x80) == 0:
break
shift += 7
return res
def decrypt_master(fp):
k = hmac.new(
"dB3aqcLtAmBd".encode("utf-8"), "RWd3NusabzRc".encode("utf-8"), hashlib.sha256
).digest()
with open(fp, "rb") as f:
l1 = read_7bit(f)
s1_b64 = f.read(l1).decode("utf-8")
l2 = read_7bit(f)
s2_b64 = f.read(l2).decode("utf-8")
with open(fp + ".json", "w", encoding="utf-8") as f:
json.dump(
json.loads(
unpad(
AES.new(k, AES.MODE_CBC, base64.b64decode(s2_b64)[:16]).decrypt(
base64.b64decode(s2_b64)[16:]
),
AES.block_size,
)
.decode("utf-8")
.strip()
),
f,
indent=4,
ensure_ascii=False,
)
if __name__ == "__main__":
decrypt_master("mAbyssholeBosses")
老代码写的乱,但补全配置后应该能将就着用,用不了我也不管,当个思路(
视频文件头的XorKey = b’\xd5\xc5\xc4\xb7’
def decryptdata(data: bytes, aeskey=aeskey) → bytes:
cipher = AES.new(aeskey, AES.MODE_CBC)
return cipher.decrypt(data)[16:]
如果你明白CBC以及iv到底是什么以及在干什么,那么这么写也是没问题的,但不建议在正规项目用(