SlideShare a Scribd company logo
1 of 17
22. DLL 인젝션
1. 다른 프로세스에 의해 생성된 윈도우를
subclassing
2. 디버깅을 위해 필요한 경우.
3. 다른 프로세스를 후킹하려는 경우.
프로세스의 경계를 무너트리고 싶은 경우?
DLL
injection
SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySubclassProc);
DLL
injection
실패
SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySubclassProc);
DLL
injection
실패
다른 프로세스이기 때문
SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySubclassProc);
DLL injection : registry
AppInit_DLLs
- 공백을 구분자로 DLL파일의 이름을 저장
LoadAppInit_DLLs
- Globally enables or disables AppInit_DLLs.
User32.dll
HKEY_LOCAL_MACHINESoftwareMicrosoft
Windows NTCurrentVersionWindows
DLL injection : trojan
original trojan
DLL injection : debugger
원 래 하 던 작 업 기 계 어 ...
주 입 이 된 코 드 으 으 … ...
IP
DLL injection : debugger
원 래 하 던 작 업 기 계 어 ...
주 입 이 된 코 드 으 으 … ...
IP
DLL injection : hook
Hook을 이용한 injection
HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE,
GetMsgProc,
hInstDll, 0);
DLL injection : hook
Unhook 함수
HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE,
GetMsgProc,
hInstDll, 0);
BOOL UnhookWindowsHookEx(HHOOK hHook);
DLL injection : remote thread
홍 너무 쉬워
HANDLE CreateRemoteThread(
HANDLE hProcess,
PSECURITY_ATTRIBUTES psa,
DWORD dwStackSize,
PTHREAD_START_ROUTINE pfnStateAddr,
PVOID pvParam,
DWORD fdwCreate,
PDWORD pdwThreadId);
DLL injection : remote thread
LoadLibrary가 그대로 실행될까?
Wide Character Version?
HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0,
LoadLibraryW, L”C:MyLib.dll”, 0, NULL);
ANSI Character Version?
HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0,
LoadLibraryA, ”C:MyLib.dll”, 0, NULL);
DLL injection : remote thread
LoadLibaray의 실제 주소를 획득
Wide Character Version
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)),
“LoadlibraryW”);
HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0,
LoadLibraryW, L”C:MyLib.dll”, 0, NULL);
DLL injection : remote thread
사실은 문자열의 주소값
Wide Character Version
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)),
“LoadlibraryW”);
HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0,
LoadLibraryW, L”C:MyLib.dll”, 0, NULL);
DLL injection : remote thread
VirtualAllocEx과 VirtualFreeEx를 사용하면
다른 프로세스 공간 상에 Vmemory Alloc 가능.
ReadProcessMemory와 WriteProcessMemory를 사용하면…
이름만 봐도 알지?
Thank you
CrePAS /Jung Dawoon

More Related Content

Viewers also liked

데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
NAVER D2
 

Viewers also liked (13)

그로스 해킹(Growth Hacking)
그로스 해킹(Growth Hacking)그로스 해킹(Growth Hacking)
그로스 해킹(Growth Hacking)
 
제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요
제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요
제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요
 
악성코드 개념 및 대응 기술 (사이버 게놈 기술)
악성코드 개념 및 대응 기술 (사이버 게놈 기술)악성코드 개념 및 대응 기술 (사이버 게놈 기술)
악성코드 개념 및 대응 기술 (사이버 게놈 기술)
 
(Fios#02) 7. 윈도우 10 포렌식 분석
(Fios#02) 7. 윈도우 10 포렌식 분석(Fios#02) 7. 윈도우 10 포렌식 분석
(Fios#02) 7. 윈도우 10 포렌식 분석
 
Virtualization technology for security
Virtualization technology for securityVirtualization technology for security
Virtualization technology for security
 
Power shell 악성코드 동향 20161118_차민석_디지털 포렌식 기술특강 공개판
Power shell 악성코드 동향 20161118_차민석_디지털 포렌식 기술특강 공개판Power shell 악성코드 동향 20161118_차민석_디지털 포렌식 기술특강 공개판
Power shell 악성코드 동향 20161118_차민석_디지털 포렌식 기술특강 공개판
 
디지털포렌식, 이것만 알자!
디지털포렌식, 이것만 알자!디지털포렌식, 이것만 알자!
디지털포렌식, 이것만 알자!
 
제12회 IT4U 강연회 - 화이트햇 해커들의 웹 해킹
제12회 IT4U 강연회 - 화이트햇 해커들의 웹 해킹제12회 IT4U 강연회 - 화이트햇 해커들의 웹 해킹
제12회 IT4U 강연회 - 화이트햇 해커들의 웹 해킹
 
그로스해킹 세미나 #1
그로스해킹 세미나 #1그로스해킹 세미나 #1
그로스해킹 세미나 #1
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
 
Django에서 websocket을 사용하는 방법
Django에서 websocket을 사용하는 방법Django에서 websocket을 사용하는 방법
Django에서 websocket을 사용하는 방법
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
 
Papago/N2MT 개발이야기
Papago/N2MT 개발이야기Papago/N2MT 개발이야기
Papago/N2MT 개발이야기
 

Recently uploaded

Recently uploaded (7)

실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 

DLL 인젝션

  • 2. 1. 다른 프로세스에 의해 생성된 윈도우를 subclassing 2. 디버깅을 위해 필요한 경우. 3. 다른 프로세스를 후킹하려는 경우. 프로세스의 경계를 무너트리고 싶은 경우?
  • 6. DLL injection : registry AppInit_DLLs - 공백을 구분자로 DLL파일의 이름을 저장 LoadAppInit_DLLs - Globally enables or disables AppInit_DLLs. User32.dll HKEY_LOCAL_MACHINESoftwareMicrosoft Windows NTCurrentVersionWindows
  • 7. DLL injection : trojan original trojan
  • 8. DLL injection : debugger 원 래 하 던 작 업 기 계 어 ... 주 입 이 된 코 드 으 으 … ... IP
  • 9. DLL injection : debugger 원 래 하 던 작 업 기 계 어 ... 주 입 이 된 코 드 으 으 … ... IP
  • 10. DLL injection : hook Hook을 이용한 injection HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstDll, 0);
  • 11. DLL injection : hook Unhook 함수 HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstDll, 0); BOOL UnhookWindowsHookEx(HHOOK hHook);
  • 12. DLL injection : remote thread 홍 너무 쉬워 HANDLE CreateRemoteThread( HANDLE hProcess, PSECURITY_ATTRIBUTES psa, DWORD dwStackSize, PTHREAD_START_ROUTINE pfnStateAddr, PVOID pvParam, DWORD fdwCreate, PDWORD pdwThreadId);
  • 13. DLL injection : remote thread LoadLibrary가 그대로 실행될까? Wide Character Version? HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryW, L”C:MyLib.dll”, 0, NULL); ANSI Character Version? HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryA, ”C:MyLib.dll”, 0, NULL);
  • 14. DLL injection : remote thread LoadLibaray의 실제 주소를 획득 Wide Character Version PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)), “LoadlibraryW”); HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryW, L”C:MyLib.dll”, 0, NULL);
  • 15. DLL injection : remote thread 사실은 문자열의 주소값 Wide Character Version PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)), “LoadlibraryW”); HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryW, L”C:MyLib.dll”, 0, NULL);
  • 16. DLL injection : remote thread VirtualAllocEx과 VirtualFreeEx를 사용하면 다른 프로세스 공간 상에 Vmemory Alloc 가능. ReadProcessMemory와 WriteProcessMemory를 사용하면… 이름만 봐도 알지?