일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 밑바닥부터시작하는딥러닝
- 인공지능
- BOJ
- 스트림암호
- FTZlevel10
- 알고리즘
- 신경망파이썬
- C알고리즘
- BOF
- C언어 알고리즘
- 달고나bof
- 머신러닝
- 딥러닝
- 8086CPU레지스터
- 파이썬신경망
- 신경망 학습
- 백준알고리즘
- 딥러닝파이썬
- 항등함수
- 정보보안
- 파이썬
- C언어알고리즘
- 보안
- 신경망
- 백준
- c언어
- 활성화함수파이썬
- 소프트맥스함수
- 버퍼오버플로우
- 신경망구현
- Today
- Total
목록분류 전체보기 (235)
HeeJ's
무언가 값을 입력해 flag를 찾아내는 문제인 것 같다. 소스코드를 살펴보자. unlock에 있는 식을 계산해보자. 복붙해서 파이썬으로 돌려주었다. 이 결과 값을 입력창에 넣고 check 버튼을 눌러주면 성공
문제에 들어가보면 이렇게 알록달록한 별이 있다. 소스코드를 확인해보자. onkeypress라는 함수를 보니 사이트에서 키보드로 입력을 해 무언가 실행되도록 하는 것 같다. funcing mv에서 cd라는 변수에 100, 97, 119, 115를 입력하면 별이 이동하는 것 같다. 그렇다면 124를 입력하면 flag를 찾을 수 있는 것 같다. 위의 값을 입력해주기 위해 아스키코드표를 보고 해당하는 값들을 찾아보았다. 100 = d 97 = a 119 = w 115 = s 124 = | (파이프) 실제로 wasd를 아무거나 연타해보았더니 별이 움직였다. 이제 | (파이프)를 입력하면 성공
처음 문제에 접근하면, 접근이 거부된다. 이 문제를 해결하기 위해 설정에 들어가 자바스크립트를 차단한다. 설정 -> 사이트설정 -> 자바스크립트 -> 해제 그리고 문제에 들어가면 아무것도 뜨지 않는다. 그 상태에서 Ctrl+u를 통해 소스코드를 확인해주고, flag를 얻기 위해 get방식으로 url 뒤에 ?getFlag라는 문자열을 붙여준다. 여기서, 문자열을 붙이기 전에 다시 자바스크립트를 허용해야한다. 문제 해결
처음에 문제에 들어가면 검은색 배경에 입력 상자와 체크 버튼이 뜬다. 소스코드를 확인해보면 현재 url에서 ".kr"의 위치에 30을 곱해진 값을 저장하고 이 ul값과 입력 값이 일치하면 문제가 해결되는 것 같다. .kr의 위치는 앞에서 18번째 위치에 있고, ul * 30 은 18 * 30이 되어서 540을 입력하면 문장이 실행된다.
현존하는 시스템들은 두 가지의 바이트 순서(byte order)를 가진다. 1.big endian방식 2. little endian방식 big endian방식 바이트 순서가 낮은 메모리 주소에서 높은 메모리 주소로 되어있다. IBM 370 컴퓨터와 RISC 기반의 컴퓨터들, 모토로라의 마이크로프로세서가 사용 little endian방식 높은 메모리 주소에서 낮은 메모리 주소로 되어있다. 일반적인 IBM 호환 시스템, 알파 칩의 시스템들에 사용 37E59A02라는 16진수 값을 저장한다면, big endian은 낮은 메모리 영역부터 값을 채워넣어 37E59A02 순서로 저장되고, little endian은 높은 메모리 영역부터 채우기 때문에 029AE537 순서로 저장하게 된다. 바이트 단위이기 때문에 한..
버퍼(buffer)? 시스템이 연산 작업을 하는데 있어 필요한 데이터를 일시적으로 저장하는데, 여기서 사용되는 그 저장공간 대부분의 프로그램에서는 버퍼를 스택에 생성한다. 스택은 함수 내에서 선언한 지역 변수가 저장되고, 함수가 끝나면 반환된다. buffer overflow는 미리 준비된 버퍼에 버퍼의 크기보다 큰 데이터가 들어갈 때 발생하게 된다. ex) 40바이트의 스택이 있다. 41~44바이트의 데이터가 들어간다면 이전 함수의 base pointer를 수정하게 될 것이다. 45~48바이트의 데이터가 들어간다면 return address가 저장되어있는 공간을 침범할 것이다. 48바이트 이상을 쓰게 된다면 return address를 포함한 그 이전 스택에 저장된 데이터마저 바뀔 것이다. 시스템에게 명..
* EIP - main() 함수의 시작점을 가리킴 * ESP - 스택의 맨 꼭대기를 가리킴 (PUSH & POP명령) * ebp (base pointer) - 저장하는 이유; 이전에 수행하던 함수의 데이터를 보존하기 위해 => 함수가 시작될 때 stack pointer와 base pointer를 새로 지정 - 함수 프롤로그 과정 1. push %ebp ebp를 스택에 저장한다. 2. mov %esp, %ebp esp 값을 ebp에 복사한다. (함수의 base pointer와 stack pointer가 같은 지점을 가리킨다) 3. sub $0x8, %esp esp에서 0x8을 뺀다. (스택을 8바이트 확장한다) 4. and $0xfffffff0, %esp esp와 11111111 11111111 11111..
레지스터? CPU가 프로세스를 실행하기 위해서 프로세스를 CPU에 적재시켜야 한다. 또, 흩어져 있는 명령어 집합과 데이터들을 적절하게 사용하기 위해서 여러 저장공간이 필요하다. cpu가 빨리 읽고 써야하는 데이터들이기 때문에 cpu 내부 메모리를 사용한다. => 레지스터(register) 1. 범용 레지스터(General-Purpose register) 2. 세그먼트 레지스터(segment register) 3. 포인트 레지스터(point register) 4. 플래그 레지스터(Program status and control register) 5. 인덱스 레지스터(Index register) 6. 인스트럭션 포인터(instruction pointer) - 범용 레지스터 논리 연산, 수리 연산에 사용되는..