날먹을 위한 몸부림/Driver 9

사기꾼을 위한 햄날먹 드라이버 개발 - 6

이번에는 커널모드 스레드를 만드는 방법 PsCreateSystemThread를 사용해서 커널모드에서 돌아가는 스레드를 만들 수 있음 https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-pscreatesystemthread PsCreateSystemThread function (wdm.h) - Windows drivers The PsCreateSystemThread routine creates a system thread that executes in kernel mode and returns a handle for the thread. learn.microsoft.com 스레드가 속할 프로세스를 선택할 수 있음 유저모드의 주..

사기꾼을 위한 햄날먹 드라이버 개발 - 5

이번에도 다시 돌아온 vmx 지원체크 이번에는 드라이버에서 지원을 체크해봄 유저모드에서 체크하고 혹시 모르니 커널모드에서도 체크하는게 좋음 유저모드와 다르게 msr을 읽어서 확인하는 부분이 있음 msr관련해서는 인텔 문서를 참고 https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3c-part-3-manual.pdf HTML 삽입 미리보기할 수 없는 소스 빌드하고 vm에서 실행하면 다음과 같은 결과를 볼 수 있음

사기꾼을 위한 햄날먹 드라이버 개발 - 4

이전에 드라이버 통신 예제를 살펴봄 뭐 햄는지 기억안나면 이전글 보셈 https://boa9448.tistory.com/34 사기꾼을 위한 햄날먹 드라이버 개발 - 3 이번에는 커널 드라이버와 유저모드 프로그램이 통신하는 예제 뭐 했는지 기억안나면 앞에 글 보셈 빈 솔루션을 하나 만들고 프로젝트 2개를 추가한다 유저모드 프로그램으로 작성될 빈 프로젝 boa9448.tistory.com 드라이버와 유저모드 프로그램이 통신하려면 다음 작업들이 필요함 유저모드 요청에 대응할 루틴 등록 (IRP_MJ_*) 디바이스 생성(IoCreateDevice) 프로그램에 노출시킬 심볼릭링크 생성(IoCreateSymbolicLink) 유저모드와 드라이버와 통신하는 방법은 파일을 읽고 쓰는것과 매우 유사함 CreateFile..

사기꾼을 위한 햄날먹 드라이버 개발 - 3

이번에는 커널 드라이버와 유저모드 프로그램이 통신하는 예제 뭐 했는지 기억안나면 앞에 글 보셈 빈 솔루션을 하나 만들고 프로젝트 2개를 추가한다 유저모드 프로그램으로 작성될 빈 프로젝트 (CommunicationApp) 커널모드 드라이버로 작성될 빈 커널 드라이버 프로젝트 (CommunicationDriver) CommunicationApp 프로젝트에 main.cpp를 추가함 CommunicationDriver 프로젝트에 driver.cpp를 추가함 그리고 main.cpp에 다음 코드를 작성 HTML 삽입 미리보기할 수 없는 소스 driver.cpp에 다음 코드를 작성 HTML 삽입 미리보기할 수 없는 소스 모두 작성이 끝났으면 빌드함 그리고 vm으로 옮겨서 다음 커맨드로 드라이버를 설치 cmd 관리자 ..

사기꾼을 위한 햄날먹 드라이버 개발 - 2

앞에서 작성한 예제의 일부를 살펴봄 뭐했는지 기억안나면 보셈 https://boa9448.tistory.com/31 사기꾼을 위한 햄날먹 드라이버 개발 - 1 유저모드 치트는 커널모드 안티치트를 이길 수 없음 그 반대도 마찬가지임 이 이유 하나만으로 드라이버 작성을 배우는 이유는 충분함 Kernel Mode Driver, Empty를 선택한 뒤 프로젝트를 생성 프로젝 boa9448.tistory.com 살펴볼 코드는 다음과 같음 HTML 삽입 미리보기할 수 없는 소스 DriverEntry 드라이버가 로드되면 첫번째로 호출되는 함수임 드라이버 초기화를 담당함 드라이버가 필요한 전역변수를 할당하는 작업을 여기서 진행하면됨 파라미터는 WDM드라이버를 나타내는 DriverObject 레지스트리에서 드라이버의 경..

사기꾼을 위한 햄날먹 드라이버 개발 - 1

유저모드 치트는 커널모드 안티치트를 이길 수 없음 그 반대도 마찬가지임 이 이유 하나만으로 드라이버 작성을 배우는 이유는 충분함 Kernel Mode Driver, Empty를 선택한 뒤 프로젝트를 생성 프로젝트 이름은 HelloDriver Source Files에 driver.cpp를 추가한 뒤 다음 코드를 작성함 HTML 삽입 미리보기할 수 없는 소스 대상 플랫폼을 x64로 변경한 뒤 빌드를 누르면 HelloWorld.sys가 생성됨 빌드된 드라이버를 vm으로 옮김 서비스를 설치하고 시작하기 전에 DebugView를 관리자 권한으로 실행한 뒤 커널 출력을 캡쳐하도록함 Capture Kernel을 체크함 cmd를 관리자 권한으로 실행한 뒤 sc를 이용해서 드라이버 서비스를 설치하고 실행함 sc crea..

HamsterHide dll v0.1.0

SSDT 후킹을 지원하는 드라이버 프로그램 스텔스를 위한 dll임 dll 내부에 커널 드라이버와 일부 유틸이 포함되어 있음 dll을 사용해서 드라이버를 설치, 제거 할 수 있음 dll에서 내보낸 함수를 사용해서 원하는 프로세스를 숨길 수 있음 지원하는 기능은 프로세스 (NtQuerySystemInformation) 핸들 테이블에서 핸들 필터링 (NtQuerySystemInformation) 프로세스 오픈 방지 (NtOpenProcess) 다운로드는 여기서 데모 GUI 프로그램 : https://www.dropbox.com/s/utixqy05bh9il1o/HamsterHide.zip?dl=0 HamsterHide.zip Dropbox를 통해 공유함 www.dropbox.com 빌드된 DLL : https:..

디버그 필터

DbgPrint를 이용해 작성된 디버그 메시지나 의도적으로 필터 레벨을 설정해서 디버그 메시지를 안보이게 하는 경우가 있음 필터를 바꾸는 방법은 다음을 참고 https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/reading-and-filtering-debugging-messages Reading and Filtering Debugging Messages - Windows drivers Reading and Filtering Debugging Messages docs.microsoft.com windbg에서 DbgPrint함수의 출력을 보기 위해서 마스크를 변경해야한다면 다음과 같이 입력 ed nt!Kd_Default_Mask 8 또는 e..

PsSetCreateProcessNotifyRoutineEx 실패

PsSetCreateProcessNotifyRoutineEx를 사용해서 콜백을 설치하려고 했으나 실패함 에러코드 : 0xC0000022 (STATUS_ACCESS_DENIED) 원인 : msdn에는 다음과 같이 나와있음STATUS_SUCCESS지정된 루틴이 이제 운영 체제에 등록됩니다. 운영 체제는 새 프로세스가 생성될 때마다 이 루틴을 호출합니다.STATUS_INVALID_PARAMETER지정된 루틴이 이미 등록되었거나 운영 체제가 프로세스 생성 콜백 루틴 등록 제한에 도달했습니다.STATUS_ACCESS_DENIED콜백 루틴 포인터가 포함된 이미지의 이미지 헤더에 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY가 설정되어 있지 않습니다.이미지 헤더에 IMAGE_DLLCHARA..