일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클라우드가 뭐야
- 10814
- kotlin
- Make sure the Cursor is initialized correctly before accessing data for it.
- Couldn't read row 0
- 쏘큩
- 액션바 필요없숴
- pwable.kr
- 파이썬
- Docker
- 블록체인
- 6566
- python
- 포너블
- 페니빙
- UNIQUE constraint failed
- Drive-By-Download
- 코틀린
- 나이순 정렬
- 클라우드란?
- cmd1
- tlqkf
- col -1 from CursorWindow
- 백준
- pwnable
- 애너그램 그룹
- java.lang.IllegalStateException
- cmd2
- pwnable.kr
- SQLiteConstraintException
- Today
- Total
푸르미르
pwnable.kr 8. leg 본문
leg.c 파일을 함 보자
scanf를 사용해 key 값을 입력하고, 그 key값이 key1()+key2()+key3()과 동일하면, flag 파일이 open 되는 형식이다.
뜯어서 보자.
c코드를 보았을 때, mov명령을 통해 pc값을 r3에 넣는 것을 확인 할 수 있다.
디스어셈블 코드를 보았을 때, mov를 통해 r3에 pc값을 넣은 후 r0에 r3값을 넣는 것을 확인 할 수 있다.
그렇다면 pc란 무엇일 까.
pc는 레지스터 중 하나로 다음 인출될 명령어의 주소를 갖고 있는 아이이다.
cpu는 하나의 명령을 실행할 때 다으마과 같은 과정을 거친다.
1. fetch - 메모리에서 명령어를 가져온다.
2. decode - 명령어 읽기 및 해독, 레지스터를 읽는다.
3. excute - 연산 수행, 주소 계산
2개의 opcode를 실행하면 fetch > decode > execute > fetch > decode > execute로 총 6번의 작업을
해야한다. 하지만 pipe line을 활용한다면 4번으로 줄일 수 있다.
1 | 2 | 3 | 4 |
fetch | decode | execute | |
fetch | decode | execute |
이렇게 병렬적으로 한다면 2개의 opcode를 실행할 때 6번이 아닌 4번으로 줄일 수 있게 된다.
만약 내가 지금 execute 과정 중에 있다면 fetch명령의 주소는 다다음 주소가 된다.
pc는 다다음 명령의 주소가 들어간다는 것!
현재 명령 mov r3, pc 명령의 다다음 주소인 0x00008ce4가 pc의 값이다.
key1의 결과값은 0x00008ce4
다음으로 key2를 확인해보자!
mov명령으로 pc값을 r3에 넣고 있다. 그 다음 adds r3, #4 명령을 통해 r3 값에 4를 더해주고 있다.
즉, pc 값은 0x0008d08이며, 여기에 4를 더해주면 0x00008d0c가 된다.
key2 결과값은 0x0008d0c
다음 key3를 보자.
mov명령으로 lr 값을 r3에 넣어준 뒤, r3 값을 r0에 넣어주고 있다.
lr은 함수 호출 전 다시 돌아갈 주소를 담고있다.
그렇다면 lr은 0x00008d80이다.
key3 결과값은 0x00008d80
위의 3가지 결과값들을 다 더해주면 된다.
답: 0x1a770 -> 108400
My daddy has a lot of ARMv5te muscle!
'SECURITY > pwnable' 카테고리의 다른 글
pwnable.kr 10. shellshock (0) | 2021.05.05 |
---|---|
pwnable.kr 9. mistake (0) | 2021.04.28 |
pwnable.kr 7. input (0) | 2021.04.06 |
pwnable.kr 6.random (0) | 2021.04.06 |
pwnable.kr 5.passcode (문제 파악) (0) | 2021.03.31 |