zwquerysysteminformation 후킹
1. CreateToolhelp32Snapshot()함수를 이용해 현재 실행되어 있는 모든 프로세스 정보를 얻어온다.
2. Process32First(), Process32Next()함수를 이용하면서 모든 프로세스에 dll을 인잭션한다.
dll 내용
1. zwquerysysteminformation()함수의 첫 5바이트를 jmp(0xe9) XXXXXXXX로 바꾼다.
XXXXXXXX = 새로운 주소 - 원래 API 주소 - 5(0xe9 주소 바이트 포함)
이 방식의 한계 점 : 나중에 생성되는 프로세스에 대해서는 후킹을 진행하지 않기 때문에 새로 작업관리자 등을 실행시키면 프로세스를 숨길 수 없게 된다.
기존 코드 패치 방식의 문제점 : 한 스레드에서는 실행하려하고 다른 스레드는 쓰려할 때 충돌이 발생한다.
해결 방법
대부분의 라이브러리 API 함수의 내용은 NOP와 MOV EDI, EDI와 같이 의미 없는 명령어가 7바이트 정도 있다.
1. SHORT JMP(0xEB)를 통해서 바로 위의 명령으로 점프하고 그 명령에는 원하는 함수로 jmp하도록 한다. <- 더블 점프
장점
1. 언훅 / 훅 과정이 필요없다. -> 원본 API를 수정하지 않는 선에서 패치하기 때문이다.
또 다른 방법 코드를 삽입할 충분한 공간이 없을 시
원본 API 코드를 사용자 영역에 백업하고 백업 된 코드를 새로 후킹된 함수에서 사용한다.
'윈도우' 카테고리의 다른 글
64bit 에서 32bit 파일, dll , 레지스트리 (0) | 2019.10.28 |
---|---|
ZwResumeThread() 후킹 (0) | 2019.10.28 |
API hooking (0) | 2019.10.24 |
윈도우 관련 볼 것들 (0) | 2019.10.24 |
window code injection (0) | 2019.10.23 |