Serial 값이 5B134977135E7D13인 Name 을 찾는 문제이다.
파일을 실행하니 저런 식으로 Name과 Serial을 입력받길래 아무렇게나 쳐봤는데 답이 아니라 그런지 그냥 꺼졌다.
이번 문제는 Ollydbg 로 풀어볼까 한다. x32로 여는거더라.
Ctrl + g 로 401000 main 함수를 검색한다.
마지막 세줄이 좀 특이하다.
0x10, 0x20, 0x30 을 각각 esp+10, esp+11, esp+12 에 저장하는걸 볼 수 있다.
위의 루프에서 name 과 xor 키 연산을 통해 serial num 을 생성하는 것을 볼 수 있다.
위의 부분에서 serial num을 계산하는데,
[esp+esi+c] 에는 0x10,
[esp+ebp+10] 에는 입력한 name의 첫 글자,
[esp+74] 에는 위의 두 값을 xor 한 값을 저장한다.
xor 연산을 하는 부분이다.
이렇게 입력받은 name의 한 바이트씩을 0x10, 0x20, 0x30과 xor 연산을 수행해 serial num을 구하는데, 5B134977135E7D13이 나오도록 name을 역연산하면 된다.
serial num = 5B134977135E7D13
xor key = 1020301020301020
쉽게 말해서 serial num ^ xor key 를 구하면 된단 말이다.
두개씩 잘라서 xor하도록 파이썬으로 코딩하였다.
serial="5B134977135E7D13"
name=""
i=(0x10, 0x20, 0x30)
for j in range(0,len(serial)>>1):
name+=chr(int(serial[j*2:j*2+2],16)^i[j%3])
K3yg3nm3
된건지 모르겠지만 원래는 그냥 종료되고 검은 화면이 나왔는데 다시 input name 창이 떴다는 차이가 있었다.
'Wargame > Reversing.kr' 카테고리의 다른 글
[Reversing.kr] Replace (0) | 2023.05.28 |
---|---|
[Reversing.kr] Easy ELF (0) | 2023.05.28 |
[Reversing.kr] Easy Unpack (0) | 2023.05.28 |
[Reversing.kr] Easy Crack (0) | 2023.05.28 |