16번 문제도 15번 문제와 동일하였다.
Exe info로 확인해보니 패킹은 되어있지 않았다.
문제를 실행시켜서 CodeEngn과 아무 패스워드를 입력해보니 아니라고 한다.
X32 디버거를 통해 분석해주었다.
문자열 찾기를 통해 보니 위에서 본 wrong password와 good job이라는 부분이 보여서 해당 위치로 이동해주었다.
모듈 분석이 안돼서 그래프 모드로 안 보여 주길래 그냥 위의 그림 상태로 분석하였다.
위의 회색으로 클릭되어 있는 부분에서 eax와 [ebp-3c]가 같지 않으면 wrong으로 점프하는 것을 알 수 있었다.
즉, eax와 [ebp-3c]가 같아야 한다.
이제 위의 그림보다 조금 더 위에 call 부분에 bp를 걸고 한줄씩 비교해주었다.
Name은 codeengn, serial은 1234로 하고 실행시켰다.
일단 call 부분에서 멈추면 serial 값을 입력받지 않길래 엔터를 쳐서 한 줄 내려왔다.
한줄씩 분석해서 jne위의 cmp 부분을 확인하였더니 eax 값에 우리가 입력한 1234(4D2)가 들어있는 것을 확인할 수 있었다.
이제 [EBP-3C] 값을 확인하기 위해 명령어를 한번 더 보았더니 [EBP-3C]의 4바이트를 가져온다고 하길래 덤프해서 따라가 보았다.
따라가 보니 97 0D C6 E4 라는 값이 들어있고, 15번 문제와 동일하게 리틀 엔디언 방식이므로 거꾸로 계산기로 돌려주면
3,838,184,855라는 값이 나오고, 문제를 실행시켜서 입력해주면 GOOD JOB이라는 문구가 출력되는 것을 확인할 수 있다.
'Reversing > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L18풀이 (0) | 2021.09.13 |
---|---|
[CodeEngn] Basic RCE L17풀이 (0) | 2021.09.13 |
[CodeEngn] Basic RCE L15풀이 (0) | 2021.09.13 |
[CodeEngn] Basic RCE L14풀이 (0) | 2021.09.13 |
[CodeEngn] Basic RCE L12풀이 (0) | 2021.08.18 |