정적 분석과 동적 분석
1) 정적 분석
파일의 겉모습을 관찰하여 분석하는 방법으로 파일을 실행하지 않는다. 파일의 종류(EXE, DLL, DOC, ZIP 등), 크기,
헤더(PE) 정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 다양한
내용을 확인한다.
2) 동적 분석
파일을 실행시켜서 그 행위를 분석하고, 디버깅을 통해 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법으로 파일, 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위를 분석한다. 또한 디버거를 이용해 프로그램 내부 구조와
동작 원리를 분석할 수 있다.
원하는 코드를 빨리 찾는 방법
- 코드 실행 방법 : 프로그램의 기능이 명확한 경우 명령어를 하나하나 실행하면서 원하는 위치를 찾아가는 것
- 문자열 검색 방법 : "마우스 우클릭 - Search for - All referenced text strings"
- API 검색 방법(1) - 호출 코드에 BP : "마우스 우클릭 - Search for - All intermodular calls"를 이용하면 코드에서 사용된 API 함수 호출 목록만을 볼 수 있다
- API 검색 방법(2) - API 코드에 직접 BP : "마우스 우클릭 - Search for - Name in all modules" 명령을 사용한다 OllyDbg는 Packer/Protector를 사용해 실행파일을 압축(또는 보호)하면, 파일 구조가 변경되어 OllyDbg에서 API 호출 목록이 보이지 않는다. 이 경우 프로세스 메모리에 로딩된 라이브러리(DLL 코드)에 직접 BP를 걸어보는 것이다.
문자열 패치
패치 : 기존 응용 프로그램의 버그를 수정하거나 새로운 기능을 추가시킬 수 있다. 패치 대상은 파일 혹은 메모리가 될 수 있으며, 프로그램의 코드와 데이터 모두 패치 가능
문자열을 패치하는 방법
1. 문자열 버퍼를 직접 수정
덤프창에서 Go to 명령(Ctrl+G)으로 패치하고자 하는 주소로 이동 -> 수정할 범위를 지정하고 (Ctrl+E) 단축키로 Edit 다이얼로그를 띄움 -> 수정
2. 다른 메모리 영역에 새로운 문자열을 생성하여 전달
덤프창에서 프로그램에서 사용되지 않는 NULL padding 영역을 찾아서 원하는 문자열을 입력하고, 코드를 수정해서 함수에 새로운 버퍼 주소를 파라미터로 전달해야 한다.
주의사항
- 유니코드는 알파벳 한 글자당 2바이트가 필요
- 원본 문자열보다 큰 문자열을 덮어쓸 때는 그 뒤의 데이터를 훼손하지 않도록 조심해야 한다.
- 유니코드 문자열은 2바이트 크기의 ULL로 끝나야한다.
- 패치 작업은 메모리에 임시적으로 한 것이라 디버거가 종료되면 패치했던 내용은 사라진다. 따라서 변경한 내용을 보존하려면 별도의 실행 파일로 저장해야 한다 (덤프창에서 변경된 내용 선택 - 마우스 우클릭 - Copy to executable file - Save file)
'리버싱 > 리버싱핵심원리' 카테고리의 다른 글
PE File Format(EAT) (0) | 2019.12.01 |
---|---|
PE File Format(IAT) (0) | 2019.11.29 |
PE File Format(Dos Header ~ Optional Header) (0) | 2019.08.26 |
Process Explorer, 함수 호출 규약 (0) | 2019.08.25 |
3, 4장 요약(바이트 오더링, IA-32 Register) (0) | 2019.08.24 |