[Assembly] 산술 연산
·
CS/Computer Architecture
incincoperand1inc eaxeax에 +1을 해주는 코드(eax++)operand1 +1operand1 : 레지스터 or 메모리CF를 설정하지 않음 Exampleinc al : al에 1을 더한 후 다시 al에 저장함 * al에 0xff가 저장되어있다고 가정inc al : al에 1을 더한 후, 다시 al에 저장하면 al에는 0이 저장되고, 자리 올림이 발생했지만 CF가 설정되지 않음> CF와 OF의 차이를 이해하면 OF도 설정되지 않는다는 것을 알 수 있다 (부호 반전이 없기 때문에)  decdecoperand1deceaxeax에 -1을 해주는 코드 (eax--)operand1 -1operand1 : 레지스터 or 메모리CF를 설정하지 않음 Exampledec al : al에 1을 뺀 후 다시..
Internet | 인터넷
·
CS/Computer Network
The internet allows distributed applications running on it's end system to exchange data어플리케이션이 종단 시스템에서 데이터를 교환하게 해주는 것 인터넷은 전 세계적으로 수많은 컴퓨팅 장치들을 연결해주는 네트워크이다. end system (종단 시스템) / host (호스트)클라이언트 / 서버컴퓨터 네트워크에 연결된 장치 Service인터넷은 두 가지 서비스를 제공한다A connection-oriented reliable service : 연결 지향형 서비스A connectionless unreliable service : 비연결형 서비스 Connection-oriented reliable service | 연결 지향형 서비스The c..
[Assembly] 데이터 이동
·
CS/Computer Architecture
movmovoperand 1operand 2moveax1eax 레지스터에 값 1을 넣는 코드operand2를 operand1로 이동한다operand1 : 레지스터 or 메모리 (상수는 불가능함)operand2 : 상수 or 레지스터 or 메모리두 피연산자의 크기가 일치해야함두 피연산자에 동시에 메모리가 올 수 없음메모리는 TYPE PTR [레지스터 or 상수]로 표기하는데, TYPE에는 BYTE(1), WORD(2), DWORD(4) QWORD(8)이 올 수 있다. *mov는 "값"과 연관이 있다고 생각하면 쉬워짐 Example mov rax, 0x1 : rax 레지스터에 0x1을 대입한다mov rax, rbx : rbx 레지스터의 값을 레지스터에 대입한다mov QWORD PTR [0x400000], r..
[Exploit] Return Oriented Programming (ROP chain)
·
Hacking/Pwnable
Return Gadgetret로 끝나는 어셈블리 조각원하는 명령어 + ret으로 이루어진 가젯들이다가젯(gadgets) : 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어  ROP chain리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는데, 이를 통해 ret2libc, ret2dl-reslove, GOT overwiret 등 payload를 구성할 수 있다.원하는 가젯들을 조합하여 원하는 흐름으로 이어지게 하기 때문에, 한번에 실행 흐름을 제어할 수 없을 때 주로 사용한다.따라서 보통은 ret2libc 등과 조합하여, NX를 bypass 하기 위해 많이 사용된다 * 보통은 pie가 걸려있지 않아야 주소가 code, data segment의 주소가 변경되지 않기에 해당 보호기법이 없어야 사용하기..
[Pwnable] Return to Library
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/353 Return to LibraryDescription Exploit Tech: Return to Library에서 실습하는 문제입니다.dreamhack.io Environment Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)NX enabled : stack, heap 등에 실행 권한이 없음 ASLR 적용됨PIE 없음 Code Analysis// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-..
Network Layer | 네트워크 계층구조
·
CS/Computer Network
계층구조크고 복잡한 시스템의 잘 정의된 특정 부분을 논의할 수 있도록 해준다 (단순화 해줌)한 계층의 구현이 변화하더라도, 시스템의 나머지 부분은 변화하지 않는다.네트워크 계층 구조를 나타내는 방법에는 크게 두 가지가 있는데OSI 7계층TCP/IP 5계층이 있다. 구조적 차이는 OSI 7계층의 5,6,7 계층이 합쳐져 TCP/IP 5계층의 5계층이 된 것이다.  계층 구조의 각 계층은 그 계층에서 어떤 동작을 취하고그 계층 바로 아래 계층 서비스를 사용함으로써 서비스를 제공한다. Service Model한 계층은 상위 계층에게 제공하는 서비스(Service)에 관심을 가짐각 계층은 그 계층에서 어떤 행위를 하며, 아래 계층의 Service를 사용함각 계층은 독립적이지만, 서로 영향을 주고 받음 TCP/I..
Wireshark 캡처하기 (BIOCPROMISC: Operation not supported on socket)
·
CS/Computer Network
오류Wireshark를 이용하여 Ethernet 등을 캡처하고자 하면 이런 경고문이 뜬다BIOCPROMISC: Operation not supported on socket이다이 뜻은 프로미스큐어스 모드'(Promiscuous Mode)로 전환하려 할 때 발생하는 문제이다. 프로미스큐어스 모드란, 내 MAC주소가 아닌 곳으로 들어오는 패킷까지 전부 패킷 필터링을 하지 않도록 해주는 모드이다설정해두면 위험하니 꺼두도록 하자 ^_^ 해결Wireshark의 상단에서 Capture > Options를 선택하면이러한 창이 뜬다.  여기에서 Enable promiscuous mod on all interface라고 체크 되어있는 부분을 해제해준 후, Start하면 정상적으로 패킷캡처가 이루어질 수 있다.
Quick Sort
·
CS/Data Structure
Quick Sort Definition int qsort(int a[], int n){ int d; int p = a[0]; //Rearrange a[] so that // a[d] == p // a[0], a[1], ..., a[d-1] p qsort(a,d); qsort(a+d+1, n-d-1); return ;}a[0]에 있던 값이 p이고, p가 d에 가도록 rearrange한다.* rearrange란 ? 값이 없어지지 않고 그대로 유지되지만 위치만 바뀐다a[0]부터, a[d-1]까지 있는 얘들은 모두 p보다 작음a[d+1]부터, a[n-1]까지는 모두 p보다 큼> O(n) 시간 안에 해결함 Q) 어떻게 O(n)시간에 해결하는가?A)1. p보다 큰건 +라..
[Exploit] Return to Library
·
Hacking/Pwnable
Library자주 사용하는 소스코드를 미리 작성하여 프로그래머가 원할 때 빠르게 사용할 수 있게 가공된 형태컴파일 시간 단축소스 코드를 쉽게 사용 가능소스 코드의 일부를 보호 및 비공개 가능PLT & GOTPLT (procedure linkage table) : 외부 라이브러리에서 함수가 plt에 매핑되어 있다.GOT (golbal offset table) : 함수의 주소를 담고 있는 테이블로 plt가 got를 참조한다.PLT와 GOT에 대한 자세한 설명 : https://m-in-zu.tistory.com/77 Static Link vs Dynamic LinkCompile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로..
Static Link vs Dynamic Link
·
CS/Computer Architecture
Compile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로 변환하는 작업이다. (기계어)Pre-Processing : 전처리기 (Pre-processor)을 통해 소스 파일을 수정된 소스 파일 (전처리된 소스 파일)로 변환Compilation : 컴파일러 (Compiler)을 통해 수정된 소스 파일을 어셈블리 파일로 변환Assembly : 어셈블러 (Assembler)을 통해 어셈블리어 파일을 오브젝트 파일로 변환 - 오브젝트 파일부터 바이너리 형태Linking : 링커 (Linker)을 통해 오브젝트 파일들과 라이브러리, 헤더 파일들을 하나로 묶어 실행 파일로 변환이때 Linking 과정에서 Static Linkin..