디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

<초보>DLL Injection으로 API Hooking(2)

알디갤로그로 이동합니다. 2010.09.07 22:15:07
조회 415 추천 0 댓글 5

이전 글과 이어서 이번엔 그냥 단순히

다른 프로세스에 DLL 파일을 집어넣는 작업을 해보겠습니다.

DLL 파일은 아무 DLL 파일이든지 상관없으니까


#include <windows.h>
#define MB_OUT MB_OK
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
 HANDLE hThread = NULL;
 switch( fdwReason )
 {
  case DLL_PROCESS_ATTACH :
   MessageBoxA(0, "dll 진입", "dll 진입", MB_OUT);
   break;
 }
 return TRUE;
}
 


DLL 프로젝트로 다음과 같은 코드를 넣고 컴파일을 합니다. 여기서 나온 파일을 dllproject.dll 라고 치고
c:\\dllproject.dll 로 옮깁니다.

이제 이 dll 파일을 넣을 타겟 프로그램을 설정하여야 하는데.

이걸로 합니다. (원래는 notepad.exe 로 할려고 했는데 win7 에서 해보니까 CreateRemoteThread 함수 수행에서 에러가 나더군요. 액세스 권한이 안얻어지네요. 내부적으로 전역 후킹으로 검사하는 듯 해보였는데 자세히 알아보진 않았어요.)
DLL Injection 의 개요는 다음과 같습니다.
#1 타겟프로그램의 적당한 곳에 메모리를 할당한 후 dll 경로를 저장합니다. ("c:\\\\dllproject.dll" 라는 문자열)
#2 메모리에 맵핑되어있는 kernel32.dll 의 LoadLibraryA 함수의 주소를 구합니다.
#3 타겟 프로그램에 스레드를 생성시켜 LoadLibraryA 함수의 인자로 dll 경로가 전달되게 합니다.
--<1> 스레드를 생성시킬 때 스레드 함수 주소로 #2 에서 구한 LoadLibraryA 의 주소를 넣습니다.
--<2> 인자로 타겟프로그램안에 저장되어있는 "c:\\\\dllproject.dll" 라는 문자열을 인자로 넘깁니다.

코드로 보면 확실해집니다.


#include <cstdio>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>

// DLL Inject : 다른 프로세스의 주소 공간에 특정 DLL을 넣는다.
void DllInject(DWORD pid, char* path); // processid 와 dll 경로를 받음
 
int main()
{

 HWND hNotepad = FindWindow("ThunderRT6FormDC", 0); // "ThunderRT6FormDC" 인 클래스를 찾아서 ~
 DWORD pid;
 GetWindowThreadProcessId(hNotepad, &pid); // hWnd 로 부터 processid 얻음.
 DllInject(pid, "C:\\\\dllproject.dll");
 return 0;
}


void DllInject(DWORD pid, char* path)
{
//#1 과정 진행
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
 void* dllpath = VirtualAllocEx(hProcess, 0, // 원하는 주소(0은 알아서 해달라)
  _tcslen(path)+1, // 크기
  MEM_RESERVE | MEM_COMMIT, // 예약과 동시 확정
  PAGE_READWRITE);
 // 이제 DLL의 경로를 담을 문자열 복사
 // WriteProcessMemory()는 다른 프로세스 주소 공간에 무언가를 쓸 수 있다.
 // 타겟의 주소공간에 메모리를 할당하고, DLL의 경로를 복사해준다.
 // VirtualAlloc은 가상 메모리를 할당하는 API이지만, Ex가 붙으면 다른 프로세스의 주소공간을 할당할 수 있다.
 DWORD len;
 WriteProcessMemory(hProcess, dllpath, path, _tcslen(path)+1, &len);
//#1 과정 끝

//#2 과정 진행
 HMODULE hDll = GetModuleHandle("kernel32.dll"); // kernel32.dll 모듈의 핸들값을 GetModuleHandle로 구한다.
 PTHREAD_START_ROUTINE loadlibthread = (PTHREAD_START_ROUTINE)GetProcAddress(hDll, "LoadLibraryA");
//#2 과정 끝

//#3 과정 진행
 // 타겟에 새로운 스레드를 만든다.
 // CreateRemoteThread는 다른 프로세스에 스레드를 생성시킨다.
 HANDLE hThread = CreateRemoteThread(hProcess, // 타겟 핸들
  0, 0, 
  loadlibthread, dllpath, // 함수, 인자
  0, 0);
 CloseHandle(hThread);
 CloseHandle(hProcess);
//#3 과정 끝
}



 

네 c:\\dllproject.dll 위치시키고 프로그램을 실행시켰더니 예상대로 이렇게 뜹니다.





그리고 Process Explorer 로 확인해본 결과 메모리에 이제 dllproject.dll 가 떠있군요.

이로써 Win32 API Hooking 을 하기 위한 기초작업은 다 된겁니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 주위 눈치 안 보고(어쩌면 눈치 없이) MZ식 '직설 화법' 날릴 것 같은 스타는? 운영자 24/04/29 - -
211722 파이썬 고수형들 도와줘.... [2] Re갤로그로 이동합니다. 10.10.10 63 0
211721 A Book on C 살껀데요 [2] 서현모양처갤로그로 이동합니다. 10.10.10 76 0
211720 두 윈도우창에 동시에 같은 키보드입력이나 다른 윈도우 프로그램에.... [6] 초보자(118.45) 10.10.10 126 0
211719 나 프로그래밍이라고는 하나도 할 줄 모르고 개념도 모르거든? [2] 귀염귀염열매갤로그로 이동합니다. 10.10.10 91 0
211718 안녕하세요. 레포트갤에 오신걸 환영합니다. ㄹㅇㄹ(168.131) 10.10.10 36 0
211717 횽들 c언어 초보자인데 제발 도와주세요 ㅠㅠ [1] 아오 죽겠네(180.67) 10.10.10 78 0
211715 문명?? [3] 시크한훈남갤로그로 이동합니다. 10.10.10 147 0
211714 C 프로그래밍 짜고 있어요... 조언구합니다 ( 파일 입출력, 구조체포인터) Bose C5갤로그로 이동합니다. 10.10.10 112 0
211713 Introduction to Algorithms 책 읽어본 사람 [1] 학자(124.153) 10.10.10 68 0
211709 매트랩고수형들 변수지정하고 간단한 방정식푸는법을몰라ㅠㅠ 매트랩(1.224) 10.10.10 188 0
211707 자바하시는 형님들 진짜 모르겠어요 ㅠㅠ 썬잡아갤로그로 이동합니다. 10.10.10 63 0
211706 형들 c랑 c++이랑 차이가뭐양? [3] JJangGGae갤로그로 이동합니다. 10.10.10 101 0
211701 VC2008은 Alt F8 안먹혀??? [2] ㅁㄴ(125.177) 10.10.10 83 0
211700 엔트랙커 보안USB 무력화 시키는 방법 아는횽 있어? ㄹㄹㄹ(211.212) 10.10.10 181 0
211698 해킹이 실제로 가능한가???? [1] ㄹㄹㄹ(211.212) 10.10.10 128 0
211697 ERD tool좀 추천좀여 ㅠㅠ [1] File갤로그로 이동합니다. 10.10.10 117 0
211695 네이버 영어사전 지금 접속되냐? [3] rodney(124.153) 10.10.10 337 0
211694 후훟..이렇게까지하면 교수도 딴지 못걸겠지.. 후후후후 ㄹㅇㄹ(168.131) 10.10.10 116 0
211693 고수 횽들 고민이.... [6] 플밍초보 ㅠ(220.68) 10.10.10 72 0
211692 나도 이클립스써야지 [1] 설탕라면갤로그로 이동합니다. 10.10.10 89 0
211691 횽들 좀만도와줘........... [2] 다죽일기세갤로그로 이동합니다. 10.10.10 58 0
211688 php 설치 해본적 있으신분 질문좀 할게요 [5] 레일리안(211.197) 10.10.10 71 0
211687 횽들아 데브씨가 이상해 [2] 김블덕(123.111) 10.10.10 68 0
211686 뭔 시발 프로그래밍 자료구조 알고리즘.. 3(61.43) 10.10.10 135 0
211685 형들 설마 1학년 2학기 과제로 말록함수 쓰라고 나올까? [7] 회색사과갤로그로 이동합니다. 10.10.10 246 0
211683 이클립스에서 뚝뚝끊기는것좀 ㅠ_ㅠ(동영상첨부) [5] valenciak갤로그로 이동합니다. 10.10.10 412 0
211681 형들아 도와줘 ㅜ 보안검열이야~ [6] 하앍(211.224) 10.10.10 151 0
211680 형들 자바 다시 좀 질문좀 할께 [2] as(210.205) 10.10.10 84 0
211678 8과목 듣는데... 다다음주는 시험이고... 할건 많은데 하긴싫고... [9] 형들아(220.73) 10.10.10 176 0
211677 php 공부를 해보고싶은데 [1] ㅇㅇ(211.202) 10.10.10 67 0
211676 어제 놀러갔다가 모로코 개발자를 만났어. [4] 물속의다이아갤로그로 이동합니다. 10.10.10 229 0
211675 횽들..쉬운거좀 해결해줘요 [3] 잉어(121.163) 10.10.10 52 0
211674 C로 구조체 포인터 짜고 있습니다. [8] Bose C5갤로그로 이동합니다. 10.10.10 159 0
211673 ERD 완성... 아.. 잼병하게 어렵다능.. [1] ㄹㅇㄹ(168.131) 10.10.10 78 0
211671 PHP의 폐허.. [3] ㄹㅇㄹ(168.131) 10.10.10 126 0
211670 분위기 흥하라고 조공짤 올립니다. [3] 오우오우(119.202) 10.10.10 163 0
211668 테트리스 구현하기 너무 어렵네 ㅠㅠ [1] 유동닉(61.33) 10.10.10 107 0
211667 멕북삿는데 os 적응 안됨여 [3] 캐발자갤로그로 이동합니다. 10.10.10 93 0
211666 VS2010 코드를 MS 워드로 복사 붙이기 하면.. [1] 징징이(112.165) 10.10.10 157 0
211665 다음이나 네이버 음성검색 뜯어본 횽들 있어?? 구글 API 쓰는거 아님? [1] Rhe갤로그로 이동합니다. 10.10.10 212 0
211664 이번엔 진짜 약간 머리에서 정리가 안됩니다!!! [9] 오우오우(119.202) 10.10.10 127 0
211663 행님들 이거 어떻게 해야하는지 알려주십사!!! 간절 ㅜㅜㅜ [5] 1111(118.38) 10.10.10 50 0
211659 Mergesort하는건데 C++도움좀 주세요 ㅠ [1] hh120h(122.34) 10.10.10 101 0
211657 java 클래스 도식화 죶나 간단한 질문 하나만 할게/// [1] 자바늅늅EE(218.154) 10.10.10 64 0
211656 지역변수 공부하다가 갑자기 이해가 안되서 올려봅니다. (해결...) 오우오우(119.202) 10.10.10 56 0
211655 형님들 이번에 면접 보는대 질문좀 할께요 ㅠ.ㅠ 형님들(124.53) 10.10.10 54 0
211654 연산자 우선순위 있자나.. [1] ㅁㅁㅁ(118.37) 10.10.10 72 0
211653 byte를 왼쪽shift해서 int에 넣었는데 앞쪽 bit가 1로 채워지네 철수(112.214) 10.10.10 53 0
211652 안녕하세요 뭣좀 물어보려고 하는데 ,, 키요(121.155) 10.10.10 23 0
211650 클래스. 생성자와 파괴자. ㅇ_ㅇ 아이고 머리야.. Scott.갤로그로 이동합니다. 10.10.10 124 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2