1. 문제 파일 실행
문제 파일 실행 시 Name과 Password를 입력하는 프로그램 실행됨
잘못된 Password 입력하면 Wrong password가 출력됨
2. 문제 파일 패킹 여부 확인
PEiD로 확인 결과 EP Section이 .text로 나오는 것으로 보아 패킹되지 않은 실행파일이다.
3. Password 찾기
immnunity debugger로 문제 파일을 연 후 password를 찾기로 했다.
올바른 password를 입력한 경우 성공메시지가 출력될 것이므로 해당 위치 근처를 살펴보기로 했다.
immnunity debugger로 문제 파일을 연 후 마우스 우클릭 > Search for > All referenced text strings로 파일에 포함된 문자열을 확인한 결과 성공 시 출력될 것으로 보이는 Good Job! 을 찾을 수 있다.
해당 위치로 이동하기 위해 왼쪽 address영역을 더블클릭한다.
성공 메시지 출력 전 사용자 입력값과 password값을 비교하는 연산(CMP)이 있을 것이다.
위쪽 빨간 박스 안을 보면 EAX 값과 EBP-3C를 비교해 일치하는지 비교하는 연산이 있다.
이 비교 연산이 실행되기 직전 EAX와 EBP-3C에 들어가는 값을 확인하기 위해 이곳에 F2키로 breakpoint를 걸고 프로그램을 실행했다.
Name 에 CodeEngn, password에 11111을 입력하면 cmp에 걸어둔 breakpoint에서 멈춘다.
이때 우측 레지스터 값을 보면 EAX에 2B67(11111의 16진수 값)이 들어가 있는 것을 통해 사용자 입력값이 EAX에 들어감을 확인할 수 있다.(빨간 상자)
그리고 화면 하단을 보면 EBP-3C의 주소값 0070FEEC에 들어가는 값이 E4C60D97임을 볼 수 있다(노란 상자)
E4C60D97을 십진수로 변환한 결과인 3838184855가 패스워드일 것으로 보여 입력한 결과 FLAG를 획득했다.
FLAG : 3838184855
Strings 분석, CMP 관련 연산 과정 추론, stack 값 파악을 통해 풀 수 있는 문제였다
'해킹 공부 > 리버싱' 카테고리의 다른 글
StolenByte란? (0) | 2022.11.26 |
---|---|
CodeEngn_Basic RCE L9 (StolenByte) (1) | 2022.11.25 |
CodeEngn_Basic RCE L15 (CMP, 레지스터값, hex dump) (0) | 2022.11.17 |
CodeEngn_Basic RCE L14 (strings, CMP, EAX/ESI값) (0) | 2022.11.15 |
CodeEngn_Basic RCE L13 (C# 디컴파일) (0) | 2022.11.10 |