기본 콘텐츠로 건너뛰기

글

라벨이 리버스엔지니어링인 게시물 표시

OllyDbg 64bit 실행방법

OllyDbg 1.1 은 기본적으로 64bit 환경을 지원하지 못합니다. 책의 디버깅 실습은 거의 대부분 OllyDbg 를 이용해서 진행됩니다.  그러나 OllyDbg 1.1 은 64bit 환경을 지원하지 못합니다.  <그림 1. Windows 7 64bit 에서 OllyDbg 1.1 실행시 예외 발생> 64bit OS 에서 "2장 Hello World 리버싱" 실습 예제 파일 HelloWorld.exe 를 OllyDbg 1.1 로 실행시키면 <그림 1>과 같이 예외가 발생하면서 ntdll.dll 모듈 영역의 코드에서 멈춰버립니다. (이것은 OllyDbg 1.1 의 버그입니다.) 64bit 환경에서 OllyDbg 사용할 수 있는 2 가지 방법 #1. 64bit OS + OllyDbg 2.0 OllyDbg 2.0 버전에서는 64bit에서 정상 실행 되지 않는 버그가 수정되었습니다. 다운로드 링크 :  http://www.ollydbg.de/odbg200.zip * 참고 최신 버전 OllyDbg 2.01 beta 2 는 실행 과정에 약간의 문제가 있습니다. 문제가 해결될 때까지는 OllyDbg 2.0 을 사용해 주시기 바랍니다. 위 링크에서 파일을 다운받아 압축을 해제한 후 실행하면 <그림 2> 와 같은 화면이 나타납니다. <그림 2 - Windows 7 64bit 에서 OllyDbg 2.0 으로 HelloWorld.exe 를 띄운 화면> <그림 2>의 화면을 책의  <그림 2.3>  처럼 보이게 하려면 다음과 같이 작업해 주시면 됩니다. 1) 내부의 CPU 윈도우를 최대화 시킵니다. 2) Code/Register/Dump/Stack Window 의 폰트를 변...

UAC 우회 기법

1. UAC 우회 기법_01  기존 UAC 우회 기법입니다. 동작과정을 간략하게 살펴보면 다음과 같습니다. 1. UAC.tmp(.DLL)를 생성한다. 2. explorer.exe에 Code Injection을 시도한다. 이로 인해 explorer.exe는 "C:\Windows\System32\sysprep" 경로   에 위치한 cryptbase.dll 파일을 UAC.tmp로 바꾼다. 3. 악성코드가 "C:\Windows\System32\sysprep” 경로에 위치한 sysprep.exe를 실행하고 sysprep.exe에 악성       cryptbase.dll를 로드시킨다. 이때 악성코드는 종료된다. 4. cryptbase.dll은 악성코드를 관리자 권한으로 다시 실행시킨다.  이 기술은 다음과 같은 상황에서는 UAC 경고창이 뜨지 않은 채 관리자 권한으로 승격이 가능하다는 점을 이용했습니다.  - explorer.exe와 같은 프로그램(Windows Publisher에 의해 디지털 서명이 된 프로그램)은 관리자 권한이 필요한    작업(“C:\Windows\System32\sysprep” 경로에 DLL 이동)을 UAC 경고 없이 실행 가능하다.  - sysprep.exe와 같이 자동 권한 상승 프로그램은 실행될 때 UAC 경고 없이 관리자 권한으로 자동 상승된다.  - 관리자 권한으로 동작하는 프로세스에 로드된 .dll은 관리자 권한을 가진다.  UAC 우회 기법에 대한 소스 코드 정보는 아래 링크를 참고하시기 바랍니다.  -  [C/C++] UAC Bypass:  http://www.rohitab.com/discuss/topic/40992-cc-uac-bypass/ 2. UAC 우회 기법_02  최근 사용되는 UAC 우회 기법은...

DLL Injection - 다른 프로세스에 침투하기

DLL Injection 구현 방법 몇 가지 구현 방법이 있습니다. 그 중에서 가장 유명한 방법이  CreateRemoteThread() API 를 이용 하는 방법입니다. 이 방법은 윈도우즈 프로그래밍 서적의 바이블인  Jeffrey Richter  의  Programming Applications for Microsoft Windows  에 소개된 내용입니다. 일단 소스 코드를 보겠습니다. (엔지니어에게는 백 마디 설명 보다는 역시 소스 코드를 한번 보는게 낫죠.) 먼저 Injection 시킬 myhack.dll 소스 코드입니다.  myhack.cpp // myhack.cpp #include "stdio.h" #include "windows.h" #pragma comment(lib, "urlmon.lib") #define DEF_NAVER_ADDR (" http://www.naver.com/index.html ") #define DEF_INDEX_PATH ("c:\\index.html") DWORD WINAPI ThreadProc(LPVOID lParam) {     URLDownloadToFile(NULL, DEF_NAVER_ADDR, DEF_INDEX_PATH, 0, NULL);     return 0; } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {     HANDLE hThread = NULL;     switch( fdwReason )     {         case DLL_PROCESS_ATTACH :        ...

DLL Injection

DLL Injection 이란? 다른 프로세스에 특정 DLL 파일을  강제로 삽입 시키는 것입니다. 더 정확히 표현하면 다른 프로세스에게 LoadLibrary() API 를 호출하도록 명령하여 내가 원하는 DLL 을 loading 시키는 것입니다. 따라서 DLL Injection 이 일반적인 DLL loading 과 다른점은 loading 대상이 되는 프로세스가 내 자신이냐 아니면 다른 프로세스냐 하는 것입니다. 아래 그림을 봐주세요. <Fig. 1> notepad 프로세스에 myhack.dll 을 강제로 삽입시켰습니다. (원래 notepad 는 myhack.dll 을 로딩하지 않습니다.) notepad 프로세스에 로딩된 myhack.dll 은 notepad 프로세스 메모리에 대한 (정당한) 접근권한이 생겼기 때문에 사용자가 원하는 어떤 일이라도 수행할 수 있습니다. (예: notepad 에 통신기능을 추가하여 메신저나 텍스트 웹브라우저 등으로 바꿔버릴 수도 있습니다.) DLL Injection 사용 목적 LoadLibrary() API 를 이용해서 어떤 DLL 을 로딩시키면 해당 DLL 의 DllMain() 함수가 실행됩니다. DLL Injection 의 동작원리는 외부에서 다른 프로세스로 하여금 LoadLibrary() API 를 호출하도록 만드는 것이기 때문에 (일반적인 DLL loading 과 마찬가지로) 강제 삽입된 DLL 의  DllMain() 함수가 실행 됩니다. 또한 삽입된 DLL 은 해당 프로세스의  메모리에 대한 접근권한 을 갖기 때문에 사용자가 원하는 다양한 일(버그 패치, 기능 추가, 기타)을 수행 할 수 있습니다. 그런데 문제는 대부분  악의적인 용도 로 사용된다는 것입니다. - 악성 코드 정상적인 프로세스(winlogon.exe, services.exe, svchost.exe, explorer.exe...

메모리 조작 해킹

Pin 을 이용한 메모리 조작 분석 캐릭터의 공격력을 높이기 위해 '공격 데미지 값' 이라는  데이터를 조작 하거나...  캐릭터가 받는 데미지를 없애기 위해 '데미지 처리 로직' 이라는  코드를 조작 하거나...  게임 해킹툴이 게임 치팅을 위해 가장 많이 사용하는 방식 중 하나가  '메모리 조작'  입니다.  '메모리 조작'  은 조작하는 방식에 따라 아래와 같이 크게 두 종류로 나눌 수 있습니다.  - 게임 프로세스 외부의 다른 프로세스에서 WriteProcessMemory 로 조작.  - 게임 프로세스 내부에 DLL 을 인젝션 시켜서 직접 값을 조작.  여기서는 DLL 을 인젝션 시켜서 직접 값을 조작하는 방식을 대상으로  Pin 을 활용해보도록 하겠습니다.  테스트 편의를 위해 Sample.exe 와 SampleDll.dll 을 간단하게 구현했습니다.  [ Sample.zip 다운로드 ]   - Sample.exe : 게임 프로세스 - SampleDll.dll : 게임 프로세스에 인젝션되는 게임 해킹툴   Sample.exe 가 실행될 때 SampleDll.dll 을 로드하고...  DLL 이 로드된 후, 'F1' 키를 누르면~ SampleDll.dll 이 Sample.exe 의 메모리를 조작합니다.    Sample.exe 실행 'F1' 키를 눌렀을 때... 실행되는 SampleDll.dll 의 코드는 아래와 같습니다.  게임 해킹툴이 메모리 조작 시 자주 사용하는 형태입니다.  SampleDll.dll 의 메모리 조작 코드 (소스코드)  참고로 hModule 은 Sample.exe 프로세스의 베이스 주소입니다.    SampleDll.dll 의 메모리 조작 코드 (디스어셈블 코드) 우리의 목표는 ...