본문 바로가기

공부/리버싱 핵심원리

DLL Injection&코드 인젝션

DLL Injection

1. DLL 인젝션

실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 기술
다른 프로세스가 LoadLibrary() API를 호출하도록 명령/유도하여 공격자가 원하는 DLL을 로딩하는 것
일반적인 DLL 로딩 vs DLL 인젝션
>로딩 대상(Target)이 되는 프로세스가 자신이냐, 아니면 다른 프로세스냐?
 

2. DLL 인젝션 활용

기능 개선 및 버그 패치
메시지 후킹
API 후킹
PC 사용자들을 감시하고 관리하기 위한 응용 프로그램
악성 코드
 

3. DLL 인젝션 구현 방법

1) 원격 스레드 생성(CreateRemoteThread() API)
2) 레지스트리 이용 (AppInit_DLLs 값)
3) 메시지 후킹 (SetWindowsHookEx() API)

 


 

코드 인젝션

1. 코드 인젝션

상대방 프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법
> target 대상이 되는 프로세스에 코드와 데이터 삽입
 
1) 코드 형식 = 스레드(Thread) 프로시저 형식
2) 데이터는 스레드의 파라미터로 전달
>> 코드와 데이터를 각각 인젝션한다.
 
일반적으로 CreateRemoteThread() API를
이용하여 원격 스레드 형식으로 실행
> Thread 인젝션이라고 함
 

2.1 코드 인젝션을 사용하는 이유

구현/운영 시, 필요한 메모리 크기가 작다.
공격 흔적을 찾기 어렵다.
1) DLL 인젝션은 해당 프로세스 메모리에 인섹션 흔적(기록)을 남긴다.
2) Code 인젝션은 흔적을 남기지 않는다.

 

 
별도의 DLL 파일을 생성할 필요가 없다.
>> Code Injector 프로그램만 있으면 OK

 


 

DLL 인젝션 - 코드 인젝션

차이점

주입되는 내용

DLL 인젝션: DLL 파일

코드 인젝션: 실행 가능한 코드 자체

를 프로세스에 삽입한다. 

 

 

복잡도

DLL 인젝션: DLL 파일을 준비하고 이를 로드시키는 과정이 필요

코드 인젝션: 직접 실행 코드를 메모리에 써넣는 방식

 

흔적 유무
DLL 인젝션: 해당 프로세스 메모리에 인섹션 흔적(기록) o
코드 인젝션: 흔적 x

 

'공부 > 리버싱 핵심원리' 카테고리의 다른 글

메모장 WriteFile 함수 후킹  (0) 2024.06.01
DLL 인젝션  (0) 2024.05.21
Windows 메시지 후킹  (0) 2024.05.21
인라인 패치 실습  (0) 2024.05.14
UPX 언패킹  (0) 2024.05.12