본문 바로가기

리버싱

[리버싱] 리틀엔디안 빅엔디안 엔디안(Endianness) 이란 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 바이트 오더(Byte Order) 라고 한다. 엔디안은 보통 큰 단위가 앞에 나오는 빅엔디안(Big-endian) 과 작은 단위가 앞에 나오는 리틀엔디안(Little-endian) 으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디안(Middle-endian)이라 부르기도 한다. 올리디버거에서 바이너리는 1 byte (8bit) 씩 끊어 읽게 된다. 0x1234 표현방법 종류 0x1234 표현 0x12345678 표현 "abc" 표현 빅 엔디안 [12] [34] [12] [34] [56] [78] [61] [62] [63] [.. 더보기
[리버싱] 어셈블리어 명령어 데이터 형식 메모리에 접근했을 때 얼만큼 읽어들일지 결정 - BYTE : 부호없는 1 byte - SBYTE : 부호있는 1 byte - WORD : 부호없는 2 byte - SWORD : 부호있는 2 byte - DWORD : 부호없는 4 byte - SDWORD : 부호있는 4 byte operand (피연산자) 형식 - mem : 메모리 - label : 지정된 레이블 - imm : 즉시 값, 상수 - reg : 범용 레지스터 어셈블리어 명령어 INC (Increase) operand 의 값을 1 증가시키는 명령어 (operand 1개) "++" 연산자와 동일 ex ) INC reg (INC EAX), INC mem (INC [EBP-0x04]) DEC (Decrease) operand 의 값을 1.. 더보기
[리버싱] 어셈블리어란 어셈블리어의 구조 어셈블리어는 기본적으로 명령어 (OpCode) 와 오퍼랜드 (Operand) 로 이루어져 있다. Operand 는 명령어 다음에 오는 레지스터 이름이나 값 즉, 명령 대상이 되는 레지스터나 값이다. 명령어를 Operator (연산자) 라고 부르며 이러한 Operator 의 종류에 따라 오퍼랜드의 개수가 다르다. EX) MOV EAX, val1operator operand1, operand2 어셈블리어 문법 어셈블리어의 문법에는 크게 Intel 방식과 AT&T 방식이 있는데 그 둘의 차이점은 다음과 같다. Register 이름 AT&T 문법에서는 모든 레지스터 이름 앞에 %가 붙는다. 이는 레지스터와 다른 심볼을 혼동하지 않게 하는 장점이 있다. 예를 들어 eax 레지스터를 나타내는 경우.. 더보기
[리버싱] 디버거(OllyDbg) 디버그란 컴퓨터 프로그램의 정확성이나 논리적인 오류(버그)를 찾아내는 테스트 과정 디버거란 프로그램의 논리적인 오류(버그)를 찾아내기 위해 테스트하고 디버그하는 데 쓰이는 프로그램 OllyDbg OllyDbg를 통해 Hello World 문자열을 출력하는 exe 파일을 실행시키면 다음과 같이 나온다. 우선 설정을 바꿔줬다. 디버거로 열었을 때 시작할 위치를 설정해준다. Options -> Debugging options -> Events에서 Entry point of main module을 선택하면 된다. 그 다음 jump 하는 부분에 화살표를 만들어주는 설정을 해준다. 위의 ollydbg.ini 파일을 열어준다. 위와 같이 바꿔주면 다음과 같이 jump 부분에 화살표가 생긴다. Code Window 위.. 더보기
[리버싱] 리버싱에 대해 알아보자 리버싱이란 해당 프로그램의 구조, 기능, 동작 등의 원리를 역으로 따라가며 이해하고 분석하여 부족한 부분을 보완하거나 추가되었으면 하는 새로운 기능 등을 추가하는 작업이다. 좋은 쪽으로는 유지, 개발, 보안에 사용되며, 나쁜 쪽으로는 컴퓨터 시스탬 내에 침입하는 크랙 및 기술을 빼오는 데 사용된다. 해킹 보안에서는 침해 사고를 일으키는 바이러스 및 웜을 비롯한 각종 악성코드와 좀비 프로세스에 관련된 실행 코드를 분석하여 소스 코드로 변환해 분석하는 작업을 의미한다. 악성 코드 분석에서 가장 핵심적인 기술로 사용되고 있다. 리버싱을 배우는 이유 - 프로그램의 작동 원리나 취약점 등을 알 수 있다 - 개발 / 테스트 단계에서 발견하지 못했던 버그나 취약점을 파악할 수 있다 - 파일이나 메모리를 직접 수정(패.. 더보기