본문 바로가기

개발/Windows32

UNICODE_STRING 동적할당 하기 / 드라이버개발 UNICODE_STRING 동적할당 하기 / 드라이버개발 드라이버 개발을 할때 주로 문자열은 UNICODE_STRING이라는 자료구조를 사용하게 된다. 하지만 익숙치 않은 구조때문인지 드라이버 개발 입문시 어려움을 겪는 부분이기도하다. 우선 UNICODE_STRING 구조체를 보겠다. typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; 유저 모드 프로그램 개발시 char, wchar와 같이 단순 배열 형태가 아닌 것을 볼 수 있다. 첫번째 필드 Length는 문자열 버퍼의 길이를 바이트 단위로 나타낸다. 조심해야 한다. 문자의 갯수가 아니라 버.. 2020. 7. 24.
Windows 드라이버 커널모드에서 파일 해시 구하기 일반적으로 보안 프로그램에 쓰이는 디바이스드라이버들은 파일이벤트, 레지스트리, 프로세스이벤트 등을 탐지하여 자신이 가지고 있는 정책에 따라 차단을 하거나 로깅을 합니다. 특히 특정 파일이나 프로그램을 찾기위해서 파일 해시를 구하는 경우가 많습니다. 파일 해시를 구하기 위해서는 암호화 라이브라리 등을 사용하여 유저영역에서 구하는 경우가 일반적입니다. 하지만 이벤트를 유저모드 애플리케이션에 통지하고 해시를 구하고, 다시 차단하는 로직을 수행하면서 컨텍스트 스위칭이 잦아지는 문제점이 있습니다. 파일 해시를 커널모드에서 구해서 필터링이 가능할까? 이러한 의문점에 검색을 해보니 많은 내용이 검색되지는 않았지만 단서가 될만한 내용을 다음 사이트에서 찾을 수 있었습니다. http://www.rohitab.com/di.. 2020. 7. 23.
윈도우 네트워킹 아키텍처 (Windows Networking Architecture) 마이크로소프트 윈도우는 네트워킹을 고려하여 설계됐으며 I/O시스템과 윈도우 API를 통합한 광범위한 네트워킹 지원을 포함하고 있다. 네트워킹 소프트웨어의 기본적인 4가지 유형은 서비스, API, 프로토콜, 네트워크 어뎁터 드라이버이며 순서대로 네트워크 스택에서 계층을 이루고 있다. 각 계층은 잘 정의된 인터페이스를 갖고 있어 서드파티 업체는 자체적으로 이것을 이용해 네트워킹 기능을 확장 할 수 있다. 일부 구성요소가 여러 계층에 걸쳐 있기 때문에 OSI 계층과 네트워킹 구성요소가 정확히 대응되지 않는다. 네트워킹 API 네트워킹 API는 애플리케이션이 네트워크를 통해 통신하기 위한 프로토콜의 독립적인 방법을 제공. 유저모드나 유저, 커널 모드 양쪽에서 구현될 수 있다. 트랜스포트 드라이버 인터페이스(TD.. 2020. 6. 24.
Python2.x 에서 error: Microsoft Visual C++ 9.0 is required. 윈도우에서 Python 2.7에서 pip모듈을 설치하다보면 컴파일러를 찾지 못해 설치가 안되는 경우가 생긴다. 리눅스는 gcc가 깔려있으면되지만 윈도우에서는 Visual C++컴파일러가 있어야 하는데 버전에 맞는걸 또 찾아줘야 하는 듯 싶다. pip install pycrypto 윈도우 python2에서 pycrypto를 설치하다가 발생한 문제이다. 해결방법: https://www.microsoft.com/en-us/download/details.aspx?id=44266 Visual C++ Compiler for Python 2.7 This package contains the compiler and set of system headers necessary for producing binary wheel.. 2020. 6. 5.
WFP (Windows Filtering Platform) 이란 ? WFP (Windows Filtering Platform) 과거 Windows에서 네트워크 패킷을 모니터링을 하기 위해서는 TDI(Transport Driver Interface), NDIS 필터, LSP등을 이용했어야 했습니다. 하지만 Windows Vista, server 2008 버전 이후부터 필터 훅 드라이버나 방화벽 훅 등은 사용할 수 없게 되었으며 이러한 기술들은 WFP로 대체 하게 되었습니다. 그렇다면 WFP는 무엇일까? WFP는 Windows Filtering Platform의 약자로 네트워크 필터링 애플리케이션을 만드는데 필요한 API와 서비스를 제공하는 플랫폼을 말합니다. WFP는 개발자에게 Windows의 네트워크 스택에서 발생하는 네트워크 패킷 처리를 할 수 있도록 도와주며 각 계층.. 2020. 5. 7.
세션0(session 0) 격리 윈도우 서비스에 미치는 영향 세션0(session 0) 격리 윈도우 서비스에 미치는 영향 윈도우XP, Server 2003을 포함한 이전 버전에서는 모든 서비스가 같은 세션 0에서 실행 되었습니다. 세션 0에서 실행되는 서비스들과 유저 애플리케이션은 보안적인 문제가 있을 수 있었습니다. 서비스는 상승된 권한(Privilege)에서 실행되었으며 이러한 서비스들은 권한 상승을 노리는 악성프로그램에 대한 타겟이 되었기 때문입니다. 윈도우 비스타(Server 2008) 이후 버전에서는 세션0에서 실행되는 서비스들을 격리시키고 세션0를 비 대화식(noninteractive)형태로 만들어 보안적인 위협에 대응하게 되었습니다. 시스템 프로세스들과 서비스들은 오직 세션 0에서 실행 됩니다. 세션 0는 비디오 드라이버에 엑세스 할 수 없기 때문에 .. 2020. 4. 7.
Memory Mapped File (MMF) Global로 명명할 때 권한 / winapi Memory Mapped File, MMF Memory Mapped File, MMF는 Windows 시스템에서 파일을 다루는 방법 하나입니다. 물리적인 디스크 파일이나 장치, 공유메모리 객체와 같이 운영체제에서 파일로 다루는 모든 대상에 사용이 가능합니다. 이러한 MMF는 프로세스의 가상 메모리 주소 공간에 파일을 맵핑한뒤 가상메모리 주소에 직접 접근 하는 것 만으로도 파일의 읽기와 쓰기 기능을 수행 할 수 있습니다. 또한 Windows에서 두 프로세스간 메모리를 공유하는 방법으로는 유일한 방법이기도 합니다. 이를 잘 활용하면 두 프로세스간 IPC를 구현할 수 있습니다. 자세한 내용은 이미 많은 블로그와 책에 나와 있으므로 이정도까지 설명을 하고 오늘 이야기 하고자하는 이름있는 메모리맵에 Global\.. 2020. 4. 3.
윈도우10에서 CreateRemoteThread를 이용한 DLL Injection CreateRemoteThread를 이용한 DLL Injection DLL Injection을 하는 방법중에 하나로 RemoteThread를 생성하여 타겟프로세스에 원하는 DLL을 로드 하는 방법이 있습니다. 이 방법은 가장 간단하면서도 널리 쓰이는 방법 중에 하나입니다. CreateRemoteThread API를 이용하여 다른 프로세스에 쓰레드를 생성 할 수 있습니다. CreateRemoteThread를 MSDN에서 찾아보면 Remarks에 다음과 같은 내용을 볼 수 있습니다. https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createremotethread CreateRemoteThread.. 2020. 4. 1.
Hyper-V 2세대 VM에서 Com Port 활성화 하기 / Windbg UEFI 부팅환경을 테스트하기 위해 Hyper-V에서 2세대 가상머신을 만들었습니다.. 그리고 커널디버거를 붙이기 위해 Com포트 설정을 해줘야 했습니다. 그런데 2세대 Hyper-V VM에서는 Com Port장치가 보이지 않았는데요. Hyper-V 2세대 VM은 따로 Com 포트에 pipe를 할당해 줘야 장치목록에서 보이게 됩니다. 1. VM종료 먼저 작업을 하기전 VM을 종료해줍니다. 2. Powrshell 관리자 권한으로 실행 Hyper-V VM의 세부 설정은 Powershell 명령어를 통해 할 수 있는데요. Powershell을 관리자 권한으로 실행해 줍니다. 3. set-vmcomport com포트를 활성화 하기 위해 다음 명령어를 실행합니다. set-vmcomport -vmname [VM이름.. 2020. 3. 27.