정말 오래된 기술인 SSDT후킹을 이용해서 파일삭제 불가 프로그램 만들어보았습니다!!
다른 블로그에서 기재된 내용을 이용하여 진행해보았습니다.
SSDT후킹은 Native API Table인 SSDT에서 함수의 주소를 제작된 함수의 주소로 바꾸는 기술입니다.
ssdt 참조 : http://jeep-shoes.tistory.com/7
제작되는 프로그램은 ZwOpenFile을 후킹하였습니다.
void memprotect_off()
|
메모리보호기능을 해제하기 위해 CR0레지스터의 WP비트를 설정한다.
0 : 보호기능 off
1: 보호기능 on
cli/sti를 사용한 이유는 인터럽트가 발생하여 정상적으로 후킹이 되지 않을 경우가 있어 안정적인 기능수행을 위해 설정하였습니다.
void HookFunc(LONG ServiceIndex, PLONG OldFunc, PVOID NewFunc) //SSDT상 API주소수정 OldZwOpenFile = InterlockedExchange((PLONG)KeServiceDescriptorTable.ServiceTable + ServiceIndex , (LONG)NewFunc); |
위함수를 통하여 SSDT에서 후킹하고자 하는 ZwOpenFile함수가 담겨있는 곳에 제작된 함수의 주소로 바꿔치기합니다.
(인덱스는 Windows XP : 0x74 Windows 7 :0xB3의 값을 가집니다.)이렇게 수정된 내용은 다음의 그림과 같습니다.
이를 통하여 ZwOpenFile이 호출할 경우 제작된 NewZwOpenFile이 호출됩니다.
if (DesiredAccess == 0x00010080) // 파일삭제시 |
제가 만들고자 하는 것은 파일삭제가 불가능하게 하기위하기 때문에 DesiredAccess == 0x00010080를 통하여 파일삭제시파일이름이 calc.exe가 포함될 경우, return STATUS_UNSUCCESSFUL을 리턴하여 삭제 불가능 하도록합니다. 이외의 경우 이전에 백업해놓은 원래 api를 실행하여 정상동작하도록 합니다.
다음은 후킹화면입니다.
Windows XP |
Windows 7 |
|
|
calc.exe가 삭제가 되지 않는 것을 확인할 수 있었습니다.
참고 : http://ezbeat.tistory.com/276
'Programming > Security Programming' 카테고리의 다른 글
[x64 Windows]프로세스 보호기능 구현 (0) | 2018.04.30 |
---|---|
SetUnhandledExceptionFilter를 이용한 AntiDebugging (0) | 2018.04.10 |
[SYSENTER Hooking] ZwOpenProcess/ ZwTerminateProcess 모니터링 (0) | 2017.07.20 |
Parite.B 파일바이러스 치료로직 개발 (0) | 2017.06.04 |
[Win32 / C] ntdl.dlll의 InlinHook탐지 (0) | 2017.05.06 |
댓글