본문 바로가기

바이너리7

라이브러리(Library) 라이브러리(Library) : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일을 의미한다. (참고 : 즉, 함수와 데이터들의 정의가 컴파일된 바이너리 코드로 라이브러리에 존재한다) (ex. C Run - Time Library Characteristics Libcmt.lib Multithreaded, static link Libcmtd.lib Multithreaded, static link (debug) Msvcrt.lib Multithreaded, dynamic link Msvcrtd.lib Multithreaded, dynamic link (debug)---d.lib : 디버그 모드로 컴파일) Static Library : 정적 라이브러리 개념 : 헤더파.. 2010. 3. 11.
프로세스간 통신(IPC) - 파이프(Pipe) 이름없는 파이프(Anonymous Pipe) : 단방향 통신방식이며, 파이프를 통해서 생성된 핸들을 기반으로 통신하기에 프로세스들 사이에 관계가 있어야 한다. BOOL CreatePipe( PHANDLE hReadPipe, // 데이터를 읽기 위한 파이프 끝 핸들 PHANDLE hWritePipe, // 데이터를 쓰기 위한 파이프 끝 핸들 LPSECURITY_ATTRIBUTES lpPipeAttributtes, // 보안 정보 DWORD nSize // 파이프의 버퍼 사이즈 ); (참고 : 파이프는 두 개의 끝을 가지고 있다. 한쪽 끝에는 데이터가 들어가고 다른 한쪽에서는 들어간 데이터가 흘러 나온다) 이름있는 파이프(Named Pipe) : 주소 정보가 있어 관게없는 프로세스들 사이에서도 통신이 가능하.. 2010. 2. 11.
어셈블리 디자인을 통한 컴퓨터 구조의 접근 1. 레지스터 디자인 고려 사항 : 레지스터 용량 레지스터 갯수 레지스터 각각의 용도 예) 레지스터 용량 : 16비트, 레지스터 갯수 : r0 ~ r7 (8개) 레지스터 용도 : r0 ~ r3 (저장용), r4(ir : instruction register), r5(sp : stack pointer), r6(lr : link register), r7(pc : program counter) (참고 : ir 은 다음번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용된다) 2. 명령어 구조 디자인 명령어의 구조는 레지스터의 용량, 갯수, 용도에 종속적으로 구성될수 밖에 없다. (예 : 레지스터가 4개 일때와 8개 일때 명령어 내부에 레지스터를 표현해야할 비트수가 달라진다) 따라서 어셈블리 언어로 구현된 .. 2010. 2. 9.
시스템 프로그래밍(System Programming)의 시작 시스템 프로그램(System Program) : 컴퓨터 시스템을 동작시키거나 하드웨어를 사용할 수 있도록 도와주는 프로그램 1. 컴퓨터 시스템의 주요 구성요소(Main Components) 컴퓨터 구조(Computer Architecture) : CPU 캐쉬(Cache) ↕ 운영체제(Operating System) : 메인 메모리(Main Memory) 하드디스크(Hard Disk) 2. 컴퓨터 구조 : 1) CPU : 중앙처리장치(Central Processing Unit) ALU(Arithmetic Logic Unit) : CPU 내부에 실제 연산을 담당하는 부분. 산술연산(+, -)과 논리연산(AND, OR)을 수행 컨트롤 유닛(Control Unit) : CPU 내부로 들어온 명령어를 해석해서 A.. 2010. 2. 8.
헥스에디터(Hex-Editors) 헥스에디터(Hex-editors) : 바이너리 파일을 분석하거나 수정할 때 사용한다. 파일을 16진수 코드로 보여준다. (참고 : 16진수 코드나 어셈코드나 같은겁니다. 어셈코드는 16진수 코드를 우리가 보기 쉽게 문자로 치환했을 뿐입니다. 예를 들어 16진수로 0x6A 라는 숫자가 어떤 일을 한다고 했을때 이 숫자만 보고 그 일을 한다는 것을 사람이 알기에 쉽지 않으므로 여기에 PUSH 라는 이름을 붙여 사람이 해석하기 쉽게 해주는겁니다. 즉 16진수 코드랑 어셈코드는 같은 것을 표현하는데 숫자냐, 문자냐일 뿐인것이죠) .exe나 .dll 같은 윈도우 PE 구조의 파일이나 확장자가 없거나 다른 확장자의 파일을 분석할때 헥스에디터로 열어서 그 바이너리 파일의 헤더를 보고 어떤 종류의 파일인지 (참고 : .. 2010. 1. 3.
바이너리 분석 바이너리 분석(Binary Analysis) 툴은 어떤 패커를 이용해서 바이너리를 패킹했는지, 어떤 언어로 제작된 프로그램인지를 알아 낼 때 사용된다. PEID : 파일을 열어도 되고 드래그 앤 드롭을 하여 파일을 넣을 수도 있다. 또한 Multi Scan 기능으로 여러개의 파일을 분석할 수 있다. 플러그인에는 unpack을 해주거나 문자열을 추출해주는 것들이 있다. 리소스 해커 : 리소스를 분석해야 하느 경우, 프로그램 내부에서 사용되는 문자열이나 아이콘, 이미지, 폼 구조에 대해서 분석할 때 사용된다. 사용전에 PEID 같은 툴로 패킹이 되어있는지 확인을 먼저 해야한다. 패킹이 되어 있으면 이런 경고가 뜬다. 프로그램에서 사용되는 아이콘이나 bitmap들을 추출해서 저장할 수 있고, 프로그램에서 사용.. 2009. 11. 7.