0x03 Reversing Theory(50)
-
개인공부 _ 커널 조작에 관한 기본 개념
루트킷은 유저모드(user mode)와 커널모드(kernel mode) 요소를 모두 쉽게 포함할 수 있다. 유저모드에서는 네트워킹, 원격제어와 같은 대부분의 기능을 담당하고, 커널모드에서는 은닉기능과 하드웨어 접근에 관련된 기능을 담당한다. 루트킷의 구조는 책을 참조하였다. [ A rootkit that contains both user mode and kernel mode elements ] 유저 모드 프로그램은 커널 레벨 드라이버와 다양한 방법으로 서로 통신할 수 있다. 그 중에서 가장 일반적인 방법이 I/O Control(IOCTL) 명령을 이용하는 것이다. IOCTL 명령은 유저 애플리케이션과 커널 드라이버간의 통신을 위해서 프로그래머가 정의 하는 명령이다. 유저모드와 커널모드 요소를 모두 포함하..
2017.12.13 -
개인공부
운영체제에는 2가지의 모드가 있다. 1. 사용자모드2. 커널모드 그리고 모드 비트(mode bit)라는 것이 있는데 이 비트 값에 따라 현재 운영체제의 모드를 알 수가 있다. 커널 모드일 경우는 0사용자 모드일 경우는 1이다. 이 모드 비트(mode bit)로 인해 운영체제를 위하여 실행되는 작업과 사용자를 위해 실행되는 작업을 구분할 수 있는 것이다. 운영체제는 트랩(trap)이라는게 존재한다.CPU 자기 스스로 인터럽트를 거는 행동이다. 이 행동의 예시로는 유효하지 않은 메모리에 접근(REVERSING.KR 풀 때 인라인 어셈 작성 시 올바르지 않은 주소를 참조했었던 경험이 있다), 0으로 나누기(divide by zero)등이 있다. 이러한 행동을 하면 CPU는 자기 자신을 인터럽트 시킨다. 그리고..
2017.12.11 -
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