Programming/Security Programming

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

Winduck 2017. 6. 6. 21:57
반응형


정말 오래된 기술인 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

반응형