본문 바로가기
Programming/Security Programming

SSDT후킹(SSDT Hooking)!! 파일삭제 거부 프로그램!

by Winduck 2017. 6. 6.
반응형


정말 오래된 기술인 SSDT후킹을 이용해서 파일삭제 불가 프로그램 만들어보았습니다!!

다른 블로그에서 기재된 내용을 이용하여 진행해보았습니다.

SSDT후킹은 Native API Table인 SSDT에서 함수의 주소를 제작된 함수의 주소로 바꾸는 기술입니다.


ssdt 참조 : http://jeep-shoes.tistory.com/7


제작되는 프로그램은 ZwOpenFile을 후킹하였습니다.


void memprotect_off()
{
 __asm
 {
  cli // clear Interrupt  
  push eax
  mov eax, cr0
  and eax, 0xfffeffff
  mov CR0, eax
  pop eax
 }
}


void memprotect_on()
{
 __asm
 {
  push eax
  mov eax, CR0
  or eax, 0x00010000
  mov CR0, eax
  pop eax
  sti // Set Interrupt
 }


메모리보호기능을 해제하기 위해 CR0레지스터의 WP비트를 설정한다.

0 : 보호기능 off 

1: 보호기능 on

cli/sti를 사용한 이유는 인터럽트가 발생하여 정상적으로 후킹이 되지 않을 경우가 있어 안정적인 기능수행을 위해 설정하였습니다.


void HookFunc(LONG ServiceIndex, PLONG OldFunc, PVOID NewFunc)
{
 LONG temp1 = (PLONG)KeServiceDescriptorTable.ServiceTable + ServiceIndex;

 //SSDT상 API주소수정

 OldZwOpenFile = InterlockedExchange((PLONG)KeServiceDescriptorTable.ServiceTable + ServiceIndex  , (LONG)NewFunc);


위함수를 통하여 SSDT에서 후킹하고자 하는 ZwOpenFile함수가 담겨있는 곳에 제작된 함수의 주소로 바꿔치기합니다.

(인덱스는 Windows XP : 0x74 Windows 7 :0xB3의 값을 가집니다.)이렇게 수정된 내용은 다음의 그림과 같습니다.



이를 통하여 ZwOpenFile이 호출할 경우 제작된 NewZwOpenFile이 호출됩니다. 



NTSTATUS NewZwOpenFile(
 _Out_ PHANDLE FileHandle,
 _In_ ACCESS_MASK DesiredAccess,
 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
 _In_ ULONG ShareAccess,
 _In_ ULONG OpenOptions
)
{
 NTSTATUS status;
 ANSI_STRING FileName;

 if (DesiredAccess == 0x00010080) // 파일삭제시
 {
  RtlUnicodeStringToAnsiString(&FileName, ObjectAttributes->ObjectName, TRUE);
  if (_tcsstr(FileName.Buffer, _T("calc.exe")))
  {
   return STATUS_UNSUCCESSFUL; // 에러코드 리턴
  }
 }
 status = ((ZWOPENFILE)OldZwOpenFile)(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, ShareAccess, OpenOptions);
 return status;



제가 만들고자 하는 것은 파일삭제가 불가능하게 하기위하기 때문에 DesiredAccess == 0x00010080를 통하여 파일삭제시파일이름이 calc.exe가 포함될 경우, return STATUS_UNSUCCESSFUL을 리턴하여 삭제 불가능 하도록합니다. 이외의 경우 이전에 백업해놓은 원래 api를 실행하여 정상동작하도록 합니다.

다음은 후킹화면입니다.


Windows XP 

 Windows 7

 

 


calc.exe가 삭제가  되지 않는 것을 확인할 수 있었습니다.


참고 : http://ezbeat.tistory.com/276

반응형

댓글