Reverse Engineernig/study

1. PE File 소개 PE(Portable Excutable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX에서 사용되는 COFF(Commeon Object File Format)를 기반으로 Microsoft에서 만들었다. ● 분류 32비트 형태의 실행 파일 : PE (또는 PE32) 64비트 형태의 실행 팡리 : PE+ ( 또는 PE32+) 2. PE File Format ● 종류 종류 주요 확장자 실행계열 EXE,SCR 라이브러리 계열 DLL, OCX, CPL, DRV 드라이브 계열 SYS, VXD 오브젝트 파일 계열 OBJ 2. PE File 기본 구조 각 실행파일에는 UNIX 시스템에서 사용되는 실행파일, 개체 코드 및 공유 라이브러리 컴퓨터 파일의 형식인 CO..
1. 함수 호출 규약(Calling Convention) 함수 호출 후에 ESP(스택 포인터)를 어떻게 정리하는에 대한 약속 ● 함수를 호출할 때 파라미터를 어떻게 처리할까? 함수 실행 전 : 스택을 통하여 파라미터를 전달 함수 실행 후 : 사용한 스택 정리 → 스택에 저장된 파라미터는 삭제되지 않는다 → ESP 값을 수정하여 저장된 파라미터가 더 이상 유효한 데이터가 아님을 명시적으로 기록해둔다. ● 함수 실행 후, 누가 어떻게 스택을 정리할까? 함수 호출 규약 : cdelcl, stdcall, fastcall 1.1 cdecl 주로 C언어에서 사용되는 방식 Caller (함수를 호출한 쪽)에서 스택을 정리한다. cdecl 방식의 예제 코드이다. 컴파일후 x64dbg로 열어보면 add() 함수의 파라미..
1. 프로그램 확인 VB(Visual Basic) 으로 작성된 프로그램이다. 시리얼 키(serial key)를 검증하는 프로그램이다. 2. VB(Visual Basic) 파일의 특징 2.1 Visual Basic (VB) 전용 엔진 VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0) 이 라는 VB 전용 엔진을 사용한다. → 메시지 박스를 출력하고 싶을때 VB 소스코드에서 MsgBox() 함수를 사용한다. → VB 컴파일러는 실제로 MSVBVM60.dll!rtcMsgBox() 함수가 호출되도록 만들고, → 이 함수 내부에서 Win32 API인 user32.dll!messageBoxW() 함수를 호출해주는 방식으로 동작한다. 2.2 N (Nat..
1. 스택 프레임 스택 프레임이란 쉽게 말해서 ESP (스택 포인터) 가 아닌 EBP (베이스 포인터) 를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다. 스택 프레임을 이용해서 함수 호출을 관리하면, 아무리 함수 호출 depth가 깊고 복잡해져도 스택을 완벽하게 관리할 수 있다. 1.1 ESP vs. EBP ● ESP ESP : 스택에 저장된 데이터의 최하위 주소값 (FILO) 최근에 스택에 저장된 데이터의 주소값 PUSH or POP 명령에 의해서 가변적, 따라서 특정 데이터가 저장된 주소 값을 알기가 어렵다. ● EBP EBP : 함수에서 사용될 그택의 기준 주소 값 함수가 호출된 후, 종료될 때까지 변경되지 않는 주소 값 함수에서 스택에 저장된 데이터들의 주소값을 ..
1. 프로그램 확인 abex' crackme1-voiees.exe ( 실습파일에는 voiees.exex 라고 되있을건데 확장자를 exe로 변경후 실습) 어셈블리 언어로 작성된코드이다. > stub code 추가되어 있지 않음 1.1 디버깅 abex' crackme1-voiees.exe 파일을 디버거에 올렸을때 나오는 첫 화면이다. 우리의 목표는 Ok, I really think ... 라는 문구를 출력하는 것이다. 코드가 짧고 배우는 초기단계 이므로 하나씩 실행해 보며 코드를 파악해 볼 것이다. 40100E 주소의 call 함수를 실행하자 프로그램을 처음 실행했을때 뜨는 창을 만났다. 확인을 누른후 계속 실행해보자 에러 메시지 출력까지 왔다. 다음 명령어가 으로 jmp 하는거고, 주소의 함수는 프로세스를..
1. 스택 - 프로세스에서 스택 메모리의 역할 함수 내의 로컬 변수 임시 저장 함수 호출 시 파라미터 전달 복귀 주소(address) 저장 - FILO (First In Last Out) 구조 1.1 스택의 특징 프로세스에서 스택 포인터(ESP)의 초기값은 Stack Botton 에 가깝다 PUSH (위) / POP (아래) 명령에 따라 스택포인터가 이동한다. 데이터는 높은 주소부터 먼저 쌓여간다.
1. CPU 레지스터란 ? CPU 내부에 존재하는 다목적 저장 공간 CPU 내부에 존재하므로, RAM에 비해 데이터의 고속 처리가 가능하다. 2. IA - 32의 레지스터 - IA -32는 지원하는 기능도 무척 많은 만큼 레지스터의 수도 많다. 위 그림에 나온 레지스터들 외 에도 다양한 레지스터가 존재한다. 애플리케이션 디버깅의 초급단계에서는 Basic program execution register에 대해 알아 보겠다. 2.1 Basic program execution register > Basic program execution register 은 크게 4개의 그룹으로 구성된다. General Purpose Registers / 범용레지스터 (32비트, 8개) Segement Registers / 세..
1. 바이트 오더링 바이트 오더링( Byte Ordering) 이란 데이터가 저장되는 방식(순서)를 의미한다. 바이트 오더링 방식에는 크게 빅 엔디언(Big Endian) & 리틀 엔디언(Little Endian) 이 있다. 1.1 빅 엔디언(Big Endian) 빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 순차적으로 저장된다. 비교 연산시 높은 비트열을 먼저 비교하므로 유리하다. 연산속도가 리틀 엔디언 방식에 비해 느리다는 단점이 있다. 1.2 리틀 엔디언(Little Endian) 리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장된다. 낮은 비트열이 먼저 들어와서 연산이 바로 가능하다. 비교 연산을 할 때는 빅 엔디언에 비해 불리하다는 단점이 있다. → 위 사진과 같이 총 4..
po3nyo
'Reverse Engineernig/study' 카테고리의 글 목록