티스토리 뷰
[Reversing] APC Injection_QueueUserAPC()
- 샘플 파일 다운로드
> 첨부파일
APC인젝션은 비동기 함수 호출로 직접 호출하는 형태가 아닌 CALLBACK 함수를 통해 호출하는 것이다.
QueueUserAPC() 함수를 이용하는데 해당 함수가 호출되기에는 스레드가 Alertable 상태여야며, 또 스레드가 Alertable 상태가 되기 위한 조건은 sleep(), wait() 관련 API를 통해야 된다는 조건이 있다.
alertable 상태란? 사용자가 조정할 수 있는 유일한 스레드의 상태이다.
(SleepEx, WaitForSingleObjectEx, WaitForMultipleObjectsEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx)
내용을 정리하면 위 함수 중 하나를 호출하여 스레드가 alertable 상태로 만들어진다는 걸 알 수 있으며, 대상 프로세스(calc.exe)의 스레드가 APC queue에 있다면 쉘코드가 실행된다는 것을 알 수 있다.
즉, sleep(), wait() 관련 API를 통해 스레드(hThread)가 alertable 상태가 되어야 QueueUserAPC()가 호출이 되어 APC Injection이 가능하다는 걸 알 수 있다.
OpenProcess() 대상 프로세스 핸들 Get |
|
VirtualAllocEx() 대상 프로세스 버퍼 할당 |
|
WriteProcessMemory() → 쉘코드 삽입 |
|
Thread32Next() & OpenThread() → 스레드 검색, 오픈 |
|
QueueUserAPC(hThread)의 스레드 상태 alertable O |
QueueUserAPC(hThread)의 스레드 상태 alertable X |
QueueUserAPC(lpBaseAddress(쉘코드), hThread(argv[1]), NULL) → 호출(Injection 성공) |
QueueUserAPC() error & 재시도 |
표 1 – APC Injection 단계
(그림 1)은 msfvennom을 이용하여 쉘코드 생성과 APC Injection을 실행하여 인젝션 된 결과를 보여주는 것을 확인 할 수 있다.
그림 1 – APC Injection 실행 화면
'Reversing > Reversing Tech' 카테고리의 다른 글
[Reversing] DLL Injection (0) | 2020.02.04 |
---|---|
[Reversing] Ollydbg BreakPoint (0) | 2020.01.03 |
[Reversing] Self Creation, 디버깅 (0) | 2019.12.02 |
[Reversing] Malwarebytes CrackMe: a step-by-step tutorial (0) | 2019.11.19 |
[Reversing] Process Hollowing 기법 (0) | 2019.07.25 |
- Total
- Today