| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- fork-bomb
- Reversing
- htmlinjection
- Linux
- 와이어샤크
- System
- c
- python
- acc
- 유석종교수님
- mount
- docker
- wireshark
- Reflected
- basicrce3
- 백준
- cgroup
- Systemhacking
- bWAPP
- datastructure
- 자료구조
- pwnable
- AWS
- SISS
- beebox
- CodeEngn
- backjoon
- EC2
- Dreamhack
- cloud
- Today
- Total
목록2022/05/08 (8)
Ctrl + Shift + ESC
문제 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자! 입력 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다. 정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할..
문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼..
문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2..
문제 해당 포트에 접속한 다음에 그 안에 있는 파일을 바탕으로 flag를 구하면 되는 문제이다. 접속했다. col, col.c, flag 파일이 존재한다. flag 파일을 읽으려고 하니 권한이 없다고 퇴짜맞았다. col.c 파일을 읽어보았다. unsigned long hashcode = 0x21DD09EC; if(strlen(argv[1]) != 20){ printf("passcode length should be 20 bytes\n"); return 0; } if(hashcode == check_password( argv[1] )){ system("/bin/cat flag"); return 0; } argv[1]은 20bytes의 값을 가져야 한다. hashcode가 check_password를 통해 ..
문제 주어진 bof.c 파일이다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } 취약점 분석 if(key == 0xcafebabe){ system("/bin/sh"); } func() 함수에서 key 값이 0xcafebabe이면 쉘을 출력한다. func(0xdeadbeef); main에서 실..
example0.asm 필요한 추가 정보 .file "example1.c" # 디버거에서 사용하는 원본 파일 이름을 가리킴 (Intel 문법이 아니기 때문에 오른쪽 값을 왼쪽으로 넣음!!) .section .rodata # ./rodatd 섹션 정의, 이 섹션은 읽기 전용 데이터 변수 .text # text section. 코드들을장한 섹션/프로그램 코드 실행할 때 사용 .globl main # 전 코드에 걸쳐 접근 가능한 함수 .type main, @function # main 함수 정의. 이것을 해야만 global main 코드 얻을 수 있음 main: # main:~ret까지가 실제 코드 .LFB0: # 함수의 시작을 의미하는 'local label' .cfi_startproc # 'call fro..
mov edx, DWORD PTR [rbp-0xc] mov rsi,QWORD PTR [rbp-0x8] mov rdi, 0x1 mov rax, 0x1 Opcode: 스택 스택 : 함수별로 자신의 지역변수 또는 연산과정에서 부차적으로 생겨나는 임시 값들을 저장하는 영역 push val : val을 스택 최상단에 쌓음 rsp -= 8 [rsp] = val pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 rsp += 8 reg = [rsp-8] Opcode: 프로시저 프로시저(Procedure) : 특정 기능을 수행하는 코드 조각 프로시저 사용 : 반복 연산 대체 → 전체 코드의 크기↓ , 기능별로 코드 조각에 이름 → 가독성 ↑ 호출(Call) : 프로시저를 부르는 행위 반환(Return) : ..
x64 어셈블리 언어 어셈블리 언어 : 컴퓨터의 기계어와 치환되는 언어 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성 명령 코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add, sub 논리 연산(Logical) and, or, xor, not 비교(Comparison) cmp, test 분기(Branch) jmp, je, jg 스택(Stack) push, pop 프로시져(Procedure) call, ret, leave 시스템 콜(System call) syscall 피연산자 상수(Immediate Value), 레지스터(Register), 메모리(Memory)가 올 ..
