사실은 학교 프로젝트로 후딱 하려고 만들고 있었는데 일을 시작해버리는 바람에 아쉽게 어영구영 마무리하네요.
그냥 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에서 테스트 되었습니다.
'My Study > Programming&Theory' 카테고리의 다른 글
Windows x64 시스템 콜 User Area (4) | 2012.11.07 |
---|---|
Context 는 매우 중요하다!! (0) | 2012.11.06 |
Themida의 JMP Trick 따라해보기 (1) | 2012.10.16 |
SYSENTER Hooking 후 PsGetCurrentProcess (2) | 2012.10.09 |
가변인자 OutputDebugString (0) | 2012.10.03 |