해킹 공부/리버싱

CodeEngn_Basic RCE L15 (CMP, 레지스터값, hex dump)

O'bin 2022. 11. 17. 23:14

 

 1.  문제 파일 실행

문제 파일 실행 시 Name 과 Serial를 입력하는 메세지 창 실행됨

잘못된 키 입력하고 Check it 클릭 시 다시 시도하라는 문자 출력됨

 

 

 2.  문제 파일 패킹 여부 확인

PEiD로 확인 결과 EP Section이 CODE로 나왔다. 이런 경우는 처음이라 왜 CODE인지 잘 모르겠지만 일단 디버거에서 열어보기로 했다.

 

 

 

 

 

 3.  Serial 값 찾기

 

immnunity debugger로 문제 파일을 열어보았는데 특별히 이상한 점이 보이지 않는 것으로 보아 패킹된 것은 아닌가보다.

올바른 Serial 값을 입력한 경우 성공메시지가 출력될 것이기 때문에 해당 위치 근처를 살펴보기로 했다.

 

 

 

 

immnunity debugger로 문제 파일을 연 후 마우스 우클릭 > Search for > All referenced text strings로 파일에 포함된 문자열을 확인한 결과

성공 시 출력될 것으로 보이는 CRACKED를 찾을 수 있다.

해당 위치로 이동하기 위해 왼쪽 address영역을 더블클릭한다.

 

 

 

 

성공 메시지 박스 출력 전 사용자 입력값과 Serial값을 비교해 검증하는 연산(CMP)이 있을 것이다.

위쪽 빨간 박스 안을 보면 EAX 값과 45B844에 덤프되는 값을 비교하는 연산이  있다.

이 비교 연산이 실행되기 직전 EAX와 45B844에 덤프되는 값을 확인하기 위해 이곳에 F2키로 breakpoint를 걸고 프로그램을 실행했다.

 

 

 

 

Name 에 CodeEngn, Serial에 1111을 넣고 check it 버튼을 누르면 cmp에 걸어둔 breakpoint에서 멈춘다.

이때 우측 레지스터 값을 보면 EAX에 457(1111의 16진수 값)이 들어가 있는 것을 통해 사용자 입력값이 EAX에 들어감을 확인할 수 있다.

 

 

 

이제 EAX(사용자 입력값)와 비교하는 45B844의 값을 확인하기 위해 좌측 하단 주소별 hex dump값을 확인할 수 있는 창을 한번 클릭하고,

단축키 ctrl+G를 눌러 이동하고자 하는 주소인 45B844를 입력하면 해당 위치의 값을 볼 수 있다.

저장된 데이터가 60 61로 보이는데, 이것은 리틀엔디안으로 저장되어 있으므로 6160이 Serial 값일 것이다. 

 

 

6160을 10진수로 변환한 24928을 입력하면 성공 메시지가 출력된다.

 

 

 

FLAG : 24928

 

 

 


Strings 분석, CMP 관련 연산 과정 추론, hex dump 창 내용 확인을 통해 풀 수 있는 문제였다.