Basic RCE L15 :: CodeEngn/BasicRCE
문제:
파일을 저장했는데 .exe 파일이기에 우선 그냥 실행해보았다.
이렇게 Name과 Serial을 넣는 칸이 있는데,
Name은 CodeEngn으로 주어졌고, Serial에 아무 값을 넣어주고 Check를 해보았다.
Try Again ! 이라는 문구가 떴다.
이제 이 파일을 분석해보기 위해 Ollydbg로 열어주었다.
그리고, 분기문을 찾아주기 위해 문자열을 검색해 성공, 실패가 나눠지는 곳이 있는지
찾아주었다.
그랬더니 아까 실패했을 때 뜬 "Try Again !"이라는 문자열과
성공하면 보일 것 같은 "You cracked ..." 문자열이 보인다.
그래서 저 문자열로 가서 윗부분에 CMP 구문이 있는지 찾아주었다.
그 위치에서 성공, 실패를 가르는 분기문이 될 것이기 때문이다.
CMP 구문을 찾아서 보면
EAX와 DWORD PTR DS:[45B844]를 비교하는데,
DWORD는 Double WORD로 4byte를 뜻하고,
DS는 데이터 세그먼트,
즉 DWORD PTR DS:[45B844]는
DATA 영역의 45B844 주소의 4바이트 공간의 값을 뜻함
CMP 구문에 bp를 걸어주고 실행시켜보았다.
다시 아무 값이나 입력해 주면
EAX 값에 Serial에 입력해준 값이 들어가 있는 것을 알 수 있다.
그래서 45B844의 주소 값을 찾아주기 위해
Dump를 따라가 Memory address 값을 확인해주었다.
그러면 이 address에 들어있는 값을 찾을 수 있는데,
메모리 덤프 주소는 리틀 엔디언 방식으로 읽어주어야 하기 때문에
00 00 61 60 이 된다.
Serial은 10진수로 넣어주어야 하기 때문에
6160(16)을 10진수 변환해주면
Serial 값을 찾을 수 있다.
exe 파일을 실행시켜 name과 Serial을 입력해주면
이렇게 serial을 확인할 수 있다.