728x90
반응형
디버깅 툴을 사용하기 전에 먼저 알아야 할 내용이 있습니다.
디버그를 통해 나오는 어셈블리 언어는 CPU에 종속되어 있습니다. 즉 일반 PC에서 많이 사용되는 intel x86 계열 CPU와 모바일 제품에서 많이 사용되는 ARM 계열의 CPU는 서로 어셈블리 명령어의 형태가 다릅니다.
위 사진은 OllyDBG의 기본 화면입니다.
OllyDbg는 무료에, 직관적인 인터페이스와 확장 기능을 통해 많은 사랑을 받고 있는 디버거 입니다.
위 화면에서 나오는 Code Window/Register Window/Dump Window/Stack Window가 존재하는데
Code Window
- 기본적으로 디스어셈블리 코드를 표시하여 각종 커멘트나 라벨을 보여주며, 코드를 분석하여 Loop, Jump 위치 등의 정보를 표시합니다.
Register Window
- CPU register 값은 실시간으로 표시하며 특정 register들은 수정도 가능합니다.
Dump Window
- 프로세스에서 원하는 memory 주소 위치를 hex와 ascii/유니코드 값으로 표시하고 수정도 가능합니다.
Stack Window
- ESP register가 가리키는 프로세스 Stack 메모리를 실시간으로 표시하고 수정도 가능합니다.
위 사진은 OllyDbg의 명령어입니다. 참고하시면 좋을 것 같습니다.
리버싱 핵심 원리에서는 원하는 코드를 빨리 찾아내는 4가지 방법에 대해서 설명하고 있습니다.
- 코드 실행 방법
- 프로그램의 기능이 명확한 경우에 명령어를 하나하나 실행하면서 원하는 위치를 찾는 방법
- 위 방법의 경우 코드의 크기가 작고 기능이 명확한 경우에 사용 할 수 있습니다.
- 문자열 검색 방법
- 프로그램에서 사용되는 문자열을 통해 검색하여 찾는 방법
- OllyDBG에서는 프로그램에서 사용되는 문자열에 대해서 분석하여 정리를 해놓습니다.
이를 이용하여 검색하는 방법이지만 기본적으로 코드와 데이터 영역이 서로 다름을 알고 있어야 합니다.
- API 검색 방법
- 호출코드에 BP ( 마우스 우측 메뉴 - Search for - All intermodular calls )
- 이 또한 OllyDbg에서 분석하여 확인한 API 목록을 통해 이용합니다.
- API 목록에 대해서 분석하는 원리를 알기 위해서는 PE File Format에 대해서 알아야 합니다.
- API코드에 직접 BP ( 마우스 우측 메뉴 - Search for - Name in al modules )
- 파일의 구조를 바꿔버리는 경우 OllyDbg가 API에 대해서 찾을 수가 없습니다.
- 직접적으로 View - Memory를 선택하여 User32가 로딩된 메모리 영역을 지정하여 다시 검색하면 됩니다.
반응형
'리버스 코드 엔지니어링' 카테고리의 다른 글
[리버스 엔지니어링] 함수 호출 규약 정리 (0) | 2018.11.14 |
---|---|
[리버스 엔지니어링] CPU 레지스터 (0) | 2018.11.14 |
[리버스 엔지니어링] 바이트 오더링 (0) | 2018.10.31 |
[리버스 엔지니어링] 리버스 엔지니어링이란? (0) | 2018.10.30 |
댓글