reversing13 [Reversing] PE Header 개념 정리 & wow64 fs redirection PE 파일 PE는 Portable Executable은 이식 가능한 실행 파일이라는 뜻으로 하나의 실행 파일을 여러 운영체제에서 실행 가능하다는 의미다. 유닉스 실행 파일 형식인 COFF(Common Object File Format)을 기반으로 exe, dll, obj, sys 등의 확장자를 가진 파일들이 이에 해당한다고 볼 수 있다. PE 파일 종류 1. 실행 계열 : exe, scr 2. 드라이버 계열 : sys, vxd 3. 라이브러리 계열 : dll, ocx, cpl, drv 4. 오브젝트 계열 : obj VA와 RVA VA > 프로세스 가상 메모리의 절대주소 RVA > ImageBase로부터의 상대주소 (메모리에 로딩된 상태) > PE 메모리에 적재되기 전 기본 ImageBase는 0이다. 그.. 2020. 9. 21. [Reversing] 어셈블리어 C언어로 변환하기 #1 주어진 어셈블리어 main() - 1 push rbp rbp는 스택의 첫 시작 주소가 저장되는 포인터 레지스터다. 그래서 push rbp를 통해 main 함수의 시작 주소가 스택에 저장된다. mov rbp, rsp Rsp는 항상 스택의 끝 지점 주소를 갖고 있는 포인터 레지스터다. 현재 main을 호출한 상태이므로 가장 끝 지점과 시작 주소가 같을 것이다. 그래서 rsp에 rbp 값을 넣어주어 rbp는 항상 시작 주소를 갖고 있고 rsp는 계속 움직이며 스택의 끝 지점을 가리키고 있게 된다. sub rsp, 16 이 명령어는 현재 rsp가 가리키는 주소를 16byte만큼 빼 스택을 사용할 수 있도록 준비하는 것이다. (지역변수 공간 확보) mov DWORD PTR [rbp-4], 1 rbp – 4 주소에.. 2020. 9. 14. [Reversing] abex' Crackme #1 exe 파일을 실행시키면 다음과같이 나온다 코드를 살펴보면 위 에러가 출력되게 하는 메시지 박스와 YEAH! Ok, I really think that your HD is a CD-ROM! :p이 있다. 아마 이 문장이 출력되는 메시지 박스를 띄워야 하는 것 같다. * MessageBoxA int MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType ); MessageBoxA(핸들, 내용, 제목, 박스 종류) 함수로 메시지 박스는 총 4개의 인수를 가진다. * GetDirveType 함수를 호출하기 바로 전에 'c:\\'로 설정했기 때문에 함수에서 반환 값이 3이 되어 고정 미디어라는 것을 알 수 있다. UINT GetDriveTypeA.. 2020. 9. 14. [Reversing] x86(32 bit) / x64(64 bit) 호출규약 함수 호출 규약이란? 함수를 호출할 때 파라미터를 어떤 식으로 전달하는가에 대한 약속이다. X86 함수 호출 규약 (32 bit) 1. __cdecl - C declaration이라는 의미로 C 프로그래밍 언어가 기원한 호출 규약이다 - C 언어에서 사용되며 함수 호출이 반환된 뒤 caller(호출자)에서 스택을 정리한다 (함수 호출 전과 후의 ESP 위치가 같아야 됨!) - 매개변수를 스택에 push해 함수를 호출할 때 전달해준다 (오른쪽에서 왼쪽으로 인자를 스택에 넣는다) - 가변 인수 함수를 만들 때는 반드시 cdecl 호출 규약을 사용해야 한다 - 함수 앞에 __을 추가한다 - 함수 호출규약을 입력하지 않으면 기본값으로 __cdecl이 설정된다 예시 코드 #include int __cdecl cd.. 2020. 9. 14. [Wargame_Dreamhack] rev-basic-0 보호되어 있는 글 입니다. 2020. 9. 13. [Reversing] Stack 구조와 Stack Frame 스택(Stack)이란? - 위 사진에서 가장 아래 쪽에 있는 영역이 스택 영역이다. - 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out, 후입선출) 형식의 자료 구조이다. - 프로그램이 자동으로 사용하는 임시 메모리 영역으로 함수의 호출과 관계되는 지역변수, 매개변수, 리턴 값 등의 임시 데이터를 저장하는데 사용된다. 1) 코드(텍스트) 영역 - 실행할 프로그램의 소스 코드가 저장되어 있는 영역 - 실행 파일을 구성하는 명령어(함수, 제어문, 상수 등)들이 저장된다 - 저장된 명령어를 CPU에서 하나씩 가져가 처리한다 2) 데이터 영역 - 전역변수와 static 변수, 배열, 구조체 등이 할당되는 영역 - 프로그램 시작과 동시에 할당되고 프로그램이 종료되어야 메모리가 소.. 2020. 9. 8. 이전 1 2 3 다음