본문 바로가기
Wargame/pwnable.kr

pwnable.kr leg

by morae23 2019. 2. 11.

pwnable.kr leg 문제이다.



문제를 보면 파일을 두개 다운받을 수 있다.


먼저, leg.c 파일의 main()을 보면, ( key1() + key2() + key3() )의 값을 입력하면 플래그를 얻을 수 있을 것으로 보인다.




[key1]

첨부된 asm 파일에서 먼저 key1 부분은 아래와 같다.



필요한 값은 key1()의 리턴 값이기 때문에, r0에 담기는 값을 보면 된다.


mov r3, pc

mov r0, r3

이기 때문에 mov r3, pc에서 pc 값을 알아오면 된다.


이 때, pipeline(fetch, decode, execute) 으로 인해 0x00008cdc 가 fetch 될 때의 pc는 0x00008ce4 이다.



[key2]



key2에서도 r0에 담기는 값을 보면 된다.


r0와 관련된 부분만 보면,

mov r3, pc

adds r3, #4

mov r0, r3

이다.


따라서 0x00008d04 에서의 pc 값인 0x00008d08 에 4른 더한 값, 즉 0x00008d0c가 된다.


[key3]



마지막으로 key3이다. 

동일하게 r0와 관련된 부분은

mov r3, lr

mov r0, r3

이다.


lr 레지스터에는 key3() 함수를 호출한 뒤 리턴할 주소가 담겨 있다.

따라서 0x00008d80 이 된다.



입력해야할 값은 세 함수의 리턴 값은 합인 0x00008ce4 + 0x00008d0c + 0x00008d80 을 10진수로 나타낸 108400이다.





'Wargame > pwnable.kr' 카테고리의 다른 글

pwnable.kr memcpy  (0) 2019.02.13
pwnable.kr blukat  (0) 2019.02.11
pwnable.kr shellshock  (0) 2019.02.01
pwnable.kr mistake  (0) 2019.02.01
pwnable.kr lotto  (0) 2019.02.01

댓글