기초 공부중

2017. 12. 4. 04:370x06 Malware

728x90

만약, 당신이 커널 레벨에서 동작하는 코드를 작성했다면 그 코드를 이용함으로써 특별한 권한이 있어야만 접근 가능한 커널과 시스템 프로세스의 메모리에 접근할 수 있다. 또한 커널 레벨에서는 어떤 소프트웨어든 코드와 데이터 구조를 변경할 수 있다. 


대부분의 모듈은 시작 루틴(엔트리 포인트)과 모든 것을 마무리하고 정리하는 루틴(클린업 루틴) - 클린업 루틴 처음 들어봄.. 


예시가 책에 있으니 책을 보면서 공부를 진행해보았다.


예시 1. 리눅스 모듈 

int init_module(void)

{

}


void cleanup_module(void)

{


예시 2. 윈도우즈 모듈

NTSTATUS DriverEntry(...)

{

   theDriver -> DriverUnload = MyCleanupRoutine;


NTSTATUS MyCleanupRoutine()

{

    // 책에서 여기에 빈공간을 담아둔 이유가 설명되어 있었다.

    // 윈도우즈에서는 CleanupRoutine이 항상 필요한 것이 아닌 "선택사항" 이라고 한다.

   만약 당신이 드라이버를 로드해야하는 경우가 생긴다면 그때는 CleanupRoutine이 필요하게 된다

대부분의 루트킷의 경우 윈도우즈 시스템에 설치되어 있기 때문에 CleanupRoutine이 필요하지 않다.

}


윈도우 디바이스 드라이버를 개발해봐라고 책에 적혀있다. 

진정 내가 커널을 깊게 이해하기 위해서는 반드시 해봐야 하는 작업이라고 두번 세번 생각하였다. 


모든 프로그래밍에서 Hello world를 제일 먼저 예시로 다루듯, 커널 드라이버 또한 Hello World를 예시로 다루는 것을 볼 수 있었다. 

 #include "ntddk.h"  // WDK환경에서 빌드를 할 수 있게 해주는 헤더파일


메인으로 시작하는것이 아니라 Entry로 시작하게 된다 .


// 이놈이  커널에서 콘솔 어플리케이션의 메인역할을 해주는 놈이다.

NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath)

{

   DbgPrint("Hello World!");

   return STATUS_SUCCESS;

}



'0x06 Malware' 카테고리의 다른 글

Social Engineering에 대한 생각..  (2) 2017.12.08
강의 준비  (0) 2017.12.08
기초 공부 중  (0) 2017.12.04
기초공부 중  (0) 2017.12.03
Good Job  (0) 2017.11.29