Dreamhack(4)
-
4일차
Instructions Instructions(1/5) - Data Movement 값을 레지스터나 메모리에 옮기는 명령어들 mov mov는 src에 들어있는 값을 dst로 옮김 lea lea는 Load Effective Address로, dst에 주소를 저장 Instructions(2/5) - Arithmetic Operations 산술 연산과 관련된 명령어들 따라서 FLAGS 레지스터의 CF, OF, ZF 등과 관련이 있다. Unary Instuctions Instuctions 설명 inc, dec dst의 값을 1 증가시키거나 감소시킴 neg dst에 들어있는 값의 부호를 바꿈(2의 보수) not dst에 들어있는 값의 비트를 반전 Binary Instuctions Instuctions 설명 add..
2021.11.24 -
3일차
Instruction Format Instuction Format 명령어를 구성하는 두 개의 큰 요소인 명령 코드(Opcode)와 피연산자(Operand)에 대해 공부하자 Opcode (Operation Code) 명령 코드(Opcode, Operation Code)는 명령어에서 어떤 동작을 할지 나타내는 부분 산술 연산, 자료 제어 등 다양한 명령어 코드가 있다. Opcode(Operation Code) 기계 코드(Machine Code) 또는 명령 코드(Opcode) 바이너리로 구성되어 있으며 CPU가 실제로 수행할 작업을 숫자로 나타냄 어셈블리 코드(Assembly Code) - 숫자로 이뤄져 있는 명령어 코드는 사람이 구분하고 이해하기 쉽지 않다. 그래서 이것이 어떤 의미를 갖는지 알아보기 쉽도록..
2021.11.23 -
2일차
Introduction 디스어셈블 과정을 통해 얻은 어셈블리 코드를 이해하기 위해 어셈블리 코드 공부 기계 코드가 실제로 동작할 CPU에 따라 기계 코드가 바뀌는데 앞서 배운 것처럼 어셈블리 코드는 기계 코드와 1:1 대응이므로 CPU의 종류에 의해서 어셈블리 코드도 달라진다. 그럼 가장 널리 쓰이는 IIntel 구조의 64bit 버전 명령어 집합(64-bit version IA32 Intruction Set, 이하 x64 )에서 쓰이는 x64 명령어 집합(x86-64 Instruction Set)에 대해 알아보자 들어가기에 앞서 InStruction Cycle CPU는 기본적으로 다음 실행할 명령어를 읽어옴(Fetch) -> 읽어온 명령어를 해석(Decode) -> -> 해석한 결과를 실행(Execut..
2021.11.22 -
1일차
Reverse Engineering 리버스 엔지니어링(Reverse Engineering)은 이미 만들어진 시스템이나 장치를 해체나 분석을 거쳐 다양한 정보를 알아내는 과정(완성품 없이 구조와 동작 과정을 알아내는 과정) [리버스 엔지니어링 = 역공학 = 리버싱]같은 뜻 리버싱은 위와 같은 일을 하기 때문에 산업의 전 분야에 걸쳐 적용될 수 있다. 허나 dreamhack에서는 소프트웨어를 대상으로만 이루어진다. 공부 갈래 소스 코드가 없는 상태에서 컴파일된 대상 소프트웨어의 구조를 여러가지 방법으로 분석, 메모리 덤프를 비롯한 바이너리 분석 결과를 토대로 동작 원리와 내부 구조 파악, 이를 바탕으로 원래의 소스가 어떻게 작성된 것인지에 대해 공부 리버싱이 필요할 때 : 대상의 동작원리와 구조를 알고싶을 ..
2021.11.21