본문 바로가기

REVERSING

(12)
리버싱 5주차 보호되어 있는 글입니다.
리버싱 스터디 5~8주차 5주차 수업중 abex' crackme #1 abex' crackme #2 abex' crackme #3 1은 바로 풀어주고, 2와 3은 풀이 시간을 주고 풀이를 보여주는 식으로 할 생각인데 귀가 시간이 너무 늦어진다면 풀이 시간은 3번만 주거나 3을 과제로 내야할 듯. 과제 abex' crackme #4 abex' crackme #5 or 과제 없이 바로 워게임 문제 제작 기간 시작? (워게임 제작 및 풀이가 시간이 많이 필요할 것 같아 고민 중) 문제 선정 사유 28기 -> 30기 스터디 1주차 드림핵 Rev 0, 1 2주차 abex crackme 1, 2 3주차 Lena's reversing, abex crackme 3 4주차 abex..
[SWING] Reversing 10 패킹 비손실 압축 (LOSSLESS DATA COMPRESSION) - 압축된 파일을 100% 복원 가능한 경우 - 파일 크기를 줄여서 보관 및 이동에 용이하도록 하려는 목적 - 7-zip, 빵집과 같은 압축 프로그램으로 파일을 압축시키는 경우 - 대표적인 비손실 압축 알고리즘: Run-Length, Lempel-Ziv, Huffman 손실 압축 (LOSS DATA COMPRESSION) - 원래대로 복원할 수 없는 경우 - 파일(데이터)에 의도적인 손상을 주어서 그 대가로 압축률을 높이는 목적 - 주로 멀티미디어 파일들(jpg, mp3, mp4)은 손실 압축기법 - mp3의 핵심 알고리즘은 가청 주파수 범위를 벗어나는 영역 제거 실행 압축 - PE 파일을 대상으로 파일 내부에 압축해제 코드를 포함하고 ..
[SWING] Reversing 09 DLL DLL (Dynamic Linked Library)은 우리말로 '동적 연결 라이브러리'라고 하며 마이크로소프트 윈도우에서 구현된 동적 라이브러리이다. 코드와 데이터를 지니고 있으며 동시에 하나 이상의 프로그램에서 사용할 수 있다. 내부에는 다른 프로그램이 불러서 쓸 수 있는 다양한 함수들을 가지고 있다. 사용 방법 (1) 묵시적 링킹 (Implicit Linking) 프로그램 시작할 때 같이 로딩되어 프로그램 종료할 때 메모리에서 해제된다. (2) 명시적 링킹 (Explicit Linking) 프로그램에서 사용되는 순간에 로딩하고 사용이 끝나면 메모리에서 해제된다. 장점 프로그램에 라이브러리를 포함시키지 않고 별도의 파일(DLL)로 구성하여 필요할 때마다 불러쓸 수 있다. 일단 한 번 로딩된 DL..
[SWING] Reversing 08 PE 구조 분석 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이다. UNIX의 COFF(Common Object File Format)을 기반으로 만들어졌다. windows 환경에 따라 다르게 부르는데 32bit환경에서는 PE32, 64bit환경에서는 PE+또는 PE32+라고 불린다. Linux나 Unix와 같은 계열의 환경에서는 PE파일과 비슷한 형식으로 ELF(Executable and Linkable Format)파일이 존재한다. PE파일을 통해서 프로그램이 사용하는 API 또는 DLL 등 다양한 정보와 어느 메모리 주소에 로딩되는지 확인할 수 있다. PE파일 종류 1) 실행 계열 : EXE, SCR 2) 라이브러리 계열 : DLL, OCX, CPL, DRV 3) 드..
[SWING] Reversing 07 메모리 구조 프로그램이 실행되기 위해서는, 먼저 프로그램이 메모리에 로드(load)되어야 하고, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 할당하고 있다. 1. 코드(code) 영역 2. 데이터(data) 영역 3. 스택(stack) 영역 4. 힙(heap) 영역 코드(code) 영역 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 데이터(data) 영역 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 스택(stack) 영역..
[SWING] Reversing 06 레지스터 Register는 CPU 내부에 존재하는 다목적 저장 공간이다. 이름 크기 (bit) 용도 범용 레지스터 EAX 32 주로 산술 연산/함수 결괏값 저장 EBX 32 특정 주소 저장 (함수 호출 시 ESP 값) ECX 32 반복 횟수 저장 EDX 32 일반 자료 저장 세그먼트 레지스터 CS 16 코드 세그먼트 SS 16 스택 세그먼트 DS 16 데이터 세그먼트 프로그램 상태와 컨트롤 레지스터 EFLAGS 32 ZF, OF, CF 등 상태 표시 Instruction Pointer EIP 32 CPU가 처리할 명령어의 주소를 나타냄 어셈블리어 1. 비트연산 : shift 연산 1) 부호가 없는 연산 - 왼쪽으로 이동 : shl - 오른쪽으로 이동 : shr 2) 부호가 있는 연산 (MSB를 유지) -..
[SWING] Reversing 05 UPX 실행 압축된 노트패트 디버깅 UPX 실행 압축된 notepad_upx.exe를 디버깅하여 실행압축에 대한 개념을 이해하는 것이 목표이다. 즉, 코드를 트레이싱하면서 원본 notepad.exe 코드를 찾아내는 것이라고 할 수 있다. https://github.com/upx/upx/releases 위의 링크에서 upx-3.96-win64.zip 을 다운받는다. 코드 트레이싱 명령 위의 것이 원본 EP 코드이고 아래의 것이 실행 압축된 메모장의 EP 코드이다. Notepad_upx.exe를 디버거로 열어보면 위와 같이 UPX EP 코드가 나타난다. UPX 파일 트레이싱을 해볼 것인데, 이때 “루프(Loop)를 만나면 그 역할을 살펴본 후 탈출한다” 라는 방대한 코드에 대한 원칙이 있다고 한다. 압축 해..