일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 암호수학
- System
- PHP
- c언어
- 파이썬
- Java
- 재귀
- War Game
- LoB
- 파일 시스템
- pwnable.kr
- HTML
- 정렬 알고리즘
- ftz level13
- 자료구조
- 미로 탐색 알고리즘
- windosw 문자열
- 큐
- web
- 스택
- SWiFT
- windosws wbcs
- 두근두근 자료구조
- OSI
- C
- ftz
- Stack
- level13
- 백준
- 시간복잡도
- Today
- Total
목록pwnable.kr (5)
나의 기록, 현진록
pwnable.kr random rand() 함수는 항상 고정된 값이다. rand() 함수 실행 시 rax 레지스터를 확인한다. rax 값은 0x6b8b4567 0xdeadbeef와 xor 연산 b526fb88를 10진수로 바꾸어 입력한다.
pwnable.krpasscode main 함수에서는 welcome()login()순으로 함수를 호출한다. welcome() char[100]의 name 배열에 %100s 때문에 100칸만 입력 받을 수 있다. -0x70이 name 주소이다. login()에서 scanf()를 보자. scanf("%d", passcode); &passcode가 아니다. 즉 passcode의 값인 주소에 입력 받는 것이다. -0x10가 passcode1 주소이다. name부터 passcode1 까지의 거리는 0x60이고, 10진수로는 96이다. name에 100칸을 입력 받을 수 있고 100-96인 4byte를 덮을 수 있다. 4byte는 주소를 입력하기 좋은 크기이다. 아마도 주소 입력을 요구하는 것 같다. 마침 logi..
pwnable.krbof func 함수 실행 deadbeef 인자로 인해 key가 초기화되어 있다. overflowme 배열에 gets 입력 key == cafebabe 와 같으면 /bin/sh 실행 func+40 : ebp+8과 cafebabe를 비교한다. func+29 : 현재 ebp는 ebp-2c ebp-2c에서 ebp+8까지의 거리는 52 52바이트부터 cafebabe를 입력한다.
pwnable.krfd .a를 인자로 하여 실행 했더니 리눅스 파일 입출력에 대해 공부하라고 반응하였다. 코드 분석 atoi 함수는 문자열을 정수로 변환하는 함수이다. 아스키코드 값을 이용한다. fd에는 인자로 받은 문자열을 정수로 바꾸어 0x1234 만큼 뺀으로 초기화된다. 0x1234는 16진수로서 10진수로 바꾸면 4660이다. 다음은 read 함수이다. read(int fd, void *buf, size) fd는 파일 디스크립터 *buf는 read할 버퍼이다. size는 얼마만큼 읽은 것인지에 대한 크기이다. fd 파일 디스크립터란 파일을 관리하기 위해 운영체제가 요구하는 정보이다. 리눅스의 경우 파일 디스크립터는 다음과 같다. 0인 경우 : 표준 입력1인 경우 표준 출력2인 경우 표준 에러 이와..