Reversing 발표자 : 박현우
# contents 1. DLL Injection 2. DLL Ejection 3. PE 패치를 이용한 DLL 로딩
1. Dll 인젝션이란? DLL(Dynamic Linked Library) : 동적 연결 라이브러리 다른 프로세스에 침투하는 가장 쉽고 강력한 방법 다른 프로세스가 LoadLibrary() API를 스스로 호출하도록 명령하여 내가 원하는 DLL 파일을 강제로 삽입하는 것
1. Dll 인젝션이란? 예) notepad에 통신기능을 추가하여 메신저나 텍스트 웹브라우저 등으로 바꿔버릴 수 있다.
1. DLL 인젝션 방법 원격 스레드 생성(CreateRemoteThread() API) 레지스트리 이용(AppInit_DLLs 값) 메시지 후킹(SetWindowsHookEx() API)
1. DLL 인젝션 실습 방법 : 메모장에 DLL 파일을 인젝션하고, 인젝션된 DLL 파일은 인터넷에 접속하여 http://www.naver.com/index.html 파일을 다운받도록 한다. 실습 파일 notepad.exe , InjectDll.exe , myhack.dll 순서 InjectDll.exe와 myhack.dll 파일을 다운받아 C:\work\ 에 복사 메모장(notepad.exe) 을 실행하여 PID(Process ID) 를 확인 cmd 창에서 InjectDll.exe 를 실행
1. DLL 인젝션 실습
1. DLL 인젝션 실습
1. DLL 인젝션 실습
2. DLL 이젝션 실습 DLL 인젝션의 반대 다른 프로세스가 FreeLibrary() API 를 스스로 호출하도록 명령하여 삽입한 DLL 파일을 제거하는 것 (CreateRemoteThread()로 인젝션한 경우만 가능) 실습 파일 - EjectDll.exe 방법 : cmd 창에서 EjectDll.exe 실행
2. DLL 이젝션 실습
3. PE 패치를 이용한 DLL 로딩 지금까지 알아 본 것은 DLL을 ‘실행 중인 프로세스’에 DLL을 강제로 인젝션하는 방법 < 목 표 > 대상 프로그램 파일 자체를 직접 수정하여 실행 시 내가 원하는 DLL을 자동으로 로딩하도록 한다. 한 번 적용해 놓으면 별도의 인젝션 과정 없이 프로세스가 시작할 때마다 원하는 DLL을 로딩
3. PE 패치를 이용한 DLL 로딩 < 알고 있어야 하는 개념 > PE(Potable Executable) Header 구조 IAT(Import Address Table) IID(Image Import Descriptor) : 임포트하는 DLL파일 마다의 구조체 IDT(Import Directory Table) : PE 파일에서 임포트하는 DLL에 대한 정보가 구조체 리스트 형식으로 저장 INT(Import Name Table) RVA(Relative Virtual Address) : 메모리에서의 상대적 주소
3. PE 패치를 이용한 DLL 로딩 실습 파일 TextView.exe , myhack3.dll , 실습 파일 TextView.exe , myhack3.dll , < 패치 아이디어 > IDT 리스트의 마지막에 myhack3.dll 파일을 추가! (DLL 파일은 ‘구글 웹사이트’의 index.html 파일을 다운)
3. PE 패치를 이용한 DLL 로딩
3. PE 패치를 이용한 DLL 로딩
3. PE 패치를 이용한 DLL 로딩 이 부분을 다른 넓은 위치로 옮기기 위한 빈 영역을 찾는다!
3. PE 패치를 이용한 DLL 로딩 이 비어있는 영역이 진짜 Null Padding 영역인지 확인 필요!
3. PE 패치를 이용한 DLL 로딩 TextView.exe 패치 작업! PEView : PE 헤더 정보를 확인하는데 사용 HxD(Hex Editor) : 실제로 파일의 값을 변경(패치)하는데 사용 패치 할 새로운 영역의 주소로 IDT를 옮긴다. myhack3.dll을 위한 IID구조체를 구성하여 IDT의 끝에 추가. 정상적으로 실행하기 위한 값(INT, Name, IAT) 세팅. IAT 섹션의 속성(Characteristics) 변경.
3. PE 패치를 이용한 DLL 로딩 이제 IMPORT table이 주소 8C80 위치에 존재하는 걸로 간주된다.
3. PE 패치를 이용한 DLL 로딩 TextView.exe 패치 작업! – 1) 2) IDT 복사 myhack3.dll을 위한 IID 구조체 추가
3. PE 패치를 이용한 DLL 로딩 TextView.exe 패치 작업! – 3) INT, Name, IAT 세팅
3. PE 패치를 이용한 DLL 로딩 TextView.exe 패치 작업! – 4) 속성 변경
3. PE 패치를 이용한 DLL 로딩 WRITE 속성이 추가됨! – 메모리에 로딩될 때 실제 함수 주소로 덮어써야 하므로 필요
3. PE 패치를 이용한 DLL 로딩 확인!
3. PE 패치를 이용한 DLL 로딩 확인!
감사합니다.