반응형
웹이나 프로그램 분석을 하는데 AES 암/복호화를 사용하는 경우가 자주 있다.
주로, 로그인할 때나 파일 암/복호화를 할 때 사용된다. 이외에도 많긴한데, 그거는 프로그래머 마음이니
python으로 간단하게 짤 수 있는데 그냥 외우기 귀찮아서 글을 올린다.
[PyCrypto 설치]
# python2.7
pip install PyCrypto
# python3
pip3 install pycryptodome
python에서 AES ECB/CBC 암/복호화할 때 밑에꺼만 살짝 수정하면 된다.
[ECB Mode]
from Crypto.Cipher import AES
# aes-256-ecb
BLOCK_SIZE = 32
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * bytes([BLOCK_SIZE - len(s) % BLOCK_SIZE])
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
key = "keyz".ljust(BLOCK_SIZE, "\x00")
aes = AES.new(key, AES.MODE_ECB)
enc = aes.encrypt(pad("KuroNeko"))
print(unpad(aes.decrypt(enc)))
[CBC Mode]
from Crypto.Cipher import AES
# aes-128-cbc
BLOCK_SIZE = 16
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * bytes([BLOCK_SIZE - len(s) % BLOCK_SIZE])
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
key = "keyz".ljust(BLOCK_SIZE, "\x00")
iv = "".ljust(BLOCK_SIZE, "\x00")
aes = AES.new(key, AES.MODE_CBC, IV=iv)
enc = aes.encrypt(pad("KuroNeko"))
print(unpad(aes.decrypt(iv + enc)[16:]))
'공부' 카테고리의 다른 글
[Windows Kernel Driver] 개발환경 구성 (0) | 2018.11.25 |
---|---|
유저 영역 Stack Canary 분석 (2) | 2018.08.16 |
[IDA] C++ Class 변환 (0) | 2017.08.09 |
[QEMU] iptime emulating (2) | 2017.07.26 |
[how2heap] poison_null_byte (0) | 2017.05.09 |