1. 문제
1) 문제확인
2. 접근방법
3. 문제풀이
- 문제에서 Name이 한 자리라고 알려줬으니 "A"를 입력하고
Check it!
버튼을 눌러보자
- 그런데 이상하게도 입력한 값("A")의 길이와 3을 비교하여 작으면 우리가 원하는 곳으로 분기하지 않는다.
- 이거는 EIP값을 변경하여 위 사진이 나오도록 실행하였는데 여기서도 입력한 값의 길이와 0x1E(30)과 비교한다.
처음에 한 자리수가 아닐거라 생각하고 입력 값의 길이를 3보다 크고 30보다 작은 문자열을 여러 개 만들어 브포 때리려고 했는데 뭔가 이상했다. 문제에서는 분명히 한 자리수라고 했는데...
그래서 브포 때리기에는 시간 낭비될 것같아서 롸업을 봤는데 처음 입력한 값의 길이와 3을 비교할 때 코드 패치하여 이상한데로 분기되지 않도록 하였다.
(cmp eax, 3 ; jge 0x45BB3E → cmp eax, 3 ; jle 0x45BB3E)
쭉 내려가다보면 sub_45B850()에 의해 입력 값 "A"에 의해 "FFE3-2C73-0502A34C-8A48-E1CB" 값이 나오는데 요거랑 아까 입력했던 Serial값인 "BEDA-2F56-BC4F4368-8A71-870B"와 비교한다.
입력한 값에 따라 계속 변하기 때문에 한 자리 수씩 계속 넣다보면 Serial값과 같아지도록 한다.
최종적으로 "F"를 입력하면 Serial값과 같아지고
위 사진처럼 메시지 박스가 뜨게 된다.
문제에서는 MD5해쉬 값을 입력하라고 했으니깐 MD5해시 생성하는 사이트에서 값을 얻어와서 인증하면 된다.
Uploaded by Notion2Tistory v1.1.0