Tag Archives: asm

어셈블리 튜토리얼 (18) 64비트 api hooking(Trampoline #2)

4.5. api hooking(Trampoline #2)

좀 더 유연한 Trampoline방식과 조금 다른 방식의 소스이다. 원래의 함수를 이어붙인 이전방식과 달리 매번 후킹을 해제했다가 다시거는 방식이다.
후킹된 함수들을 관리하기위해 후킹 관련 정보를 담은 구조체를 추가하였다.

앞서본 Trampoline처럼 기본구현 방식은 14byte(jmp코드)를 덮어씌우는 방식으로 동일하다. 후킹함수내에서 …

어셈블리 튜토리얼 (17) 64비트 api hooking(Trampoline)

4.5. api hooking(Trampoline)

Trampoline은 IAT 방식과 달리 많이 복잡해졌다. 32비트와 달라진점 에서 잠깐 설명했었듯이 64bit에서는 함수의 시작이 정형화되어있지 않다.

32bit MessageBoxA 함수

; 32bit stdcall 정형화된 함수시작 (5byte)
mov edi,edi
push ebp
mov ebp,esp

64bit MessageBoxA 함수

; 64bit fastcall 

어셈블리 튜토리얼 (16) 64비트 api hooking(IAT)

4.5. api hooking(IAT)

마찬가지로 32비트와 크게 다르지 않다. 이전 예제처럼 fastcall함수콜 방식에서 파라메터 설정하는 부분과 메모리주소(포인터)의 크기가 dword가 아닌 qword이라는 점만 제외하면 똑같으니 이 부분만 확인하면서 훑어보자.

apihook_64.asm

option casemap:none
;option frame:auto

include D:\WinInc208\Include\windows.inc
;include D:\WinInc208\Include\user32.inc
;include 

어셈블리 튜토리얼 (15) 64비트 DLL Injection

4.4. DLL Injection(WinHook)

함수(WinHook)를 이용한 injection이기 때문에 32비트와 크게 달라진 부분이 없다. 달라진 부분만 설명하도록 하겠다.

injector_64.asm

option casemap:none

include D:\WinInc208\Include\windows.inc
;include D:\WinInc208\Include\user32.inc
;include D:\WinInc208\Include\kernel32.inc

printf PROTO :qword
getchar PROTO

SetVictim proto, lpszVictim:dword
StartHook proto
EndHook proto

includelib kernel32.lib

어셈블리어 튜토리얼 (13) post sniffing

3.6. post sniffing

이번엔 post 값을 중간에서 가로채는 예제를 만들어보겠다. 윈도우 api 중 post 값을 서버에 전송하는 api는 wininet.dll 의 HttpSendRequest가 있다. 이 api를 후킹하면 post값을 가로챌 수 있다.

BOOL HttpSendRequest(
  _In_ HINTERNET hRequest,
  _In_ LPCTSTR   lpszHeaders,
  _In_ DWORD     

어셈블리어 튜토리얼 (12) speed hack

3.5. speed hack

이번에는 api hooking 을 이용한 스피드핵이다.

프로그램에선 보통 컴퓨터 성능과 상관없는 일정한 운직임을 위해 장면의 시간 간격(delta time) 을 구해서 움직임에 사용한다.

예를 들어 이런것이다.

; Update함수는 장면을 그리는 함수
1. Update를 1초에 10번 호출할 수 …

어셈블리어 튜토리얼 (11) api hooking (Trampoline)

이번엔 Trampoline 기법을 이용한 api hooking을 살펴보도록 하겠다.

뜻은 어릴때 뛰어놀던 “방방이” 인거 같은데 왜이런 명칭인지는 모르겠다. ㄲㄲ

5byte patch 라고도 한다. 32비트 프로그램에서 함수의 시작부분은 거의 항상

mov edi, edi
push ebp
mov ebp, esp

이렇게 시작하는데 이 부분이 …

어셈블리어 튜토리얼 (10) api hooking (IAT)

DLL인젝션을 이용하여 다른 프로세스에 침투하는 방법을 알아봤으니 이제 프로세스 조작의 일종인 api hooking 에 대해서 알아보자.

api hooking윈도우 api 함수 를 가로채서 다르게 동작하게 하는것이다. 후킹이란 뭔가를 가로채는것인데 여러가지 후킹이 있다. 다른 일반적인 후킹도 있는데 다 가로챈다는 의미로 …

어셈블리어 튜토리얼 (9) DLL Injection (WinHook)

3. 리버스 엔지니어링 (1)

다른 프로세스(프로그램)이 내가 원하는 동작을 하게하려고 하면 크게 두가지 방법이 있다.

  1. 파일수정(exe) : 해당 프로그램을 직접 수정하는 방법
  2. 메모리수정 : 내가 만든 프로그램을 해당 프로그램에 침투하는 방법

첫번째 방법은 바이너리 패치라고하며 해당 프로그램(exe)을 어셈블리 단위로 파악해서(디어셈블) …