일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 두근두근 자료구조
- LoB
- War Game
- 백준
- 자료구조
- 재귀
- ftz
- 미로 탐색 알고리즘
- windosws wbcs
- OSI
- c언어
- System
- windosw 문자열
- 파이썬
- 파일 시스템
- Stack
- Java
- PHP
- 스택
- 암호수학
- level13
- 큐
- SWiFT
- 시간복잡도
- ftz level13
- C
- 정렬 알고리즘
- HTML
- pwnable.kr
- web
- Today
- Total
목록System (4)
나의 기록, 현진록
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.kr collision hashcode 와 check_pass의 리턴 값이 같아야 한다. check_pass 함수는 문자열을 인자로 받아 정수형으로 캐스팅 후 4바이트씩 5번 더한 값을 res에 저장 후 리턴한다. 21DD09EC / 5 = 6C5CEC8 6C5CEC8 * 5 = 21DD09E8 21DD09EC와 21DD09E8는 서로 다르다. 4byte가 작기 때문에 6C5CEC8을 4번 더한 후 6C5CECC를 더해주면 된다.