어셈블리어 튜토리얼 (10) api hooking (IAT)
DLL인젝션을 이용하여 다른 프로세스에 침투하는 방법을 알아봤으니 이제 프로세스 조작의 일종인 api hooking 에 대해서 알아보자.
api hooking란 윈도우 api 함수
를 가로채서 다르게 동작하게 하는것이다. 후킹이란 뭔가를 가로채는것인데 여러가지 후킹이 있다. 다른 일반적인 후킹도 있는데 다 가로챈다는 의미로 …
DLL인젝션을 이용하여 다른 프로세스에 침투하는 방법을 알아봤으니 이제 프로세스 조작의 일종인 api hooking 에 대해서 알아보자.
api hooking란 윈도우 api 함수
를 가로채서 다르게 동작하게 하는것이다. 후킹이란 뭔가를 가로채는것인데 여러가지 후킹이 있다. 다른 일반적인 후킹도 있는데 다 가로챈다는 의미로 …
다른 프로세스(프로그램)이 내가 원하는 동작을 하게하려고 하면 크게 두가지 방법이 있다.
첫번째 방법은 바이너리 패치라고하며 해당 프로그램(exe)을 어셈블리 단위로 파악해서(디어셈블) …
사용자 DLL 라이브러리를 다뤄보겠다. DLL 라이브러리를 만들기전에 먼저 DLL 를 호출하는 방법을 살펴보겠다.
앞서 DLL 라이브러리(windows api)를 사용할 때에는 LIB파일(kernel32.lib, user32.lib, gdi32.lib)을 이용해서 DLL 의 함수들을 호출했다. 이번에는 LIB파일 없이 직접 DLL 에서 함수를 얻어 호출하는 방법을 …
win.asm
간단한 윈도우 프로그램이다. win32 프로그래밍(c/c++)을 다뤄봤다면 바로 이해할 수 있을 정도로 소스가 흡사할 것이다. 어차피 같은 라이브러리에서 windows api를 쓰는데다 앞서 설명한 .if .while invoke 등의 지시어를 이용하기 때문이다.
위도우 프로그래밍을 하려고 하는게 아니니 이것이 어떻게 …
memcpy.asm
메모리값을 복사하는 소스이다. c언어를 다뤄봤으면 이와비슷한 함수를 본적이 있을 것이다.
이 소스를 설명하며 함수선언과 몇가지 추가적인 명령어를 보도록 할 것이다.
.686
.model flat, stdcall
option casemap :none
include c:\masm32\include\kernel32.inc
include c:\masm32\include\msvcrt.inc
includelib c:\masm32\lib\kernel32.lib
includelib
… 몇가지 예제 프로그램을 만들어보면서 어셈블리어를 연습해보겠다.
간단한 프로그램들로 어셈블리 명령어와 레지스터를 쓴다는것만 빼면 c프로그래밍과 비슷할 것이다.
콘솔창에 “hello world” 를 출력하는 간단한 프로그램이다.
helloworld.asm
.686
.model flat, stdcall
option casemap :none
include c:\masm32\include\kernel32.inc
include c:\masm32\include\msvcrt.inc
… 이전글
push 대상
스택메모리에 값/레지스터/메모리
를 push한다. 스택메모리 최상단 주소는 esp
레지스터에 저장되어 있다.
push 1
; 스택메모리에 값 1을 넣는다.
mov eax, 1
push
… 예제와 튜토리얼을 바로 확인 할 수 있도록 디버거를 설치한다.
디버거는 프로그램이 제대로 동작하는지 확인하거나 제대로 동작하지 않을때 확인 하려면 필수적으로 필요하다.
디버거는 여러가지가 있는데 64bit/32bit 모두 디버깅 할 수 있고 UI도 깔끔한 x64dbg (http://x64dbg.com/)를 설치한다.…
이 글의 목적은 어셈블리를 이용해 복잡한 프로그램을 짜는것이 아니고..
어디까지나 리버스 엔지니어링에 필요한 최소한의 어셈블리를 익히는 것이다.
해서 기초적인 어셈블리만 소개하도록 하겠다.
물논 복잡한 어셈블리는 나도 모름. ㄲㄲ
어셈블러는 MASM(The Microsoft Assembler) 으로 한다. NASM, FASM등 다른 어셈블러도 …