본문 바로가기

분류 전체보기142

[DreamHack] SystemHacking Stage2 - x86 Assembly: Essential Part 2 Lecture x86-64 어셈블리 명령어 Pt.2 Opcode: 스택 - x64 아키텍처에서는 다음의 명령어로 스택을 조작할 수 있다. push val: val을 스택 최상단에 쌓음 연산 rsp -= 8 [rsp] = val - 예제) [Register] rsp = 0x7fffffffc400 [Stack] 0x7fffffffc400 | 0x0 2022. 12. 20.
[DreamHack] SystemHacking Stage2 - x86 Assembly: Essential Part 1 Lecture 해커의 언어: 어셈블리 - 컴퓨터 속에는 복잡하고 논리적인 인과관계가 존재하고, 여러 개체가 상호작용한다. - 그 속에서 통용되는 기계어(Machine Code)라는 언어가 있다. - 해커는 컴퓨터의 언어로 작성된 소프트웨어에서 취약점을 발견해야 하기 때문에 컴퓨터 언어에 관한 지식을 습득해야한다. - 그런데, 기계어는 0과 1로만 이루어져있어서 이해하기 어렵다. - 그래서 David Wheeler는 EDSAC를 개발하면서 어셈블리 언어(Assembly Language)와 어셈블러(Assembler)를 고안했다. - 어셈블러? 일종의 통역사이다. 어셈블리어로 코드 작성 -> 기계어로 변환 시켜준다. - 소프트웨어를 역분석 하는 사람들은 기계어를 어셈블리 언어로 번역하는 역어셈블러(Disas.. 2022. 12. 20.
[DreamHack] SystemHacking Stage2 - Quiz: Computer Architecture 문제 1. rax = 0x0123456789abcdef일 때, al의 값은? 답: 0xef 문제 2. rax = 0x0123456789abcdef일 때, ax의 값은? 답: 0xcdef 문제 3. rax = 0x0123456789abcdef일 때, ah의 값은? 답: 0xcd 문제 4. rax에서 rbx를 뺐을 때, ZF가 설정되었다. rax와 rbx의 대소를 비교하시오. 답: == 문제 5. rax = 0x0123456789abcdef일 때, eax의 값은? 답: 0x89abcdef 2022. 12. 19.
[DreamHack] SystemHacking Stage2 - Background: Computer Architecture Lecture 컴퓨터 구조(Computer Architecture) - 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고 구성하는 방법이다. - 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 기능 구조에 대한 설계 - 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고 설계하는 분야이다. - 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다. 명령어 집합구조(Instruction Set Architecture) - CPU가 처리해야하는 명령어를 설계하는 분야이다. - ARM, MIPS, AVR, Intel의 x86, x86-64등이 있다. 마이크로 아키텍처(Micr.. 2022. 12. 19.
[DreamHack] System Hacking Stage2 - Quiz: Linux Memory Layout #include int a = 0xa; const char b[] = "d_str"; int c; int foo(int arg){ int d = 0xd; return 0; } int main(){ int *e = malloc(sizeof(*e)); return 0; } 문제 1. e는 어느 세그먼트의 데이터를 가리키는가? 답: 힙 문제 2. foo가 위치하는 세그먼트는 어디인가? 답: 코드 문제 3. a가 위치하는 세그먼트는 어디인가? 답: 데이터 문제 4. b가 위치하는 세그먼트는 어디인가? 답: 읽기 전용 데이터 (rodata) 문제 5. c가 위치하는 세그먼트는 어디인가? 답: BSS 문제 6. "d_str"이 위치하는 세그먼트는 어디인가? 답: 읽기 전용 데이터 (rodata) 문제 7. d가 위.. 2022. 12. 19.
[Git] ToTalk https://github.com/cux-maks/ToTalk GitHub - cux-maks/ToTalk Contribute to cux-maks/ToTalk development by creating an account on GitHub. github.com 2022. 12. 19.
[DreamHack] System Hacking Stage2 - Background: Linux Memory Layout Lecture 세그먼트(Segment) - 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 이다. - 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트)로 나뉜다. 이렇게 나누는 이유? 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있기 때문! 권한의 종류? 읽기, 쓰기, 실행 세 가지가 존재한다. CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있다. 예를 들어.... 데이터 적재가 되는 곳에는 읽기 권한이 부여되고, 실행 대상이 아니기 때문에 실행 권한은 부여되지 않는다! 코드 세그먼트(Code Segment) - 실행 가능한 기계 코드가 위치하는 영역이다. - 다른 말로 텍스트 세그먼트(Text S.. 2022. 12. 19.
[DreamHack] System Hacking - STAGE 1 리눅스 환경 구축 1. windows powershell을 관리자 권한으로 실행 2. 다음 명령어 입력 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --set-default-version 2 3. Microsoft store에서 Ubuntu 18.04를 설치한다. 4. echo "Hello Ubuntu!" 입력해서 Hello Ubuntu!가 출력된다면 성공! ps.만약.... 아래 이미지와 같은 오류가 뜬다면? https://learn.mi.. 2022. 12. 19.
[BaekJoon] 3711번 학번 (Silver 5) - Python 문제 Z 대학교 학생은 입학할 때 학번을 받게 된다. 학번은 0보다 크거나 같고, 10^6 - 1 보다 작거나 같은 정수이다. Z 대학의 김상근 교수는 학번으로 학생들을 구분한다. 상근이는 학생들을 조금 더 쉽게 기억하기 위해서 자신이 가르치는 학생들의 학번을 m으로 나누었을 때, 나머지가 모두 다른 가장 작은 양의 정수를 찾으려고 한다. 입출력 예시 입력: 첫째 줄에 테스트 케이스의 개수 N이 주어진다. 각 테스트 케이스의 첫째 줄에는 상근이가 가르치는 학생의 수 G가(1 ≤ G ≤ 300) 주어진다. 다음 G개 줄에는 학생의 학번이 한 줄에 하나씩 주어진다. 학번이 같은 경우는 없다. 출력: 각 테스트 케이스마다, 학번을 m으로 나눈 나머지가 모두 다른 가장 작은 정수 m을 출력한다. 예제입력1) 2.. 2022. 12. 19.
[BaekJoon] 11726번 2×n 타일링 (Silver 3) - Python 문제 2xn크기의 직사각형을 1x2, 2x1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2x5 크기의 작사각형을 채운 한 가지 방법의 예이다. 입출력 예시 입력: 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력: 첫째 줄에 2xn 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 코드 a = int(input()) # 입력 받는다 result = [0 for _ in range(0, 1001)] # 1000의 길이를 갖는 리스트를 미리 선언한다. result[1] = 1 # n = 1일때의 경우의수는 1 result[2] = 2 # n = 2일때의 경우의수는 2 for i in range(3, 1001): # n = 3부터 n = 1000.. 2022. 12. 18.
[BaekJoon] 9095번 1, 2, 3 더하기 (Silver 3) - Python 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의수를 구하는 프로그램을 작성하시오. 입출력 예시 입력: 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력: 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력1) 3 4 7 10 예제 출력1) 7 44 274 코드 # dp함수 작성 def dp(n: int) -> int: if n == 1: return 1.. 2022. 12. 17.
[프로젝트] 스크립트프로그래밍 텀프 Grid World Game - python 간단 설명 (?) 코드 정리를 안해서 좀 지저분하긴 한데 일단 돌아가니까 ㅋㅋㅋㅋㅋ Grid World Game입니다 vscode에서만 돌아가구요 파이참, 코랩, 주피터노트북, 파이썬 기본 idle 불가능합니다.... # 개발환경 # Python 3.11.0 (main, Oct 24 2022, 18:26:48) # vscode 1.73.1 (user setup) # windows 11 Home 64bit # 조병하 2021136124 import msvcrt import random import time import copy import os grid = list() # 맵 size_list = ["작음", "중간", "큼", "짱큼"] map_size = {"작음" : 4, "중간" : 5, "큼" :.. 2022. 12. 9.
728x90