Profile

youngsouk

youngsouk

스텔스 프로세스

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