2017/12(52)
-
ASLR 적용 된 바이너리 ASLR 해제하기 2~
이번문제는 1편에서 이어지게 됩니다. 궁금증이 하나 생기지 않나요? 음.. 저는 이런 궁금증이 생깁니다. 1. ASLR이 랜덤한 주소가 되게 하는 기법인데 그 주소를 고정 시켰어. 왜 고정 시킨건데? 2. 고정 안시키면 왜 안되? 내가 그냥 스택보면서 놀면 되는거 아냐? 이것에 대한 궁금증을 풀기 위해 ASLR이 적용 된 그 바이너리로 놀아보도록 하겠습니다. 다시 소스코드를 한번 살펴보죠.일단 포너블을 위한 소스코드니까요 ㅎ.ㅎ #define _CRT_SECURE_NO_WARNINGS#include #include #include #include int main(int argc, char*argv[]){char arr[10];int i = 0; printf("ASLR Test\n");printf("목표 ..
2017.12.06 -
ASLR 적용 된 바이너리 ASLR 해제하기~
오늘 진행해 볼 삽질은 ASLR이 적용된 윈도우즈 프로그램을 해제하는 방법에 대해 설명해볼까합니다. ASLR(Address SpaceLayout Randomization) Windows XP 이상부터 적용되는 기법입니다.프로그램이 로드 되는 상대주소를 랜덤으로 바꾸어서 pwn하기에 어렵게 하는 기법이라고 합니다. 작업한 환경은 Visual Studio Community 2017 버전입니다. 알고 계시면 좋은 것이 있는데 Visual Studio Community 2017버전은 기본적으로 빌드를 진행 하게 되면 임의주소로 컴파일이 되게 설정이 되어 있습니다. 그림을 보죠. "임의 기준 주소"에 예가 되어있는 것이 ASLR 입니다. 그렇다면 지금은 ASLR로 프로그램을 빌드 해야하기 때문에 그대로 설정 값을..
2017.12.06 -
GCC Asembler
코드 가상화를 진행하기 위해서는 우선 GCC Inline Assembly를 공부해야한다고 생각하고, GCC Inline Assembly를 포스팅한다. 우선 LINUX에서 GCC, 즉 GNU C 컴파일러는 AT&T/UNIX 어셈블리 문법을 사용한다. AT&T 어셈블리어는 INTEL 어셈블리어와 문법에 있어 꽤 다르다. 주요한 차이를 먼저 알아보자. 1. 출발지와 목적지가 반대로 되어 있다. EX) INTEL OPCODE dst src EX) AT&TOPCODE src, dst 2. 레지스터 표기법이 다르다. 레지스터는 %를 붙인다. EX) %EAX, %EBX 3. Operand에 $를 붙인다. 16진수를 0x로 표기한다. INTEL : int 80h AT&T : int $0x80 4. Operand의 사이..
2017.12.06 -
따라만들어보는 VCP - 상상만 하던걸 드디어..!
가상화 코드를 공부하고 싶어 둘러보다가 이 분 블로그가 좋아보여서 공부 할 겸 따라 적으면서 필요한 부분은 추가하거나 내가 이해한 대로 재해석해서 작성하였다. 출처: http://revsic.tistory.com/4 VCP는 VM과 가상화 된 명령어로 이루어져 있다. 설계를 할 때 명령어 가상화 모델 설계 + VM 모델 설계, 바이너리 설계로 나뉘어지게 된다. VM모델의 경우 세부적으로 들여다보면 VM의 실행 루틴과 에뮬레이션 과정에서 참조하는 메모리 영역의 설계로 이루어진다고 한다. [설계 시나리오] 전가상화 1. 소스를 메모리에 적재 2. 소스 해석을 전부 VM에게 인가 반가상화1. 소스를 메모리에 적재2. 소스 해석 일부분만 VM에게 인가 가상화를 이렇게 이해하면 편하다고 한다.(아는동생의 기가막힌..
2017.12.05 -
기초 공부 Code Virtualization
컴퓨터에는 가상머신이라는게 존재한다.대표적으로 자바의 경우 JVM, 안드로이드의 경우 Dalvik VM이 있다. 기계어로 이루어져 있는 cpu의 아키텍쳐는 보편적으로 i386, x86_64, ARM 등 주로 사용되는 아키텍쳐가 정해져 있다. 이러한 아키텍쳐는 기존부터 존재하기 때문에 분석하는데 쉽다고 한다.물론 아직 나에게는 이러한 아키텍쳐도 힘들다. 하지만, 이보다 더 어려운것이 잘 알려져있지 않거나 사용자가 직접 정의한 아키텍쳐에서 프로그램이 실행되게 되는 상황이다. 환경이 익숙하지 않고, 분석에 필요한 정보가 전혀 없는 상황에서는 당연히 분석하는 시간이 늘어나고, 사람이라면 분석할 의지가 떨어지게 된다. 나 역시 너무 어려워 보이는 문제는 그냥 포기해버렸었다. 하지만 이제는 포기하지 않으려고 한다...
2017.12.05 -
ELF 기초 공부중
기초 공부 중이기 때문에 다른 사람들의 블로그들을 참고하고, 이해하기 위해 적어보고 있습니다. 중간중간에 사전적 정의부분이 아닌 부분에 의해서는 직접 생각해보고 느낀것들에 대해서도 명시할 것입니다. ELF : Executable and Linkable Format ELF는 Unix, Linux 계열에서 실행 가능한 오브젝트 파일을 규정한 것이라고 한다. PE와 똑같이 실행에 필요한 기계어, 심볼 테이블, 디버그 정보, 재배치 정보등을 저장하고 있다. ELF 파일은 머리부분인 ELF Header가 가장 앞부분에 위치하게 되고, 그 다음 순서대로 Program Header Table, Section Header Table이 존재하게 된다. 이러한 헤더들의 정보를 자세히 알고 싶으면 elf.h에서 확인할 수 ..
2017.12.05