본문 바로가기

My Study/Programming&Theory

x86 자가보호 DLL

사실은 학교 프로젝트로 후딱 하려고 만들고 있었는데 일을 시작해버리는 바람에 아쉽게 어영구영 마무리하네요.


그냥 x86에서 작동하는 자가보호 기능을 제공하는 DLL입니다. ( 드라이버 사용 )

기술은 허졉한 SYSENTER Hooking 그냥 입구에서 차단한다는 의미로만 생각해주심됩니다. 

사실은 bluepill도 같이 활용하여 SYSENTER Hooking 방어도 하려했지만 이부분은 pass..


dll을 로드한 프로세스에서는 모두 접근이 가능하며 타 프로세스에서는 전부 접근이 차단되게 됩니다.


Export 해주는 함수 정보는 다음과 같습니다.

-----------------------

int EZSYSP_StartProtection()

리스트 추가 전 보호를 시작하기 위해선 이 함수를 호출해야함(드라이버 로드)


리턴 : 성공 시 1, 실패 시 0

-----------------------

int EZSYSP_StopProtection()

보호를 중단할 때 사용되는 함수(드라이버 언로드)


리턴 : 성공 시 1, 실패 시 0

-----------------------

int EZSYSP_AddFileList( PTCHAR pFileName, DWORD dwFlags )

보호하려는 파일을 리스트에 추가함


pFileName : 보호하려는 파일 전체 경로

dwFlags : 보호 옵션 ( 현재는 사용 안함, 0으로 설정 )


리턴 : 현재 리스트 개수

-----------------------

int EZSYSP_DeleteFileList( PTCHAR pFileName )

보호 리스트에서 파일 삭제


pFileName : 보호 리스트에서 삭제할 파일 전체 경로


리턴 : 현재 리스트 개수

-----------------------

int EZSYSP_AddProcessList( DWORD dwProcessID, DWORD dwFlags )

보호하려는 프로세스ID를 리스트에 추가함


pFileName : 보호하려는 PID

dwFlags : 보호 옵션 ( 현재는 사용 안함, 0으로 설정 )


리턴 : 현재 리스트 개수

-----------------------

int EZSYSP_DeleteProcessList( DWORD dwProcessID )

보호 리스트에서 프로세스ID 삭제


pFileName : 보호 리스트에서 삭제할 PID


리턴 : 현재 리스트 개수

-----------------------


아래는 사용 예 입니다.


dll을 로드하고 사용할 export된 함수들의 주소를 GetProcAddress로 가져오심됩니다.


위와 같이 설정을 하면 타 프로세스에서는 c:\test.txt 를 읽기, 쓰기, 삭제가 불가능하며 dll을 로드한 프로세스의 핸들을 얻지 못하게 됩니다.


동영상입니다.




프로세스 보호시에는 PID를 인자로 넘기기 때문에 자기 프로세스가 아닌 다른 프로세스도 보호할 수 있습니다.


작동환경은 Windows 7, Windows 8 x86에서 테스트 되었습니다.


EZSYSPDll.dll


EZSYSPDriver.sys