CrackMe3 문제 첫 화면 프로그램 설명: 프로그램을 실행한 후 아래 ASCII에 보이는 infinity를 입력창에 입력하면 maxmin이 출력되고, infinity와 다른 값이 입력될 시 Worong word!!!가 출력된다. # 시도1. maxmin ASCII CODE를 수정해 infinity 입력시 다른 값 출력 maxmin의 바이너리 값을 수정하는 창으로 이동했다. hello!로 변경해주었다. 그 다음 f9로 실행을 해준 후 infinity를 입력해주었다. 그 다음 OK버튼을 클릭하면 다음과 같은 화면이 된다. 다시 OK를 누르면 infinity가 아니므로 Wrong word!!!를 출력한다. 참고로 maxmin을 수정할 때 글자수를 맞춰야 제대로 실행될 수 있었다. # 시도2. infinit..
버퍼 오버플로우란? 버퍼 오버플로우(Boffer Overflow)란 메모리를 다루는 데 오류가 발생해 잘못된 동작을 하는 프로그램 취약점입니다. 프로그램이 할당된 고정 길이(Fixed-length) 메모리 버퍼의 한계를 제대로 확인하지 않고 보유할 수 있는 것 보다 더 많은 데이터를 쓰는 경우 발생합니다. 이로 인해 인접 메모리 공간으로 넘지는 (Overflow)가 일어나 그 곳의 정보를 덮어쓰게 되고, 충돌이나 악용 가능한 상태를 유발합니다. 임의로 악성코드를 실행하는 가장 오래되고 흔한 공격 방법 중 하나입니다. 비교적 자유도가 높고, 프로그래머이 책임이 큰 C/C++ 언어는 다른 언어보다 이런한 오류가 발생할 가능성이 높습니다. 버퍼 오버플로우 공격(Buffer Overflow Attack)이란 길..
# 1초 풀이법 먼저 파일을 실행해 준다. 여기서 전체 실행을 하면 텍스트를 입력할 수 있는 창이 나타난다. ctrl+F2로 창 전체를 초기화 한 후 Hax dump와 ASCII를 확인해보자. 그 후에 ASCII 코드를 확인한다. HackFun이라는 이름의 Exit파일을 확인했다. 이 HackFun이라는 값을 처음에 실행했을 때 나온 입력창에 넣어준다. 그러면 다음과 같은 결과를 얻을 수 있다. 최종적으로 SEP라는 값이 나왔다. # dll 파일 확인하는 방법 올리디버거에서 dll 파일을 여는 방법을 알아보자. 1. 올리디버거 화면에서 단축키 [ Alt ] + [ o ]를 누른다. 2. Events에서 Break on new module (DLL)을 클릭 후, OK 버튼을 누른다. 3. dll 파일 확인..
CrackMe1 파일을 실행했다. 파일 실행 시 CD-Rom을 만들으라는 메시지와 CD-ROM Drive가 아니라는 두 개의 메시지 창이 뜻 것을 확인할 수 있었다. Ollydbg를 이용해 프로그램을 띄운 화면이다. 위 프로그램을 이용해서 OK 메시지를 띄워야 한다. 나는 push 값을 수정해 Drive를 인식시켰다. F8을 누르면 한 칸씩 실행되고, F7 단축키를 누르면 함수 내부까지 확인해볼 수 있다. F8 단축키를 이용해 실행하다가 아래 Title과 Text의 성공 메시지 주소를 띄울 수 있겠다고 생각해 두 가지 메시지의 주소를 아래 주소로 변경했다. 이제 이 수정된 파일을 저장해주겠다. 저장 방법은 ollydbg를 실행한 후 메모리 주소가 있는 공간에서 마우스 우클릭 -> Copy to execu..
X86 Architecture x64 아키텍처는 인텔 64비트 CPU 아키텍처입니다. 흔히 컴퓨터를 16bit 컴퓨터, 32bit 컴퓨터, 64bit 컴퓨터라고 부릅니다. 이것 전체를 다시말해 N비트 아키텍처로 부르겠습니다. 여기서 64, 32 같은 것들은 CPU가 한 번에 처리할 수 있는 데이터의 크기를 말합니다. 이를 컴퓨터가 이해할 수 있는 데이터의 단위라는 의미에서 WORD(워드)라고 부릅니다. WORD가 크면 어떤 점이 유리할까요? WORD가 크면 사용할 수 있는 가상메모리의 크기가 커지기 때문에 최근에는 64bit 컴퓨터를 주로 사용합니다. 32비트 아키텍처에서는 4기가 바이트가 최대로 가능한 가상메로리의 크기로 많은 메모리 자원을 소모하는 전문 소프트웨어나 고사양 게임 등을 할 때 부족할 수..
자유 소프트웨어 재단 리처드 스톨만이 자유 소프트웨어의 생산과 보급을 장려하기 위해 창립한 재단 자유 소프트웨어 목적에 상관없이 프로그램을 실행시킬 수 있는 자유 필요에 따라서 프로그램을 개작할 수 있는 자유(이러한 자유가 실제로 보장되기 위해서는 소스 코드를 이용할 수 있어야만 한다. 왜냐하면 소스 코드 없이 프로그램을 개작한다는 것은 매우 어려운 일이기 때문이다.) 무료 또는 유료로 프로그램을 재배포할 수 있는 자유 개작된 프로그램의 이익을 공동체 전체가 얻을 수 있도록 이를 배포할 수 있는 자유 // free의 뜻은 무료가 아닌 자유를 뜻함 GNU(GNU is Not Unix) Project GNU는 운영 체제의 하나이자 컴퓨터 소프트웨어의 모음집 GNU는 온전히 자유 소프트웨어로 이루어졌으며, 그..
DLL이란? DLL은 Dynamic Link Libray의 약자로 동적 링크 라이브러리라고 불립니다. 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함하는 라이브러리입니다. DLL을 사용하면 프로그램을 여러 개별 구성 요소로 모듈화할 수 있습니다. 또한 프로그램의 다른 부분에 영향을 주지 않고 각 모듈의 업데이트를 손쉽게 할 수 있습니다. DLL의 이점 더 적은 리소스 사용 여러 프로그램이 같은 함수 라이브러리를 사용하는 경우에 DLL을 사용하면 실제 메모리에서 로드되는 중복 코드를 줄일 수 있어 Windows 운영체제의 다른 프로그램의 성능이 크게 향상될 수 있습니다. 모듈식 아키텍처 활용 DLL을 사용하면 모듈식 프로그램을 효율적으로 개발할 수 있습니다. 여러 언어 버전이 필요한 큰 프로..
어셈플리 헨드레이란? 어셈블리 핸드레이는 어셈블리어를 C언어로 복원하는 작업을 의미합니다. 때문에 어셈블리어와 함수의 프롤로그, 에필로그를 미리 알고 있어야 합니다. 어셈블리어 2023.03.13 - [Security/System] - [003] x86 아키텍처의 어셈블리어 명령어 [003] x86 아키텍처의 어셈블리어 명령어 어셈블리어란 무엇일까요? 먼저 고급 언어와 저급 언어부터 짚고 넘어가겠습니다. 고급 언어는 간단히 말해 인간이 이해하기 쉬운 언어입니다. Python, C, C++, JAVA, Javascript 등이 있습니다. 일반적 movefun-tech.tistory.com 함수의 플롤로그와 에필로그 2023.03.13 - [Security/System] - [005] 함수의 프롤로그(pro..
개념 프롤로그(Prologue)와 에필로그(Epilogue)는 무엇일까요. 프롤로그는 보통 문학 작품에서 본편을 시작하기 전에 먼저 읽도록 하는 파트입니다. 에필로그는 작품의 줄거리가 끝난 후 보충된 부분을 말합니다. 함수의 프롤로그(function prologue)와 에필로그(function epilogue)도 마찬가지입니다. 함수의 프롤로그는 함수 시작 부분의 몇 줄의 코드입니다. 스택과 레지스터를 함수 내에서 사용할 수 있습니다. 함수의 에필로그는 함수의 끝에 나타나며, 스택과 레지스터를 함수가 호출되기 전의 상태로 복원합니다.이는 어셈블리 언어 자체의 일부가 아닌 사용하는 규칙을 나타냅니다. 컴파일 결과 확인 아래 C언어 예제를 바탕으로 x86-64 gcc 4.5.3 컴파일러로 컴파일해보겠습니다...