: 정보를 엿보고 조작하는 행위
: Event가 발생할 때 OS에서 보내는 메세지를 엿보거나 가로채는 것
> hook procedure : 운영 체제가 호출해주는 콜백 함수, 메세지 훅을 걸 때 DLL 내부에 존재
> hMod : 메세지 훅을 걸 때 DLL의 Instance Handle
→ 이 함수를 이용하여 훅을 설치하면, 프로세스에서 해당 메세지가 발생했을 때 운영 체제가 해당 DLL 파일을 해당 프로세스에 강제 Injection하고 등록된 hook procedure을 호출
: 키보드 입력을 빼돌려 정보를 유출시키는 방법
: 실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 것, 다른 프로세스에게 LoadLibrary() API를 스스로 호출하도록 명령하여 사용자가 원하는 DLL을 로딩하는 것
: 강제 삽입된 DLL의 DllMain() 함수는 해당 프로세스 메모리에 대한 접근 권한을 가짐
→ 기능 개선 및 버그 패치, 메시지 후킹, API 후킹, 타 프로그램 관리 응용 프로그램, 악성 코드 등
: 원격 스레드 생성
> 대상 프로세스 핸들 구하기
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)
: OpenProcess() API를 이용하여 PROCESS_ALL_ACCESS 권한의 프로세스 핸들 획득(프로그램 실행 파라미터로 넘어온 dwPID값 사용)
→ 프로세스 핸들을 이용하여 해당 프로세스 제어 가능
> 대상 프로세스 메모리에 인젝션할 DLL 경로 써주기
pRemoteBuf = VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);
: VirtualAllocEx() API를 이용하여 상대방 프로세스에 DLL 파일 경로 문자열 길이(Terminating NULL 포함)만큼 버퍼 할당
WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)szDllName, dwBufSize, NULL);
: 앞에서 할당받은 버퍼 주소(pRemoteBuf)에 WriteProcessMemory() API를 이용하여 DLL 경로 문자열 써주기, WriteProcessMemory() API 역시 hProcess 핸들이 가리키는 상대방 프로세스의 메모리 공간에 쓰는 것
→ 상대방 프로세스 메모리 공간에 인젝션할 DLL 파일 경로 써줌
> LoadLibraryW() API 주소 구하기
hMod = GetModuleHandle("kernel32.dll");
pThreadproc = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, “LoadLibraryW");
: 프로세스에 로딩된 dll의 LoadLibraryW() API 시작 주소 얻음
> 대상 프로세스에 원격 스레드(Remote Thread)를 실행
hThread = CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pRemoteBuf, 0, NULL);
pThreadProc = 프로세스 메모리 내의 LoadLibraryW( ) 주소
pRemoteBuf = 프로세스 메모리 내의 dll 문자열 주소
: Windows에서 프로세스가 LoadLibraryW() API 호출 명령하게 하는 API를 제공하지 않기 때문에, 다른 프로세스에게 스레드를 실행시켜주는 함수인 CreateRemoteThread() API 사용
: Applnit_DLLs 항목에 인젝션을 원하는 DLL 경로 문자열을 쓰고 LoadApplint_DLLs 항목의 값을 1로 변경한 후 재부팅
→ 실행되는 모든 프로세스에 해당 DLL 인젝션
: 메세지 훅 설치하여 OS에서 hook procedure을 담고있는 DLL을 프로세스에게 강제로 인젝션
: 대상 프로그램의 실행 파일을 직접 수정하여 DLL을 강제로 로딩, 일종의 Crack
: 상대방 프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법
: 일반적으로 CreateRemoteThread() API를 이용하여 원격 스레드 형태로 실행
: 대상 프로세스에 Thread Procedure 형식의 코드와 스레드의 파라미터 형식의 데이터 전달
: 메모리를 적게 차지, 흔적이 적음, Code Injector 프로그램만 필요, 규모가 작고 간단한 일 수행
014 Debugger (0) | 2020.09.27 |
---|---|
013 API Hooking (0) | 2020.09.26 |
011 Anti Debugging (0) | 2020.09.25 |
010 고급 리버싱 (0) | 2020.09.25 |
009 Packer (0) | 2020.09.20 |