해킹 공부/리버싱

CodeEngn_Basic RCE L12 (strings, hexedit)

O'bin 2022. 11. 10. 12:30

 

 

 1.  문제 파일 실행

 

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

About 버튼 클릭 시 올바른 키를 찾으라는 안내문이 나옴

잘못된 키 입력하면 Check를 눌러도 아무 반응 없음

 

 

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

 

PEiD로 확인 결과 EP Section이 .text로 나오는 것으로 보아 패킹되지 않은 실행파일이다.

 

 

 

 3.  Key 값 찾기

immnunity debugger로 문제 파일을 연 후 key값을 먼저 찾기로 했다.

문제를 통해 올바른 key값을 입력한 경우 성공메시지가 출력됨을 알 수 있기 때문에 해당 위치 근처를 살펴보기로 했다.

immnunity debugger로 문제 파일을 연 후 마우스 우클릭 > Search for > All referenced text strings로 파일에 포함된 문자열을 확인한 결과 성공 시 출력될 것으로 보이는 Congratulations, ~ 을 찾을 수 있다.

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

 

 

 

 

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

위쪽 빨간 박스 안을 보면 EAX 값과 7A2896BF를 비교해 일치하면 MessageBoxA 함수 실행 직후 주소로 이동하는 것을 볼 수 있다.

따라서 7A2896BF가 key 값일 가능성 있음

CMP 연산은 두개 비교 결과 같으면 1, 다르면 0 반환

JNZ : NOT ZERO 인 경우 JUMP, ZERO인 경우 점프하지 않고 다음 명령 실행 

=> CMP 후 JNZ = 비교값이 같으면 JNZ 주소로 점프

 

 

 

7A2896BF는 16진수이므로 계산기를 이용해 10진수로 변환하고

입력 영역에 이 값을 넣고 check를 누르면 추정한 key가 맞음을 확인할 수 있다.

 

key : 2049480383

 

 

 

 4.  주소영역 찾기

 

문자열의 주소 영역을 찾기 위해 문제 파일을 HxD로 열어 성공 메시지가 위치하는 부분을 확인한다.

위 블록 처리된 부분을 KEY 값으로 덮어쓰면 되는 것이다.

 

 

 

HxD에서는 클릭하고 키보드로 입력해서 바로 값을 바꿀 수 있다.

위에서 찾은 KEY값을 넣어주고 나머지 영역은 NULL값(00)을 넣어준다.

KEY 값이 Overwrite 된 영역의 주소는 0x0D3B~ 0x0D45이다.

Overwrite 된 영역의 주소의 마지막이 0x0D44가 아닌 이유는 문자열은 끝에 NULL이 있어야 해당 문자열이 끝났음을 알 수 있기 때문에 마지막 NULL 값 하나를 포함하기 때문이다.

 

 

 

수정한 파일을 다른이름으로 저장하고, 실행 후 KEY 값을 넣었더니 기존 성공 메시지 대신 KEY값이 출력된다.

 

 

 

FLAG 구성은 Key값 + 주소영역이므로, 2049480383 + 0d3b~0d45이다.

FLAG : 20494803830d3b0d45

 

 


Strings 분석, CMP와 JUMP 관련 연산 과정 추론, HexEdit를 통한 hex값 조작을 통해 풀 수 있는 문제였다.