2013년 8월 14일 수요일




리버싱은 오프라인 분석(offline analysis)과 라이브 분석(live analysis)가 있다. 

오프라인 코드 분석(Dead-Listing) 실행 바이너리를 디스 어셈블러나 디컴파일러를 이용해서 인간이 읽을 수 있는 형태로 변환해서 직접 분석하는 것을 말하며, 오프라인 코드 분석은 프로그램의 윤곽을 제공하고 관심 있는 툭정 함수를 쉽게 찾을 수 있다. 하지만 라이브 분석의 경우보다 코드를 더 깊이 이해해야 한다.

라이브 분석 코드(Live Code Anaysis) 실행 바이너리를 인간이 읽을 수 있는 형태로 변환하는 과정으로 디버거로 실행시켜 동작을 관찰하는 것이다. 내부 데이터를 관찰할 수 있고, 데이터가 코드의 흐름에 어떤 영향을 주는지 알 수 있다.


디스 어셈블러 바이너리 기계 코드를 해석해서 읽을 수 있는 어셈블리 언어로 변환한다. 변환 테이블에서 해당 opcode를 찾는 데서부터 시작하며 각 명령은 각기 다른 파리미터를 가지며 해당 명령에 어떤 연산자가 사용되는지 분석한다.


코드와 데이터의 구별 
디스 어셈블리에서 코드와 데이터를 구별하는 것은 중요한데 이때 선형스왑과 재귀 순회라는 방법이 있다.

재귀 순회 실제 코드의 흐름을 따라가는 방식이므로 이전에 이미 디스 어셈블된 코드와 코드의 흐름상 연관성이 없는 부분은 디스어셈블 되지 않는다.
선형 스왑 단순히 명령을 순차적으로 디스 어셈블하므로 코드 중간에 삽입된 데이터도 디스어셈블 될 수 있다. 예)점프 테이블


IDA Pro[유료] 어느 함수가 어떤 API를 호출했는지, 내부적으로 어느 함수를 호출했는지를 보여주는 순서도 제공

ILDasm 닷넷 프로그램에 사용되는 언어와 로우레벨 어셈블리 언어인 MSIL을 위한 디스 어셈블러



디버거
유저모드 디버거 대상 프로세스에 달라붙어 해당 프로세스에 대한 모든 제어를 수행할 수 있는 전통적인 애플리케이션으로 하나의 프로세스 안의 정보와 프로세스 안에 있는 유저모드 코드만을 볼 수 있다. 여러 개의 프로세스가 상호 연결되어 동작하는 프로그램이 있다면 어떤 프로세스를 디버깅해야 하는지 판단하기 어렵다. 

OllyDbg 강력한 코드 분석기능을 제공하는 디스어셈블러로 다양한 형태의 뷰를 제공한다. 

WinDbg 디스어셈블러로 한계가 있고 다소 불편하지만 운영체제와 상호작용 부분이 좋다. 다양한 시스템 내부 데이터 구조체 정보를 제공할 수 있는 확장성을 가지고 있으며, 현재 활성화된 유저모드 힙의 내용, 보안토크, PEB, TEB, 시스템로더의 현재 상태정보등을 제공한다. 또한 DLL수행전 프로세스 초기화 단계의 처음부터 실행흐름을 따라갈 수도 있다.
하지만 DLL초기화코드 디버깅 및 Windbg의 특별한 기능이 필요없다면 OllyDbg를 추천..

IDA Pro

PEBrowse Professional Interactive 



커널모드 디버거 특정 프로세스가 아닌 시스템을 전체적으로 보고자 할 때 사용하는 디버거로 커널 모드 디버거는 운영체제에서 실행되는 하나의 애플리케이션이 아니라 시스템의 커널과 동등한 컴포넌트로 존재해서 전체적인 시스템을 관찰하거나 실행을 중지할 수 있다. 또한 로우레벨 브레이킹 포인트를 사용할 수 있다. 하지만 설치가 복잡하며, 하나의 프로세스가 아닌 시스템 전체를 중지하므로 실행중 어떤 스레드도 실행되지 않는다.


Numega SoftICE 윈도우 디바이스 드라이버 개발툴로 개발됐으며, 로컬 커널 디버깅을 수행할 수 있다. 프로세스와 스레드, 가상 메모리 정보, 핸들과 객체 등의 다양한 시스템 데이터 구조체의 내용을 확인 할 수 있으며, Windbg 익스텐션과 호환이 가능하다. 시스템 모니터링 툴 코드를 직접 보지 않고도 시스템 모니터링 툴만으로 원하는 답을 얻을 수 있다. 운영체제와 애플리케이션 사이에 존재하는 다양한 I/O채널을 관찰할 수 있는 툴이다. 

FileMon 운영체제 간의 모든 파일 시스템 레벨의 파일 I/O와 시스템에서 동작 중인 모든 프로세스가 만들어 내는 파일 I/O를 모니터링 할 수 있다. 

TCPView 모든 프로세스에 대해 활성화된 TCP/UDP 네트워크 연결을 모니터링 한다. 프로세스에 의한 네트워크 연결이 현재 열려있는가를 알려준다.

TDIMon TCPView와 유사하지만 네트워크 트래픽을 모니터링한다. 

RegMon 모든 레지스트리 접근 관련 작업을 모니터링

PortMon 물리 포트 모니터링 툴로서 시스템의 모든 직렬, 병렬 I/O 트래픽을 모니터링 한다.

WinObj 시스템의 네임드 객체를 계층적으로 보여줌

Process Explorer 프로세스 목록과 각 프로세스가 로드한 DLL 정보, 각 프로세스 안의 객체 핸들 정보, 오픈된 네트워크 연결에 대한 자세한 정보, CPU와 메모리 사용 현황 그래프 등 다양한 정보를 제공



기타 - 패치툴 

Hex Workshop 파일뿐만 아니라 전체 디스크에 대한 헥사 덤프 기능과 패치기능을 제공한다. 데이터를 데이터 구조체로 변환해주므로 데이터를 리버스 엔지니어링 하기에 적합하다.

DUMPBIN PE파일의 다양한 부분을 덤프할 수 있는 MS의 콘솔모드 툴이다. PE헤더와 섹션 목록, 모듈의 임포트, 익스포트 디렉토리 정보도 볼 수 있다. 

PEView PE데이터 구조체를 보기 좋은 GUI화면으로 보여주며 파일 안의 선택된 데이터를 데이터 형태 그대로 보여주기도 한다.

PEBrowse Professional PE덤프 기능 및 디스어셈블러와 함수를 트리 구조로 보여주는 기능을 제공한다.

0 개의 댓글:

댓글 쓰기