전체 글(440)
-
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 -
기초 공부중
만약, 당신이 커널 레벨에서 동작하는 코드를 작성했다면 그 코드를 이용함으로써 특별한 권한이 있어야만 접근 가능한 커널과 시스템 프로세스의 메모리에 접근할 수 있다. 또한 커널 레벨에서는 어떤 소프트웨어든 코드와 데이터 구조를 변경할 수 있다. 대부분의 모듈은 시작 루틴(엔트리 포인트)과 모든 것을 마무리하고 정리하는 루틴(클린업 루틴) - 클린업 루틴 처음 들어봄.. 예시가 책에 있으니 책을 보면서 공부를 진행해보았다. 예시 1. 리눅스 모듈 int init_module(void){} void cleanup_module(void){} 예시 2. 윈도우즈 모듈NTSTATUS DriverEntry(...){ theDriver -> DriverUnload = MyCleanupRoutine;} NTSTATUS..
2017.12.04 -
기초 공부 중
모든 컴퓨터에는 운영체제와 소프트웨어가 설치되어 있다. 하지만, 운영체제는 단순히 어플리케이션의 원활한 활동을 위해 도와주는 매개체에 불과하다. 하지만, 컴퓨터의 장치가 다르면 거기에 맞는 운영체제도 달라지게 된다. 예를들어 A학교 학생의 교복과 B학교 학생의 교복이 다른 것 처럼 말이다. 그렇다면 A학교는 A학교만의 컴퓨터 장치를 가지고 있는 것이고, B학교는 B학교만의 컴퓨터 장치를 가지고 있게 되는 것이다.A학교 학생이 A학교 교복을 입교 B학교의 구성원은 될 수가 없다. 우리 운영체제에는 윈도우즈, 리눅스, VXWorks, Symbian 등이 존재한다.VXWorks는 임베디드 디바이스에서 주로 쓰인다고 하며, Symbian은 휴대폰에서 사용한다고 한다. Symbian은 조사해보니 노키아 휴대폰에서..
2017.12.04