맨위로

이 글은 코드엔진(http://codeengn.com/) 에서 제공하는 리버스 엔지니어링 관련 다양한 문제들을 풀어보면서 리버스 엔지니어링을 공부하는 목적으로 작성되었습니다. 이글을 작성하는 필자도 리버스 엔지니어링에 흥미를 가지고 공부하는 입장이므로 잘못된 내용이 있을수도 있습니다. 잘못된 내용이 있다면 댓글이나 방명록에 알려주세요 :)

Challenges : Basic 02 


Author : ArturDents

Korean

패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 

English : 

The program that verifies the password got messed up and ceases to execute. Find out what the password is. 

문제를 확인했으니 파일을 다운로드 받아서 실행해보도록 하겠습니다.

프로그램 실행결과 화면에 아무것도 뜨지 않은 채 커서만 반짝 거리는것을 볼수있습니다. 또한 종료시에도 정상적인 종료가 이루어지지 않는것을 볼수있습니다. 이것을 보아하니 PE File format 이 손상된 파일인것 같습니다. 확인하기 위해 PE 구조를 볼수있는 PEView 를 통해서 프로그램을 열어보겠습니다. 

살펴보니 정상적인 PE file format을 갖추지 않고 IMAGE_DOS_HEADER 구조체만을 갖고있는것을 볼수 있습니다. 

<Challenges : Basic 01 의 프로그램의 PE 구조>

PEView를 이용해서 IMAGE_DOS_HEADER 의 Raw_data 값을 보도록 한다. 그럼 아래와 같이 ASCII 코드값을 볼수 있고 프로그램내에 있는 패스워드를 볼수있다.

이렇게 PE구조안에 Raw_data 값을 통해서 패스워드를 알수 있는 이유는 이 프로그램이 패스워드를 컴파일 되기전부터 소스내에 선언된 정적 변수에 저장한것이기 때문이다. 이렇게 저장된 변수들은(전역,정적)들은 Windows 실행 파일에 PE 구조에 .data 섹션에 저장되는 규칙이있다.


참고 자료

  • http://www.hackerschool.org/HS_Boards/data/Free_Lectures/codeengn_basic_rce.pdf

  • http://wasdpluskr.tistory.com/9



Posted by STIH

댓글을 달아 주세요