Reverse Engineering 30

[System] 바이트 순서 (Little Endian과 Big Endian)

다중 바이트로 이루어진 수를 단일 주소를 가진 하나의 데이터로 다루어야 할 필요가 있을 때 어떠한 바이트 순서로 그 데이터를 배열할 것인지 결정하는 것은 엔디언(Endian)이라 하며, 이때 낮은 주소에 최하위 바이트를 저장하는 방식을 리틀 엔디언(Little Endian)이라고 부르며, 이와는 반대로 낮은 주소에 최상위 바이트를 저장하는 방식을 빅 엔디언(Big Endian)이라고 부른다. 0x12345678 ※ 최상위 비트 : 12 ※ 최하위 비트 : 78 Little Endian과 Big Endian의 어원은 동화 [걸리버 여행기]에서 출발한다. 걸리버가 여행하던 소인국은 크게 2개의 파벌로 나뉘고 있었다. 그 기준은 달걀을 처음 깨는 방법, 달걀의 뾰족한 부분을 먼저 깨야한다는 파와 그 반대인 넓..

[CPU] 80286과 80386 마이크로프로세서

1. 80286 80286은 외부적으로 8086에 비해 더 빠른 속도와 더 많은 어드레스(24비트의 주소선)를 다룰 수 있게 된 것 외에 내부적으로 보호모드(Protected Mode)라는 새로운 소프트웨어 아키텍처를 출현시켰다. 80286은 전원을 넣으면 이전의 8086과 같은 실제모드로 출발하여 하위 20비트의 주소선만을 사용하여 최대 1MByte까지의 메모리를 다룰 수 있었고, 이와 같이 실제모드에서 동작하는 80286은 단지 클록속도가 빨라진 8086과 같았으며, 과거 8086 소프트웨어가 아무런 수정 없이 돌아갈 수 있었다. 하지만 프로그램에서 보호모드의 전환을 수행하게 되면80286은 멀티태스킹 환경을 지원하게 된다. 이는 각 프로그램에 독립적인 일정한 양의 메모리를 할당할 수 있게 해주며 프..

[CPU] 세그먼트 레지스터의 이용

프로그램이 수행되기 위해서는 여러 가지 메모리 주소가 필요하다. 우선 현재 수행되고 있는 명령어의 위치를 나타내는 값, 프로그램이 사용하는 데이터가 있는 메모리 값, 그리고 함수 호출 등을 위한 스택의 위치를 나타내는 값 등이다. 8086은 어드레스 버스가 20비트로 구성되어 있어서 1MByte까지 메모리 번지를 나타낼 수 있으나 8086에 있는 레지스터는 16비트밖에 되지 않아서 어떤 명령이 수행되어 메모리를 참조할 때에는 항상 다음의 표와 같이 암시적 또는 명시적으로 세그먼트 레지스터가 개입되게 된다. 세그먼트 오프셋 목적 코드 세그먼트(CS) IP 수행되어질 명령어의 위치 스택 세그먼트(SS) SP, BP 스택 주소 참조 데이터 세그먼트(DS) 범용 레지스터, DI, SI 데이터 주소 참조 보조 세..

[CPU] 8086의 레지스터들

8086 내부에는 데이터의 일시 저장, 여러 가지의 연산 처리와 번지 지정 등을 쉽고 빠르게 하기위해 많은 레지스터가 준비되어 있다. 이들 레지스터는 몇 개의 그룹으로 나뉘어 프로그램의 실행을 위한 역할을 담당한다. 즉, 각 레지스터들은 각자의 역할이 정해져 있다. 8086에서 이들 레지스터는 기본적으로 16비트로 구성되어 있고, 이들 레지스터 중 데이터 레지스터는 분할해서 8비트씩의 레지스터로 취급할 수도 있다. 1. 범용 레지스터(General Register) : 범용 레지스터는 연산 결과를 받을 수도 있으며, 연산에 사용되어질 수도 있는 레지스터이다. 과거 8비트 컴퓨터에서는 연산 결과를 저장하기 위하여 특정 레지스터를 사용할 수 밖에 없었으나 8086에서는 범용 레지스터를 사용하여 모든 연산을 ..

[CPU] 8086 세그먼트와 오프셋의 개념

8086은 1978년 인텔에서 제작된 CPU로서 처음으로 x86 아키텍처를 적용한 제품입니다. (모든 80x86 CPU는 8086을 기초로 하여 만들어졌으므로 8086에서 사용되는 명령어는 다른 80x86 제품에서도 사용할 수 있습니다.) 클럭은 제품에 따라 4.77MHz에서 10MHz까지 다양하며 16 bit 레지스터를 사용하였습니다. 내부적으로는 16 bit 레지스터를 사용했지만, 어드레스 버스가 20 bit 였으므로 1024 * 1024 = 1048576 (byte) = 1MB 만큼의 메모리를 사용할 수 있었습니다. 어드레스 버스가 20 bit 였기때문에 최대 1MB(2^20)의 메모리까지 사용할 수 있었지만, 바이오스에서 사용하는 영역인 384KB를 제외하면 640KB만을 실제로 사용할 수 있었습..

[Reversing 도움자료] OllyDBG 플러그인_<GODUP>

작성자: window31 출 처: Broken Code[http://www.window31.com] 좀 오래된 플러그인이긴 한데, 별로 아시는 분이 없는 것 같아서 한번 소개해봅니다. GODUP 라는 플러그인인데, 기능은 좀 잡종이라 이것저것 다 설명하긴 좀 그렇고요 (resource hack 이나 PE Scanner 같은 기능은 제쳐둡시다) map loader 라는 기능, 이걸 한번 도마 위에 올려 보겠습니다 :) 이 기능이 어떤 것이냐면 map 파일을 플러그인에서 지정해 줄 경우, 현재 분석중인 바이너리를 map 파일로 매칭시켜서 디스어셈블리 창에 뿌려주는 겁니다. 즉, map 파일이 있는 바이너리를 분석할때는 아주 좋죠~ (map 파일이 없는 바이너리야 뭐 아무 상관없는 플러그인이지만... ;;; ..

[Reverse Engineering::Reversing 도움자료] 기초 선수과목_어셈블리어

어셈블리어 관련 문서  [해커스쿨 : http://www.hackerschool.org/HS_Boards/data/Lib_prog/Asm.pdf] 문서에 관한 간단한 용어 설명 [Page.4] 맵핑 : ~~에 ~~를 할당한다는 뜻으로 이해하면 될 것 같다. 세그먼트와 오프셋에서 중간에 bus라는 말이 나온다. 그리고 그아래 16비트 로케이션이란 말이 나오는데 그 뜻은 16bit로 표현할 수 있는 메모리 주소를 말하는데, 1bit는 2개의 숫자를 표현(0 or 1)할 수 있으니 16bit로 메모리 주소를 표현하면 최대 값은 2^16(범위는 0 ~ 2^16-1)이다. 그래서 프로세스가 RAM에 자료를 쓸 필요가 있을 때 버스를 통해 16bit 로케이션을 보낸다. 이전에는 컴퓨터가 가질 수 있는 메모리에 한..

[리버스_0x0b] 스택 구조 및 특성

작성자: JohnG 편집자: 엔시스 출 처: 보안인닷컴 팀 블로그[http://boanin.tistory.com] 요즘 회사일때문에 포스팅 해야지 해야지 한다면서 이제야 시간내서 글올리네요 많이 부족하지만 공부하면서 정리한내용 올립니다. 1. 프로그램 실행시 메모리의 구조 일반적인 스택의 구조는 다음과 같습니다. /--------------------/ ← 메모리의 높은 숫자의 주소 | | | Stack | | | /------------------/ | | | Heap | | | /--------------------/ | | | Data | | | /--------------------/ | | | Text | | | /--------------------/ ← 메모리의 낮은 숫자의 주소 Heap영역..

[리버스_0x0a] 악성코드 분석

작성자: JohnG 편집자: 엔시스 출 처: 보안인닷컴 팀 블로그[http://boanin.tistory.com] JohnG 입니다. 먼저 이번 블로그의 악성코드 샘플은 지난 5월 13~14일 2009 KISA 해킹방어대회 및 컨퍼런스때 "나도 정보보호 분석가"라는 이벤트로 사용되어진 문제입니다. 환경 : Windows XP (32bit) VMware 가상 컴퓨터 분석 대상: Backdoor/W32.Prorat.525824 (nProtect) Backdoor.Prorat.19.AC (BitDefender) Backdoor.Win32.Prorat.19ac (Kaspersky) BackDoor.ProRat.32 (바이러스 체이서) 사용 툴: ProcessExplorerNt IceSword122en Filem..