본문 바로가기

개념정리/Reverse Engineering

(4)
4. Windows Memory Layout 저번 시간에는 정적 분석과 동적 분석에 대하여 공부하였다. 이번 시간에는 윈도우 메모리 레이아웃에 대하여 공부할 것이다. 1. 메모리 레이아웃 메모리 레이아웃은 프로세스 가상 메모리의 구성을 말한다. 가상 메모리는 프로그램을 실행할 때 운영체제가 프로세스에게 사용 가능한 메모리 공간을 할당해주는데 이 때 메모리 공간을 의미한다. 운영체제는 프로그램의 정보를 참조하여 프로그램에 저장된 데이터가 적절한 영역에 저장되게 해야 한다. 2. 섹션 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있다. 섹션은 유사한 용도로 사용되는 데이터가 모여있는 영역이다. 섹션에 대한 정보는 PE 헤더에 적혀져 있다. ※ PE 헤더에 저장되어 있는 섹션과 관련된 데이터 섹션의 이름 섹션의 크기 센션의 로드될 주..
3. 정적 분석 & 동적 분석 저번 시간에는 바이너리에 대하여 공부하였다. 이번 시간에는 정적 분석과 동적 분석에 대하여 공부할 것이다. 소프트웨어를 분석할 때는 일반적으로 큰 구조를 먼저 관찰한다. 그러나 이것만으로 소프트웨어의 실제 동작을 알기 어렵다. 그때는 실제로 프로그램을 실행해보며 동작을 관찰할 수 있다. 이렇게 소프트웨어를 분석하기 위해 사용하는 분석 방법들은 크게 정적 분석과 동적 분석으로 구분한다. 1. 정적 분석 정적 분석은 프로그램을 실행시키지 않고 분석하는 방법이다. 1) 정적 분석의 장점 정적 분석을 사용하면 프로그램의 전체 구조를 파악하기 쉽다. => 정적 분석 도구들은 프로그램의 여러 정보를 살펴볼 수 있도록 도움을 주는데, 프로그램이 어떤 함수로 구성됐고 함수들은 서로 어떤 호출 관계를 갖는지 등 종합적으..
2. Binary 이번 시간에는 바이너리에 대하여 공부할 것이다. 1. 프로그램 프로그램은 연산 장치가 수행해야 하는 동작을 정의한 일종의 문서이다. 프로그램을 연산 장치에 전달하면, CPU는 적혀있는 명령들을 처리하여 프로그래머가 의도한 동작을 수행한다. 과거에는 프로그램을 내부 저장 장치에 저장할 수 없어서 사람이 전선을 연결하여 컴퓨터에 전달하거나, 천공 카드에 프로그램을 기록하여 재사용하는 방식을 사용했다. 현대 컴퓨터는 프로그램을 메모리에 전자적으로 저장하여 사용을 간편하게 했다. 프로그램을 바이너리라고도 부른다. 왜냐하면 프로그램이 저장 장치에 이진(Binary) 형태로 저장되기 때문이다. 텍스트가 아닌 다른 데이터들도 바이너리라고 불리지만, 바이너리라고 하면 프로그램을 의미한다. 2. 컴파일러와 인터프리터 1..
1. 리버스 엔지니어링 리버스 엔지니어링에 대하여 공부할 것이다. 드림핵을 참고하여 공부하며 요약한다. 1. 리버스 엔지니어링 리버스 엔지니어링은 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악하는 행위를 말한다. 리버싱 또는 역공학이라고도 한다. 리버싱에 능숙해지기 위해 많은 지식과 기술, 노력이 들어간다. 많은 경험을 쌓은 뒤에도 배경 지식만으로는 해결하기 어려운 문제를 맞닥뜨리기도 한다. 2. 리버싱의 용도 1) 좋은 예 판매된 지 너무 오래되어 제작사가 이미 개발을 중단한 프로그램에 대한 패치가 필요할 경우 2) 나쁜 예 상용 프로그램을 구매하지 않고 무료로 이용하기 위해 쓰는 키젠 프로그램이나 시리얼 넘버 생성기, 크랙 등의 불법 프로그램도 리버싱을 통해 만들어진다. 게임핵을 만들 때도 리버싱이 사용된다...