핵심 부분만 확인해보려고 한다.
분석할 파일은 Input으로 값을 받고, Serial까지 입력 받는 프로그램이다.
이 때, Serial은 Text 파일에 정해져 있고, 그 Serial에 맞는 Input 값을 구하라는 것이 이 문제의 내용이다.
그러다면 Serial은 정해져있고, Input 값은 사용자가 맞추는 것이므로 Input 값에 대한 어떤 뭐시기, 거시기가 있은 뒤에 Serial 값과 같은지 아닌지 비교를 하는 루틴이 있을 것이라 예상해볼 수 있다.
그렇다면 Input 값을 어떻게 조작하는지 살펴보는 것이 제일 중요한 루틴이라고 할 수 있겠다.
아래 그림을 살펴보자.
일단 왼쪽 옆구리를 보면 시커먼 선이 있는 것으로 봐서 루프를 돌고 있는 것이 확인된다.
그리고 CMP 명령어를 뭔지 모르지만 보면 3번 주기 혹은 반복하는 루틴일 것이다.
위에서 XOR 연산에 대해서 주목할 필요가 있다.
XOR EAX, EAX 와 같이 쓰이는 경우와 XOR EAX, 43 혹은 XOR EAX, key value 등의 형식으로 표현되어 자주 사용되는 XOR은 후자의 경우 특정 값에 대해 간단히 암/복호화 할 때 사용되곤 한다.
이때, 원파일은 Input이고, Key는 10, 20, 30 로 input 값이 1byte 씩 바뀔 때마다 바뀐다.
그렇다면 Serial 또한 똑같이 첫번째 byte는 10로, 두번째 byte는 20로, 세번째 byte는 30로 xor 해보자
주어진 Serail = 5B 13 49 77 13 5E 7D 13
XOR 5B, 10 = 4B 'K'
XOR 13, 20 = 33 '3'
XOR 49, 30 = 79 'y'
XOR 77, 10 = 67 'g'
XOR 13, 20 = 33 '3'
XOR 5E, 30 = 6E 'n'
XOR 7D, 10 = 6D 'm'
XOR 13, 20 = 33 '3'
결과 : K3yg3nm3