feat: 根目录文档、脚本、gitignore
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import base64
|
||||
import sys
|
||||
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
||||
from cryptography.hazmat.primitives import padding
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
|
||||
AES_KEY = b"KeLy8g7qjmnbgWP1" # 16 bytes = AES-128
|
||||
|
||||
contents = [
|
||||
"HOmbh7KuceD2H18yBv2Hh8Wo+yZVzYtFBkY3J3eo1Pnyu0jacX6mgzwzbPzTC4KdHQia8sK5T0jfKnHPGnH5Cqc8Y+bgzN2iPXoNvgDX4OEtuyoCa+R7HknO7dLcWWPKN7Lr28x4fteCEw8YolioaFDHoZkpKla51b0qutO5wUMcfCYkg/lw8cOPB2jJwjqS1Y0YL01zaUgu24ZJHC7SwldSNtD++IgipCZtItTfgS1NmN7Qs/O/mUqox+x1AJb345vm5qhg6Q/5Bp9zXyWtn41i255CfPaW+gcqUqA248eF1BZrnzF3IkrDgysaFx/38nDYPByPO2rznmygwjjq00yhMWTHe3cKu2h3OjZvMuzuBfzE7CQwcx59/UQPBs0Fig9EPqQwHQeCRSvl1tYPm+rqlwlC+l3s3rYDaWLa3WgGrN+3HwgTGdZmJV3qajvvhxKT/BZN1zl7EfMHpu52CtM0+yrnbqWEP9heVnNJ6a8=",
|
||||
"HOmbh7KuceD2H18yBv2Hh8Wo+yZVzYtFBkY3J3eo1Pnyu0jacX6mgzwzbPzTC4KdHQia8sK5T0jfKnHPGnH5Cqc8Y+bgzN2iPXoNvgDX4OEtuyoCa+R7HknO7dLcWWPKN7Lr28x4fteCEw8YolioaO39sVqYiFSEGMa11fUhPPgq7Kx6u3SnVsiRD5ZMgqi1Nn9qBND01zsAC6WBb+/XbOYoUbMBAtwhHrzyZPBnL0emWpKPOcyU9Wr0RQbfgXkuEWAl+RM4Son1LM0wZh18aGmXfQY2lMvj/qugOXwRCadmBIeHQwkk3nkE0w67Fqn3532zCdf2GhAFMHt5jV0D3w==",
|
||||
"HOmbh7KuceD2H18yBv2Hh8Wo+yZVzYtFBkY3J3eo1Pnyu0jacX6mgzwzwzbPzTC4KdHQia8sK5T0jfKnHPGnH5Cqc8Y+bgzN2iPXoNvgDX4OEtuyoCa+R7HknO7dLcWWPKN7Lr28x4fteCEw8YolioaDTUtiqVaipMPgSYqyEJJfK20PAzpQq4+V2Z6ppHMLRZ+H3TdNdtJPU8lkSbz4uZ02wH9SUonvWhXZOoddgLsakqnF2dB/Zq3M3Qb27LD6LoaZxOaJm+ry6K14diT5soLLhQiGFP8rBeCQ5ZdG2YlTgNPZG0+eKcB0T4sq8lvLtVYU0MLE+hWDcyuNfNYS+RNss0V6e9m1JkoIVq1A8mlr3DnWZHa1QZrnTEj59HVofAI1uKreMp/cx0VHntx0T4jzzalxfnpMi81J7OHnmzK3sb4yX9xuLVQoanyHgKoHmXUsByKtRRallEmVm7ImQb5Ybd4IfMU5ljdK7BoXv1cAeqYsEXBmlXm1bcYvzEWh7e"
|
||||
]
|
||||
|
||||
def try_decrypt(ciphertext_b64, key, mode_name, iv=None):
|
||||
try:
|
||||
ct = base64.b64decode(ciphertext_b64)
|
||||
if mode_name == "ECB":
|
||||
cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend())
|
||||
elif mode_name == "CBC":
|
||||
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
|
||||
else:
|
||||
return None
|
||||
decryptor = cipher.decryptor()
|
||||
pt = decryptor.update(ct) + decryptor.finalize()
|
||||
# Try PKCS7 unpad
|
||||
unpadder = padding.PKCS7(128).unpadder()
|
||||
pt = unpadder.update(pt) + unpadder.finalize()
|
||||
return pt.decode("utf-8")
|
||||
except Exception as e:
|
||||
return None
|
||||
|
||||
for i, ct_b64 in enumerate(contents, 1):
|
||||
print(f"\n========== Payload {i} ==========")
|
||||
# ECB
|
||||
result = try_decrypt(ct_b64, AES_KEY, "ECB")
|
||||
if result:
|
||||
print(f"[AES-128-ECB]\n{result}\n")
|
||||
continue
|
||||
|
||||
# CBC with common IVs
|
||||
ivs = {
|
||||
"key as IV": AES_KEY,
|
||||
"zeros": b"\x00" * 16,
|
||||
}
|
||||
# Maybe IV is first 16 bytes of ciphertext
|
||||
ct_bytes = base64.b64decode(ct_b64)
|
||||
if len(ct_bytes) >= 16:
|
||||
ivs["first 16 bytes of cipher"] = ct_bytes[:16]
|
||||
|
||||
found = False
|
||||
for iv_name, iv in ivs.items():
|
||||
result = try_decrypt(ct_b64, AES_KEY, "CBC", iv)
|
||||
if result:
|
||||
print(f"[AES-128-CBC, IV={iv_name}]\n{result}\n")
|
||||
found = True
|
||||
break
|
||||
if not found:
|
||||
print("[尝试失败] ECB 和常见 CBC IV 均无法解密,可能需要其他算法或参数。")
|
||||
Reference in New Issue
Block a user