check_password에서 행해지는 연산을 하면 enc_flag가 원래 flag로 나올것 같다.
이 과정을 역연산하는 코드를 짜봤다.
import base64
db=[0x74,0x78,0x4b,0x65,0x77,0x48,0x5c,0x69,0x68,0x7e,0x5c,0x79,0x77,0x62,0x46,0x79,0x77,0x5,0x46,0x54,0x73,0x72,0x59,0x69,0x68,0x7e,0x5c,0x7e,0x5a,0x61,0x57,0x6a
,0x77,0x66,0x5a,0x52,0x2,0x62,0x5c,0x79,0x77,0x5c,0x0,0x7c,0x57,0xd,0xd,0x4d]
flag=[]
for i in range(len(db)):
flag.append(chr((db[i]^(len(db)^i^i))))
print(''.join(flag))
a2에 or 연산자를 통해 계산값을 하나씩 추가하고 있는데, 계산 과정은 전부 xor이기 때문에 그대로 xor을 해주면 된다.
a3과 a4는 계속 증가하는 값이니 for문 안에서 i에 해당되고, len은 정확히 모르겠지만 정황상 db의 len인 것 같다.
마지막으로 db의 경우에는 그냥 ida에서 찾았다.
이렇게 flag가 출력된다.
'리버싱' 카테고리의 다른 글
드림핵 Small Counter 롸업 (1) | 2024.06.01 |
---|---|
드림핵 Batch Checker (0) | 2024.06.01 |