Monthly Archives: 10월 2017

How to use Xperf(Windows Performance Toolkit)

Xperf는 디스크에서 커널 시스템 동작상황까지 살펴볼수 있는 성능 분석툴로써, 좀전까지는 프로세서를 많이 사용했네까지 였다면, 이 툴은 해당시간에 동작했던 프로세스들을 각 사용률에 따라 보여주며, 비스타 이후부터는 그 당시의 콜스택까지 확인할수 있다. 실제 문제점이 발생하였을 때 원인 분석을 위해 많이 사용되는데, 프로세서 사용률이 높다거나, 디스크 I/O가 높은데 해당 I/O 원인을 자세히 살펴보고자 할때 사용하면, 성능 최적화에 많은

Read More

어셈블리 – CMP 명령 MASM32

어셈블리 – CMP 명령 MASM32 CMP 명령은 비교 명령으로, 이를 하기전에 플래그라는 개념을 이해할 필요가 있다. (앞서 EFLAGS 레지스터로 설명하였지만 다시 설명 하도록 하겠다.) 플래그는 비교적 간단하다. 플래그는 CPU 의 (E)FLAGS 레지스터에 저장되는 처리 데이터로, (E)FLAGS 의 한 비트가 한 플래그가 된다. 명령어들을 실행하면서 각 실행 결과에 따라서 플래그가 변경된다. (xor eax, eax 를 실행하면

Read More

어셈블리 – MASM32 사용법

어셈블리 – MASM32 사용법 Masm32는 64비트 운영체제를 제대로 지원하지 못하므로, 가상 머신을 이용하여 32비트 운영체제에 설치하기 바란다(여기서는 일반적으로 리버스 엔지니어들이 많이 사용하는 Masm32를 통해 설명하고자 한다. 만약 32/64비트 환경에서 이용하고자 한다면, 비주얼 스튜디오에서 제공하는 파일인 VC\bin의 Ml64.exe(64비트) 혹은 Ml.exe(32비트)를 이용할 수 있지만, 어셈블리 코드 작성 방법이 Masm32와 다소 차이가 있다). [그림] Masm32 SDK 설치 화면

Read More

PE 구조(PE Header) – 실행 흐름

앞서 프로그램을 분석하기 위해서는 실행파일 구조인 PE 구조를 이해하여야 한다고 했다. PE 구조 역시 하나의 파일 포맷이라고 할 수 있다. 우리가 익히 잘 알고 있는 ZIP이라는 확장자가 압축 파일을 의미하고 ZIP라는 파일 구조로 생성되어 있듯이, PE 구조란 운영체제가 인식할 수 있는 실행 가능한 파일의 포맷 구조이다. PE 파일 포맷은 운영체제에서 정의한 파일 포맷으로 Portable Executable의

Read More

PE Header – IAT(Import Address Table), EAT(Export Address Table)

IAT는 PE Header 이해에 있어 제일 중요한 부분이라고 할 수 있다. . IAT는 프로그램이 필요로 하는 라이브러리의 함수들의 기술한 테이블이다. 따라서 현재 프로그램이 이용하는 라이브러리를 알 수 있기에 이 부분은 필수로 이해해야 한다 윈도우는 앞서 얘기듯이 서브시스템을 통해 커널 호출할 수 있도록 하였다. 이는 실제 PE 파일 내에 IAT로 구현되어, 여러 프로세스가 공유하도록 설계하여 이

Read More

VA(Virtual address), RVA(Relative virtual address) 그리고 ASLR

VA, RVA 그리고 ASLR VA(Virtual address)는 변하지 않는 프로세스 내 가상 메모리상의 절대 주소를 말하며, RVA(Relative virtual address)는 특정 기준점으로부터 계산된 상대주소를 뜻한다. PE Header의 많은 정보들 중 대부분의 주소 RVA로 되어 있다. 이처럼 상대주소로 설정된 이유는 다른 PE파일과 메모리 로딩시 충돌을 방지하고자 함에 있다. RVA인 상대주소로 작성되어야 메모리 로딩 위치가 변하더라도 기준 위치에 따른

Read More

루트킷 탐지 – 도구들

루트킷 탐지 – 도구들 수동으로 루트킷이 활용하는 후킹을 탐지한다는 것은 여간 어려운 일이 아니다. 그리고 대부분의 후킹 도구들은 본인을 감추는 기능도 함께 내장하여 일반적인 프로세스 및 드라이버 리스트에서 나타나지 않게 된다. 이렇게 스스로를 감추고 동작하는 도구들을 관리 권한보다 높은 권한으로 실행된다고 하여 루트킷이라고 한다(관리 권한으로도 삭제할 수 없도록 만들 수 있기 때문이다). 이 같은 경우

Read More

커널 모드 후킹 – SSDT 후킹

커널 모드 후킹 – SSDT 후킹 SSDT 후킹 역시 위 엔프로텍트를 이용하여 진행해 보도록 하겠다. 그럼 바로 분석에 들어가자. // 먼저 SSDT의 주소를 확인하기 위해 KeServiceDescriptorTable를 확인하자. 첫번째 메모리 주소가 SSDT는 위치이다. kd> dd KeServiceDescriptorTable 8055c220 804e46a8 00000000 0000011c 80512088 8055c230 00000000 00000000 00000000 00000000 8055c240 00000000 00000000 00000000 00000000 8055c250 00000000 00000000 00000000 00000000

Read More

커널 모드 후킹 – IRP 후킹

여기서는 현재 후킹이 되어 있는 상황에서 후킹을 확인하고 이를 해제하는 방법에 대해 진행하도록 하겠다. 커널 후킹 드라이버 코드를 내장하기에는 디바이스 개발도 필요한 부분으로, 이 영역을 추가하기에는 조금 무리가 있어 보인다. 그럼 IRP 후킹에 대해 분석을 진행해보자. 그럼 테스트를 위한 백신을 하나 설치해 보자. 이 책에서는 엔프로텍트(nProtect)에서 제공하는 게임 가드를 통해 진행하였다. 백신에 대한 취약점이 있는

Read More