문제가 abex' carackme2랑 비슷한 것 같음.
readme.txt 파일을 읽어보면 `Find the Name when the Serial is 5B134977135E7D13` 확인 가능함.
1. 첫 번째 시도
name에 'test' 입력했을 때, 동적분석으로 확인가능한 serial 은 '64454364'이다.
name에 따라 serial이 계산되는 듯. 공식을 찾아봐야 할 것 같다.
2. 두 번째 시도
name에 'aaaa' 입력, serial은 '71415171'
계산 루프를 확인해보자.
- `MOVSX ECX,BYTE PTR [ESP+ESI+C]` : ESP는 0019FDF8, ESI는 0, C를 더한 스택 위치에 302010이 저장되어 있다.
- `MOVSX EDX,BYTE PTR [ESP+EBP+10]` : ESP는 0019FDF8, EBP는 0, 10을 더한 스택 위치에 61616161 저장되어 있다. 즉 내가 입력한 값을 가리키는 포인터. 이를 BYTE 크기만음 EDX에 넣는다. 첫 글자인 61이 들어간다.
loop 1: 0x61 ^ 0x10 = 0x71
loop 2: 0x61 ^ 0x20 = 0x41
loop 3: 0x61 ^ 0x30 = 0x51
loop 4: 0x61 ^ 0x10 = 0x71
해서 serial은 714151이더라.
그럼 serial `5B134977135E7D13` 를 만들기 위해서 코드를 짜보자
# 주어진 serial 문자열
serial = '5B134977135E7D13'
serial2hex = [serial[i:i+2] for i in range(0, len(serial), 2)]
serial2hex2int = [int(pair, 16) for pair in serial2hex]
xor = [0x10, 0x20, 0x30]
result = [i ^ xor[j % len(xor)] for j, i in enumerate(serial2hex2int)]
result2ascii = ''.join(chr(i) for i in result)
print(result2ascii)
=> K3yg3nm3
'보안 > 리버싱' 카테고리의 다른 글
reversing.kr - Easy Unpack (0) | 2024.08.26 |
---|---|
reversing.kr - Easy ELF (0) | 2024.08.26 |
x64 assembly basic (0) | 2022.07.10 |
Dreamhack Quiz: x86 Assembly 2 (0) | 2022.07.10 |
86 Assembly: Essential Part(1) quiz (0) | 2022.07.08 |