Reversing (8) 썸네일형 리스트형 Tutorial 05 이번 문제를 실행하면 아래와 같은 NAG 창이 뜬다.trial 횟수가 10번으로, 이 이상 실행하게 되면 프로그램이 실행되지 않게 막아놨다. 또한 프로그램을 종료할 시 아래의 NAG도 발생한다.이들을 우회하는 것이 이번 문제의 목표이다.OllyDbg를 통해 문제를 열어보자.먼저, 첫 번째 NAG가 뜨는 코드를 찾아가야 한다.이때, F8 키를 계속 누르면서 찾기에는 비효율적이므로 Animate Over(Ctrl + F8)을 사용하자.Animate Over를 사용하면 자동으로 코드가 실행되면서, NAG가 실행되는 코드에서 멈추게 된다. 해당 코드를 중심으로 코드를 살펴보자.NAG CALL을 우회하기 위해서는 JUMP 관련 명령어들을 사용해야 한다. NAG CALL 주소를 건너뛸 수 있는 JUMP 명령어들은 .. Tutorial 04 Tutorial 4는 간단한 애플리케이션을 대상으로 분석을 진행한다. 먼저, PixtopianBook을 실행하고 로그인한다.Add 버튼을 눌러 사용자를 추가할 수 있다. 4명의 사용자를 추가한 다음, Add를 한 번 더 누르면 다음과 같은 알림 창이 뜬다. Add Group을 눌러 그룹도 추가할 수 있다. 3개의 그룹을 추가한 다음, 한 번 더 누르면 다음과 같은 알림 창이 뜬다. 문제의 핵심적인 목표는 위 두 개의 추가 제한을 우회하는 것이다. 추가적으로 제거할 수 있는 문자열들도 존재한다.기본 화면에서 볼 수 있는 Register와 관련된 문자열이 있다.또한, [Help] -> [About PixtopianBook]을 누르면 나오는 창에도 있다. 이제, 수정해야 할 부분들을 정리해 보자.사용자 추가 .. Tutorial 03 Tutorial 3은 실행 시 나오는 NAG 메시지를 없애는 것이 목표이다. NAG은 사용자를 귀찮게 하면서 특정 행동을 유도하는 알림 메시지를 뜻한다. Register Me를 실행하면 아래와 같이 3개의 창이 발생한다.여기서 1, 3번 창을 제거하는 것이 목표이다. 먼저 EAX가 0인지 비교하고, 같다면 1번 창을 띄운다. MessageBoxA를 우회하는 방법은 총 2가지가 있다. 첫 번째 방법은 함수 호출 코드를 모두 NOP으로 채우는 것이다.NOP은 아무 동작도 하지 않고 넘어가는 명령어이다. 두 번째 방법은 EP(Entry Point)를 MessageBoxA 호출 이후로 설정하는 것이다.EP는 프로그램이 실행될 때 가장 처음으로 실행되는 명령어의 주소이다. PE bear로 확인한 결과, 현재 EP.. Tutorial 02 Tutorial 2는 1과 동일한 실행 파일이지만, 1에서는 패치를 통해 문제를 해결했다면 2에서는 문제에 필요한 크랙 파일을 만드는 것이 목표이다.reverseMe는 "Keyfile.dat" 파일을 필요로 한다. 따라서, Keyfile.dat 파일을 하나 생성한 뒤 해당 코드까지 진행해 보자.우선 아무런 값이 들어있지 않은 Keyfile.dat을 생성하였다. CreaeFileA를 실행한 후 반환값을 통해 분기문의 조건을 결정한다. Tutorial 1에서는 Keyfile.dat이 존재하지 않았기 때문에, EAX 값이 FFFFFFFF이였지만, 현재는 Keyfile.dat의 핸들인 204가 저장되었다. 다음으로, ReadFile을 호출한다. 이때, hFile에는 Keyfile.dat에 대한 핸들인 204가 .. Tutorial 01 reverseMe.exe를 실행하면 다음과 같은 창이 나온다.즉, 해당 문구가 뜨지 않도록 하는 것이 이번 문제의 목적이다. OllyDbg를 이용해 코드를 확인해 보자. `CreateFileA` API를 사용하여 "keyfile.dat" 파일을 열고자 한다.`CreateFileA` API는 파일을 열지 못할 때, -1을 반환한다. 함수의 반환값과 -1을 비교하여 JNZ 즉, 두 값이 같지 않다면 0040109A 주소로 이동한다. 만약 두 값이 같아서, JMP가 되지 않는다면, 처음 실행했을 때 보았던 창이 나오게 된다. 따라서, JNZ를 JZ로 변경하여 두 값이 일치할 때 0040109A 주소로 이동하게 해야 한다. 다음으로는 `ReadFile` API를 호출한다. 이때, 읽는 파일인 hFile의 인자값.. 반디집 API 후킹 Detours를 이용하여 반디집 API를 후킹 할 수 있다.Detours는 원본 함수의 시작 부분에 점프 명령을 삽입하여 사용자 정의 함수로 실행 흐름을 옮기고, Trampoline 함수를 통해 원본 함수의 나머지 부분을 호출할 수 있도록 하는 방식으로 작동한다.반디집에서 압축을 해제할 때 WinAPI인 WriteFile 함수를 사용할 것이라 추측해 볼 수 있다.확실하게 확인해 보기 위해 해당 함수가 호출될 때 printf를 통해서 메시지를 출력해 본다. // dllmain.cpp : DLL 애플리케이션의 진입점을 정의합니다.#include "pch.h"#include #include #include "C:\\~~~~~\\include\\detours.h"#pragma comment(lib, "C:\\~.. memcpy 분석 `memcpy`는 메모리 영역을 복사하는 C 언어의 표준 라이브러리 함수이다.#include #include #if !_ASM_MEMCPYtypedef long word;#define lsize sizeof(word)#define lmask (lsize - 1)void *memcpy(void *dest, const void *src, size_t count) { char *d = (char *)dest; const char *s = (const char *)src; int len; if (count == 0 || dest == src) return dest; if (((long)d | (long)s) & lmask) { // src and/or dest.. Byte Ordering 바이트 오더링(Byte Ordering) : 데이터를 저장하는 방식빅 엔디언(Big Endian)리틀 엔디언(Little Endian)BYTE b = 0x12;WORD w = 0x1234;DWORD dw = 0x12345678;char str[] = "abcde";TYPENameSIZE빅 엔디언 Style리틀 엔디언 StyleBYTEb1[12][12]WORDw2[12][34][34][12]DWORDdw4[12][34][56][78][78][56][34][12]char []str6[61][62][63][64][65][00][61][62][63][64][65][00] 바이트 타입의 b 변수를 저장할 때는 두 방식의 차이가 없지만, 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타난다. 빅 엔디.. 이전 1 다음