본문 바로가기

바이너리

라이브러리(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 : 정적 라이브러리 개념 : 헤더파.. 더보기
프로세스간 통신(IPC) - 파이프(Pipe) 이름없는 파이프(Anonymous Pipe) : 단방향 통신방식이며, 파이프를 통해서 생성된 핸들을 기반으로 통신하기에 프로세스들 사이에 관계가 있어야 한다. BOOL CreatePipe( PHANDLE hReadPipe, // 데이터를 읽기 위한 파이프 끝 핸들 PHANDLE hWritePipe, // 데이터를 쓰기 위한 파이프 끝 핸들 LPSECURITY_ATTRIBUTES lpPipeAttributtes, // 보안 정보 DWORD nSize // 파이프의 버퍼 사이즈 ); (참고 : 파이프는 두 개의 끝을 가지고 있다. 한쪽 끝에는 데이터가 들어가고 다른 한쪽에서는 들어간 데이터가 흘러 나온다) 이름있는 파이프(Named Pipe) : 주소 정보가 있어 관게없는 프로세스들 사이에서도 통신이 가능하.. 더보기
어셈블리 디자인을 통한 컴퓨터 구조의 접근 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개 일때 명령어 내부에 레지스터를 표현해야할 비트수가 달라진다) 따라서 어셈블리 언어로 구현된 .. 더보기
시스템 프로그래밍(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.. 더보기
헥스에디터(Hex-Editors) 헥스에디터(Hex-editors) : 바이너리 파일을 분석하거나 수정할 때 사용한다. 파일을 16진수 코드로 보여준다. (참고 : 16진수 코드나 어셈코드나 같은겁니다. 어셈코드는 16진수 코드를 우리가 보기 쉽게 문자로 치환했을 뿐입니다. 예를 들어 16진수로 0x6A 라는 숫자가 어떤 일을 한다고 했을때 이 숫자만 보고 그 일을 한다는 것을 사람이 알기에 쉽지 않으므로 여기에 PUSH 라는 이름을 붙여 사람이 해석하기 쉽게 해주는겁니다. 즉 16진수 코드랑 어셈코드는 같은 것을 표현하는데 숫자냐, 문자냐일 뿐인것이죠) .exe나 .dll 같은 윈도우 PE 구조의 파일이나 확장자가 없거나 다른 확장자의 파일을 분석할때 헥스에디터로 열어서 그 바이너리 파일의 헤더를 보고 어떤 종류의 파일인지 (참고 : .. 더보기
바이너리 분석 바이너리 분석(Binary Analysis) 툴은 어떤 패커를 이용해서 바이너리를 패킹했는지, 어떤 언어로 제작된 프로그램인지를 알아 낼 때 사용된다. PEID : 파일을 열어도 되고 드래그 앤 드롭을 하여 파일을 넣을 수도 있다. 또한 Multi Scan 기능으로 여러개의 파일을 분석할 수 있다. 플러그인에는 unpack을 해주거나 문자열을 추출해주는 것들이 있다. 리소스 해커 : 리소스를 분석해야 하느 경우, 프로그램 내부에서 사용되는 문자열이나 아이콘, 이미지, 폼 구조에 대해서 분석할 때 사용된다. 사용전에 PEID 같은 툴로 패킹이 되어있는지 확인을 먼저 해야한다. 패킹이 되어 있으면 이런 경고가 뜬다. 프로그램에서 사용되는 아이콘이나 bitmap들을 추출해서 저장할 수 있고, 프로그램에서 사용.. 더보기
올리디버거(OllyDBG)를 이용한 KeyFile 체크 문제 풀이와 바이너리 수정 KeyFile : 인증을 위해서 시리얼키를 원하는 것과 비슷하게 키값을 파일에 저장하거나 어떤 파일 이름이 같은 위치에 있는 것을 확인하는 인증을 할 때 사용되는 파일을 의미한다. 파일과 관련된 문제에서는 파일이나 레지스트리 사용하는 것을 확인하기 위해서 모니터링툴을 사용하는데, Filemon을 주로 사용할 것이다. (Filemon 사용법 참고 : http://dakuo.tistory.com/22) CrackMe 15 문제를 풀어보도록 하겠다. 다운로드 하여 Project1.exe을 실행해보면 올리디버거로 열어서 스트링에 참고할 만한 내용이 있는지 찾아본다. 스트링 추출을 하고 살펴보면 solved라는 문자열을 보인다. 이상한 점은 File Monitor라고 해서 Sysinternals 홈페이지 표시되어.. 더보기