이번 포스팅에서는 x64 환경에서 IAT Hooking을 통해 Microsoft에서 제공되는 Notepad 프로그램의 WriteFile API를 후킹하는 실습을 진행해본다. WriteFile API는 파일을 저장할 때 호출되는 API 이다. 이 때 저장되는 내용을 MessageBoxA API로 띄우도록 해당 API를 Hooking해보도록 한다. [ IAT64.dll ] 여기서 WriteFile이 존재하는 DLL을 api-ms-win-core-file-l1-1-0.dll으로 지정했는데 PE 구조를 살펴본 결과 IAT 상에 저 DLL에 WriteFile API가 존재하기 때문에 저렇게 했다. 그러나, 노트북으로 할 때는 KERNEL32.dll 이기 때문에 다시 수정해서 진행했다. ( 반드시 PE구조를 살펴본..
64비트 MASM으로 작성한 IAT Hooking 자료. 이번 포스팅에서는 위 링크에서 MASM으로 작성한 x64 IAT Hooking 코드를 C언어로 변경한 코드를 소개한다. 자료가 없어서 직접 변경한 소스코드이며, MASM 코드는 x32 IAT Hooking 코드와 크게 다르지 않기 때문에 별도로 포스팅하지 않는다. 어셈블리 튜토리얼 (16) 64비트 api hooking(IAT) - {}.cook(c, c#, java, php, js, asm); 4.5. api hooking(IAT) 마찬가지로 32비트와 크게 다르지 않다. 이전 예제처럼 fastcall함수콜 방식에서 파라메터 설정하는 부분과 메모리주소(포인터)의 크기가 dword가 아닌 qword이라는 점만 제외하면 똑같으니 이 부분만 확인하면서..
이전 포스팅에서 MASM을 이용해 작성한 32bit IAT Hooking에 대해서 소개했다. 이번 포스팅에서는 이 어셈블리 코드를 C언어로 변환해 작성한 코드를 소개한다. 리버싱 핵심원리 책에서 제공된 코드는 현재 환경에서 정상적으로 동작하지 않고, C언어로 작성된 해당 코드가 없기 때문에 진행했다. MASM 32Bit IAT Hooking 포스팅 [MASM] MASM으로 작성한 IAT Hooking을 통한 API Hooking ch4njun.tistory.com [ IAT32.DLL ] [5] : lpApiMessageBoxW 변수는 Dynamic Library상에서 실제 API가 존재하는 주소를 저장하는 공간이다. Hooking 되지 않은 기존 API 호출을 위해 저장한다. [6] : IAT 상에서 ..
x64 Trampoline API Hooking을 C언어로 구현된 예제를 소개한다. notepad.exe 프로그램의 WriteFile API 를 후킹하는 실습을 진행해보자. 64비트 환경에서 Trampoline API Hooking은 32비트 환경에서와 조금 차이가 있다. 1. 64비트 환경에서 모든 함수는 fastcall 방식으로 호출된다. 때문에 함수 앞부분이 32비트에서와처럼 동일하지 않다. ( 32비트는 모든 함수 시작부분에 동일한 프롤로그가 존재한다. ) 2. 32비트 환경에서는 5Byte로 Short Jump문을 구현할 수 있었다. 그러나 64비트에는 64bit 주소로 Jump를 지원하지 않는다. 그래서 레지스터를 이용해서 Jump문을 구현하거나, 혹은 2번째 방법으로는 ret을 이용하는 방법..
https://5kyc1ad.tistory.com/354 [Hooking] x86, x64 API Hooking WriteFileHook.cpp - 위 소스는 Kernel32.dll의 WriteFile 함수를 후킹하는 DLL의 소스코드입니다. 32비트의 경우 밑에서 설명할 Redirect 루틴을 탈 경우 0x25FF(Absolute Jump)를 사용하고, 실제 함수 구현체 루.. 5kyc1ad.tistory.com 코드 다운로드 Trampoline_Code.txt drive.google.com
Trampoline API Hooking 기법은 DLL Injection이 성공했다고 가정했을 때 DllMain이 자동적으로 호출되고 그에 따라서 DLL_PROCESS_ATTACH의 코드가 실행되는 것을 이용해 진행한다. 따라서 모든 API Hooking 기법은 DLL Injection이 선행되어야한다. (Code Injection도 가능 !!) Trampoline API Hooking 기법은 기존 API의 가장 앞 5Byte의 코드를 따로 저장하고, 그 대신 내가 임의로 호출시킬 함수로의 JMP문을 기존 API의 가장 앞 5Byte에 저장한다. ( x86에서의 JMP문은 5Byte이다. - Short Jump ) 그리고 기존의 5Byte는 내가 임의로 호출시키는 함수 제일 마지막에 실행하고, 다시 기존..