본문 바로가기
Security/Windows System

※CONTEXT 정리

by Winduck 2017. 12. 6.
반응형

CONTEXT는 말그대로 문맥인데 특정 Thread의 레지스터 정보를 담고 있다.

처음에 접근하게 된 계기는 인젝션기법중 Process hollowing라는 기법이 있는데

 Context구조체를 사용하기 때문에 정리를 위해 글을 작성했습니다. 

아무튼! 해당 인젝션 기법은 다음의 API들을 사용합니다.


※Injection기법 사용API


1) NtUnmapViewOfSection
2) NtReadVirtualMemory
3) NtWriteVirtualMemory
4) NtGetContextThread
5) NtSetContextThread
6) NtResumeThread


위 API중 SetContext와 GetConxtThread의 형태는 다음과 같다.

BOOL WINAPI GetThreadContext(
  _In_    HANDLE    hThread,
  _Inout_ LPCONTEXT lpContext
);


BOOL WINAPI SetThreadContext( _In_       HANDLE  hThread, _In_ const CONTEXT *lpContext );

by msdn


위와 같이 두번째 파라미터를 CONTEXT를 사용하는데 특정 Thread의 Context를 받을수있다는 말이다...근데 Context가 뭔지 모름....

이구조체를 통하여 인젝션되는 EP주소를 알 수 있다는 말씀...

암튼 Context구조체는 다음과 같습니다.

typedef struct _CONTEXT

{

     ULONG ContextFlags;

     ULONG Dr0;

     ULONG Dr1;

     ULONG Dr2;

     ULONG Dr3;

     ULONG Dr6;

     ULONG Dr7;

     FLOATING_SAVE_AREA FloatSave;

     ULONG SegGs;

     ULONG SegFs;

     ULONG SegEs;

     ULONG SegDs;

     ULONG Edi;

     ULONG Esi;

     ULONG Ebx;

     ULONG Edx;

     ULONG Ecx;

     ULONG Eax;

     ULONG Ebp;

     ULONG Eip; // EP의 주소가 들어감.

     ULONG SegCs;

     ULONG EFlags;

     ULONG Esp;

     ULONG SegSs;

     UCHAR ExtendedRegisters[512];

} CONTEXT, *PCONTEXT;


typedef struct _FLOATING_SAVE_AREA

{

     ULONG ControlWord;

     ULONG StatusWord;

     ULONG TagWord;

     ULONG ErrorOffset;

     ULONG ErrorSelector;

     ULONG DataOffset;

     ULONG DataSelector;

     UCHAR RegisterArea[80];

     ULONG Cr0NpxState;

} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;

 

구조체의 변수중 Eip에 ep를 넣고 SetContextThread를 사용할 경우 해당의 Context가 설정되어 구조체의 Eip부분부터 Thread가 실행이 됩니다.

위 구조체를 통해 Process hollowing분석시 도움이 될듯합니다. 끝

틀린내용있다면 알려주십쇼...

반응형

'Security > Windows System' 카테고리의 다른 글

※Debug관련 API  (0) 2018.03.02
IO_STACK_LOCATION란?  (0) 2018.02.03
※SEH(Structed Exception Handler)란?  (0) 2017.08.23
※PEB(Process Environment Block)란?  (0) 2017.08.21
※TLS(Thread Local Storage)란?  (0) 2017.08.21

댓글