반응형
DLL을 만든다.
네이트온에 넣는다.
이렇게 내가 만든 Dll을 다른 프로그램에 넣는 것을
Dll인젝션이라 한다. 아래 목록...
네이트온의 윈도우 핸들을 구할 수 있다.
핸들을 구하면 프로세스 ID를 구할 수 있다.
아이디를 알면 프로세스의 핸들을 구한다.
소스는 네이트온의 네이트온 정보메시지를 바꾸는것이다.
DLL을 이용한다.
spy.cpp를 DLL프로젝트로 컴파일후
C:\에 복사해놓고.. 네이트온을 실행해보자.. 네이트온 정보창을 클릭하면
네이트온에 넣는다.
이렇게 내가 만든 Dll을 다른 프로그램에 넣는 것을
Dll인젝션이라 한다. 아래 목록...
네이트온의 윈도우 핸들을 구할 수 있다.
핸들을 구하면 프로세스 ID를 구할 수 있다.
아이디를 알면 프로세스의 핸들을 구한다.
소스는 네이트온의 네이트온 정보메시지를 바꾸는것이다.
DLL을 이용한다.
spy.cpp를 DLL프로젝트로 컴파일후
C:\에 복사해놓고.. 네이트온을 실행해보자.. 네이트온 정보창을 클릭하면
#include<stdio.h> #include<windows.h> //Kernel32의 핸들을 구하는것..GetModuleHandle void DllInject(DWORD pid, char * path) { //process ID를 가지고 Process핸들을 얻는다. HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); //---------------------------------------------------------- //Kernel32.dll의 주소를 구한다. HMODULE hDll = GetModuleHandle("Kernel32.dll"); PTHREAD_START_ROUTINE f = (PTHREAD_START_ROUTINE) GetProcAddress(hDll, "LoadLibraryA"); //UNICODE타입때문에 메크로는 실제 함수로 써줘야 한다. //LoadLibrary가 아니라 LoadLibraryA이다. //PTHREAD_START_ROUTINE는 미리 정의된 스레드 함수모양의 함수 포인터 타입 //NateOn의 가상주소 공간을 할당한다. void *p = VirtualAllocEx(hProcess, 0, strlen(path)+1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); DWORD len; WriteProcessMemory(hProcess, p , path, strlen(path)+1, &len); //---------------------------------------------------------- //상대 프로세스에 새로운 스레드를 생성한다. (Win2000 이상부터 지원) HANDLE hThread = CreateRemoteThread(hProcess,0,0, f, p, //함수, 인자. 0,0); //VirtualAlloc(); 자신에게 메모리 할당 //VirtualAllocEX(); 다른 프로그램에 메모리 할당 //WriteProcessMemory(); 다른 프로그램에 문자열 복사 CloseHandle(hProcess); CloseHandle(hThread); } void main() { HWND hwnd = FindWindow(0,"NateOn"); if(hwnd == 0) { printf("NateOn을 먼저 실행하세요\n"); return ; } DWORD pid; DWORD tid = GetWindowThreadProcessId(hwnd, &pid); DllInject(pid,"C:\\spy.dll"); }
#include<windows.h> WNDPROC old; LRESULT CALLBACK foo(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_WINDOWPOSCHANGING: return DefWindowProc(hwnd, msg, wParam, lParam); case WM_COMMAND: switch(LOWORD(wParam)) { case 57664://네이트온 정보메뉴 ID MessageBox(0,"넌 당한거야 \n낚였어..","",MB_OK); return 0; } //원래 메시지 함수로 전달 return CallWindowProc(old, hwnd, msg, wParam, lParam); }//원래 메시지 함수로 전달 return CallWindowProc(old, hwnd, msg, wParam, lParam); } BOOL WINAPI DllMain(HANDLE h, DWORD r, LPVOID how) { if( r == DLL_PROCESS_ATTACH) { HWND hwnd = FindWindow(0, "NateOn"); //SubClassing...!! old = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC,(LONG)foo); } return TRUE; }
반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."