본문 바로가기

Programming/Win_API19

실행 중인 Class, Caption, Process 이름 구하기 EnumWindows -> [ GetClassName, GetWindowText ] CreateToolhelp32Snapshot Process32First Process32Next -> [ PROCESSENTRY32구조체의 szExeFile ] #include "Windows.h" #include "tlhelp32.h" #include "tchar.h" #include "stdio.h" BOOL CALLBACK EnumWindowProc(HWND hwnd, LPARAM lParam) { TCHAR classname[100] = {0}; TCHAR titlename[100] = {0}; GetClassName (hwnd, (LPTSTR)&classname, 100); GetWindowText(hwnd, (.. 2014. 1. 8.
API Hooking - [3] DLL Injection + Trampoline Code Hooking Trampoline Code Hooking은 후킹할 함수의 첫 부분에 jmp 코드로 후킹 함수로 실행 흐름이 이동하도록 한다. 이 때 jmp 코드로 덮어진 부분은 저장해 두었다가 후킹 함수에서 원래 함수를 정상적으로 처리할 수 있도록 해준다. 아래에 실습할 MessageBox를 조작하는 방법은 아래와 같다. 1. 원본코드의 첫 5바이트에 hook 코드로 점프하도록 패치2. hook코드로 넘어오면 원본코드 언훅 후 파라미터를 조작해서 호출3. 다시 원본코드에 후킹 설치 #include "stdio.h" #include "wchar.h" #include "windows.h" #define DEF_USER32"User32.dll" #define DEF_MBOX"MessageBoxA" typedef BOOL (.. 2013. 12. 7.
API Hooking - [2] DLL Injection + IAT 이번에는 IAT Hooking으로 실행흐름에서 제어권을 가져오고 DLL Injection으로 원하는 동작을 하는 코드를 실행시키는 방법으로 실습해보겠다. 대상 프로그램은 "API Hooking - [1] Debugger Attach + 0xCC" 에서 실습한 MessageBox를 띄워주는 프로그램을 가지고 동일하게 "Hello World" 문자열을 "Hello Hooking" 문자열로 띄워지도록 후킹을 해보겠다. IAT 후킹 코드는 아래의 IAT에 접근하는 방법을 보면 이해하기 쉬울 것이다. IMAGE_DIRECTORY_ENTRY_IMPORT |-------------------| | VirtualAddress | |-------------------| | Size | |------------------.. 2013. 11. 24.
API Hooking - [1] Debugger Attach + 0xCC API Hooking 실습 첫 번째로 Debugger Attach해서 0xCC로 제어권을 받아서 후킹하는 방법을 해보자. 후킹할 프로그램은 아래와 같이 자신의 pid를 출력하고 아무키나 누르면 MessageBox를 띄워주는 프로그램이다. - MessageBox APi 원형 int WINAPI MessageBox( __in_opt HWND hWnd, __in_opt LPCTSTR lpText, __in_opt LPCTSTR lpCaption, __in UINT uType );MessageBox의 파라미터는 위와 같은데 후킹을 통해 lpText에 있는 "Hello World ~~" 부분을 "Hello Hooking !"으로 바꿔보도록 하겠다. [ 실습 소스 ] #include "windows.h" #incl.. 2013. 11. 23.