mirror of
https://github.com/moesnow/March7thAssistant.git
synced 2026-08-03 08:47:01 +08:00
22 lines
1.1 KiB
Python
22 lines
1.1 KiB
Python
import ctypes
|
|
|
|
class DATA_BLOB(ctypes.Structure):
|
|
_fields_ = [('cbData', ctypes.c_uint), ('pbData', ctypes.POINTER(ctypes.c_ubyte))]
|
|
|
|
def wdp_encrypt(data_bytes: bytes) -> bytes:
|
|
blob_in = DATA_BLOB(len(data_bytes), ctypes.cast(ctypes.create_string_buffer(data_bytes), ctypes.POINTER(ctypes.c_ubyte)))
|
|
blob_out = DATA_BLOB()
|
|
if not ctypes.windll.crypt32.CryptProtectData(ctypes.byref(blob_in), None, None, None, None, 0, ctypes.byref(blob_out)):
|
|
raise ctypes.WinError()
|
|
encrypted = ctypes.string_at(blob_out.pbData, blob_out.cbData)
|
|
ctypes.windll.kernel32.LocalFree(blob_out.pbData)
|
|
return encrypted
|
|
|
|
def wdp_decrypt(enc_bytes: bytes) -> bytes:
|
|
blob_in = DATA_BLOB(len(enc_bytes), ctypes.cast(ctypes.create_string_buffer(enc_bytes), ctypes.POINTER(ctypes.c_ubyte)))
|
|
blob_out = DATA_BLOB()
|
|
if not ctypes.windll.crypt32.CryptUnprotectData(ctypes.byref(blob_in), None, None, None, None, 0, ctypes.byref(blob_out)):
|
|
raise ctypes.WinError()
|
|
decrypted = ctypes.string_at(blob_out.pbData, blob_out.cbData)
|
|
ctypes.windll.kernel32.LocalFree(blob_out.pbData)
|
|
return decrypted |