자 pwnable.kr 사이트를 보면 코드와 어셈블리 코드를 주네요.
코드를 해석해보면 key1값 key2값 key3값을 다 더하면 key가 되고
flag를 얻을수 있습니다. 그럼 이제 어셈블리 코드를 보며key1,2,3값을 구해봅시다.
어셈블리 main문의 코드를 보면 key 1,2,3,밑에줄에는 모두 mov라는 레지스터를 이용해서
r0의 값을 옮기고 잇습니다. arm레지스터에서는 r0은 주소값을 담고 있는데
그렇다면 r0의 주소값을 구해야 합니다. 그렇다면 key 1,2,3의 주소값을 구해볼까요
우선 key1을 보면 pc의 값을 r3에 옮기고 r3의 값을 r0에 옮기고 있네요
근데 여기서 pc는 파이프라인으로 pc가 있는 값에 8만큼 뒤에 값을 가르킵니다.
그래서 key1의 값은 00008ce4가 되겠죠
//파이프라인에 대한 자세한 설명은 건듀의 블로그에 있습니다
key2는 1과 똑같지 구하면 될것 같지만 뒤에 #4가 있어서 4를 추가한 값을 구해야합니다.
그러면 00008d0c를 가르키겠죠?
마지막으로 key3는 pc가 아닌 lr을 옮기는데 lr을 구글링해보면
lr은 리턴할 주소를 담고 있는 레지스터라고 나옵니다.
그러면 key3의 리턴주소인 00008d80가 됩니다.
이 값들을 모두 더하고 10진수로 변환하면 108400라는 값이 나오고 이 값을 입력해주면
flag가 나옵니다!!
'pwnable.kr 문제풀이' 카테고리의 다른 글
pwnable.kr coin1 문제풀이 :: 건듀의 블로그 (0) | 2019.09.20 |
---|---|
pwnable.kr asm 문제풀이 :: 건듀의 블로그 (0) | 2019.09.18 |
pwnable.kr shellshock 문제풀이 :: 건듀의 블로그 (0) | 2019.09.12 |
pwnable.kr mistake 문제풀이 :: 건듀의 블로그 (0) | 2019.09.07 |
pwnable.kr bof 문제풀이 :: 건듀의 블로그 (0) | 2019.08.23 |