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을 이용하는 방법..
MASM을 이용해 구현한 32Bit Trampoline API Hooking을 소개하고 실습을 진행해 보겠다. 32Bit Trampoline API Hooking 기법은 앞에서도 C언어로 구현하는 것을 소개했다. 기법자체는 다시 소개하지 않을 생각이다. 그냥 5Byte를 Jump문으로 Overwrite해서 API Hooking을 진행하는 기법이다. api_hooking.asm 1-12 : 이전과 같은 내용의 기본적인 선언문이다. winmm.dll의 용도는...? 14-17 : 각종 함수들의 proto를 작성한다. 19-21 : data 섹션에 필요한 문자열(DLL, API명)을 저장한다. 24-26 : bss 섹션에 필요한 것들을 미리 선언한다. 28 : DLL이 Injection되면 자동으로 호출되는 ..
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는 내가 임의로 호출시키는 함수 제일 마지막에 실행하고, 다시 기존..
사실 이걸 여기메뉴에 쓰는게 맞나 싶기는하다.. 쨋든 써보자 !! 헤헿.. ( 진짜 2시간걸려서 자세하게 써놨는데.. 이거 실습하다가 Chrome에 DLL Injection 되면서 날려먹어서 너무너무 속상한 마음으로 다시 쓴다... 흑흑 ) 날려먹어서 귀찮으니까 SetWindowsHookEx API를 이용한 Message Hooking에 대한 자료는 구글에 따로 알아보도록 하자. 사실 나뭇잎책에도 자세하게 나와있으니 이해하는데 어려움은 없을 것이다. SetWindowsHookEx API의 모양만 잠깐 확인하고 넘어가자. Point !! Message Hook이 설치되면 해당 윈도우 이벤트가 발생하면 OS는 이벤트가 발생한 Process에 Message Hook Function이 포함된 DLL 파일을 강제..
32bit MASM 환경구성 우선 MASM32를 설치하자. 다음 링크에서 다운받고 실행하면된다. http://www.masm32.com/ MASM32 SDK Description The MASM32 SDK version 11 is a working development environment for programmers who are interested in either learning or writing 32 bit Microsoft assembler (MASM). The installation is an automated process that installs the correct directory tree www.masm32.com 추가로 설정경로만 정해준 뒤 그냥 확인을 쭈욱 누르면 설치경로에 ma..