전체 글
-
Java카테고리 없음 2022. 12. 24. 22:11
데이터 타입 byte,short,int,long 각각 표현가능한 수의 범위가 다르고 범위가 커짐에 따라 차지하는 메모리의 크기도 다르다. 범위가 정해진 구간에서만 변수의 값이 정해진다면 메모리 낭비 하지말고 알맞은 데이터 타입을 사용하자. float,double은 엥간한거 아니면 double사용 char은 글자 한 자마다 2바이트를 사용함 상수 자바는 상수에 할당된 타입이 존재하는데 엥간한 정수에는 int형이 할당되어 있다. 하지만 int의 범위를 넘는 2147483648이상의 수를 long으로 사용할 때 long a=2147483648을 적으면 오류가 나고 long a=2147483648L으로 상수의 데이터타입을 바꾸어 주어야 한다. 실수도 마찬가지 기본값은 double이고 float을 사용할 때 숫자..
-
x86-64 아키텍처: 레지스터dream hack/system hacking 2022. 9. 25. 19:53
레지스터 레지스터는 cpu가 데이터를 빠르게 저장하고 사용할 떄 이용하는 보관소이다. 산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참조하는 등 다양한 용도로 사용됩니다. x64 아키텍쳐에는 범용레지스터(General Register), 세그먼트 레지스터(Segment Register), 명령어 포인터 레지스터(Instruction Pointer Register,IP), 플레그 레지스터(Flag register)가 존재한다. 범용 레지스터 범용레지스터는 주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터입니다. x86-64에서 각각의 범용레지스터는 8바이트를 저장할 수 있다. 자주쓰이는 레지스터들의 주용도는 아래와 같다. 이름 주용도 rax(aumulator register) 함수..
-
리눅스 메모리 구성dream hack/system hacking 2022. 9. 25. 02:26
메모리의 악의적 조작 메모리는 cpu와 밀접한 관련이 있다. 따라서 메모리를 악의적으로 조작을 하면 cpu의 비정상적인 작동을 유발할 수 있다 우리는 위와 같은 상황을 메모리가 오염됐다고 표현한다. 이를 유발하는 취약점을 메모리 오염(Memory corruption)이라고 표현하며 많은 공격기법이 메모리 오염에 기인한다. 메모리 구조 메모리 구조는 위와같은 형태로 이루어져있으며 세그먼트는 프로세스의 메모리를 5개로 나눈 것이며 읽기, 쓰기, 실행 중 각 용도에 맞는 권한이 부여되며 cpu는 부여된 권한의 행위만 실행 할 수 있다. 코드 세그먼트 실행가능한 기계코드가 위치하는 영역으로 텍스트 세그먼트라고도 불린다. 프로그램이 동작하기위해 읽기와 실행 권한이 부여되며 아래의 정수 31337을 반환하는 mai..
-
pwngdb-2dream hack/system hacking 2022. 8. 16. 16:37
context pwngdb는 각종 메모리를 한 눈에 파악할 수 있는 인터페이스를 갖추고 있다. 파란 글씨라 잘 보이지는 않지만 위부터 순서대로 registers, disasm, stack, backtrace로 구성되어 있고 register:레지스터의 상태를 보여준다. disasm:rip부터 여려 줄에 걸쳐 디스어셈블된 결과를 보여준다. stack: rsp부터 여러 줄에 걸쳐 스택의 값들을 부여준다 backtrace:현재 rip에 도달할 때까지 어떤 함수들이 중첩되어 호출됐는지 보여준다.
-
pwngdb-1dream hack/system hacking 2022. 8. 16. 16:31
실습 예제 //Name:debugee.c //Compile:gcc -o debugee debugee.c -no-pie #include int main(){ int sum = 0; int val1 =1; int val2 = 2; sum = val1 + val2; printf("1 + 2 = %d\\n", sum); return 0; } 의 간단한 파일이다. 그 뒤 gdb debugee로 디버깅을 시작한다. 시작화면은 위와 같고 start를 입력하면 아래와 같은 화면이 출력된다. 위 코드 중 0x401050 (_start)의 0x401050은 프로그램의 진입점 주소임을 알려준다. 그 근거로 아래의 코드를 첨부한다. 리눅스는 실행파일의 형식으로 ELF(Executable and linkable Format)으..
-
Tool: gdb-1dream hack/system hacking 2022. 8. 15. 21:43
리눅스는 실행파일의 형식으로 ELF를 규정하고 있다. ELF는 크게 헤더 와 여러 섹션들로 구성 되어있습니다. 헤더:실행에 필요한 여러 정보 섹션: 컴파일된 기계어코드, 프로그램 문자열을 비롯한 여러 데이터가 포함 ELF 헤더중에 진입점(Entry Point,EP)라는 필드가 있는데 운영체제는 ELF를 실행할 떄, 진입점의 값부터 프로그램을 실행함 ELF방식으로 읽기 위해서는 readelf -h 실행파일명 이다. 내가 실행한 debugee의 elf형식은 다음과 같다. ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (curren..