1. 문제 파일 실행
문제 파일 실행 시 Name과 Serial을 입력하는 프로그램 실행됨(진짜 수상하게 생겼다)
잘못된 Serial 입력하고 Check를 누르면 오른쪽과 같은 메시지 창 출력됨
2. 문제 파일 패킹 여부 확인
PEiD로 EP Section 확인 결과 UPX로 패킹되었음을 알 수 있다.
3. UPX 언패킹
upx.exe로 언패킹을 위해선 대상 파일과 같은 위치에 존재해야 한다.
해당 위치에서 cmd 창을 열고 ./upx -d 14.exe 명령을 실행해 언패킹했다.
4. 주소영역 찾기
문제를 immunity debugger에서 분석해보았다.
정답/오답 처리 결과가 출력 되는 부분 근처에서 Serial 검증이 일어날 가능성이 높으므로 해당 부분으로 이동해 살펴보았다.
마우스 우클릭 > Search for > All referenced text strings 로 프로그램 내 문자열 확인
성공 메시지인 Good Job, ~ 이 적힌 부분의 주소값을 더블클릭해 이동
성공 메시지 출력 전 위쪽 연산을 살펴보면 EAX와 ESI 값을 비교하는 CMP가 있다.
이것이 사용자 입력값과 Serial을 검증하는 부분일 것이다.
해당 줄을 한번 클릭하고 f2 키를 눌러 breakpoint를 설정해 CMP 연산 직전 EAX와 ESI 값을 확인해보기로 했다.
breakpoint 설정 후 f9키를 눌러 프로그램 실행 후 Name에 CodeEngn, Serial에 11111을 입력하고 check 버튼을 눌렀다.
화면 우측 레지스터 값 변화를 보면,
EAX 값이 2B67(16진수) 사용자가 입력한 11111(10진수)과 같으므로 사용자 입력값은 EAX에 들어간다.
그럼 찾는 Serial은 ESI에 들어있는 값이므로, 129A1(16진수)이므로, 76193(10진수)를 입력하면 될 것이다.
Serial : 76193
Strings 분석, Serial 값 검증 위한 CMP관련 연산 과정 내 레지스터 값 변화 추적을 통해 풀 수 있는 문제였다.
'해킹 공부 > 리버싱' 카테고리의 다른 글
CodeEngn_Basic RCE L16 (CMP, 레지스터값, stack) (0) | 2022.11.24 |
---|---|
CodeEngn_Basic RCE L15 (CMP, 레지스터값, hex dump) (0) | 2022.11.17 |
CodeEngn_Basic RCE L13 (C# 디컴파일) (0) | 2022.11.10 |
CodeEngn_Basic RCE L12 (strings, hexedit) (0) | 2022.11.10 |
CodeEngn_Basic RCE L11 (OEP, stolenbyte) (0) | 2022.11.06 |