wget으로 leg.cleg.asm파일을 다운 받는다.

leg.c파일을 열어 보았다

어셈블리어로 뭔가를 한다...

다른 파일을 열어보자.

main함수에서 중요한 부분이다.

key1, key2, key3함수를 호출한다.

 

[key1]

pc가 뭔지 알아보자.

 

https://mandu-mandu.tistory.com/77

이 블로그에 자세히 설명 되어있다.

cpu가 명령어 하나를 수행할 때 fetch > decode > execute 의 과정을 거친다고 한다.

 

2개의 opcode를 실행하려면 fetch > decode > excute > fetch > decode > excute 6번 작업이 필요하다.

하지만 pip line이라는 것을 이용해서

이렇게 병렬적으로 단계를 수행하면 2개의 opcode를 실행할때 6번의 작업이 필요했던 것을 4번으로 줄일 수 있다.

직렬보다 효율적이다.

 

pcfetch할 주소를 담고 있다.

현재 명령어가 execute단계라면, 다음 명령어는 decode단계, 그 다음 명령어는 fetch단계일 것이다.

그래서 pc는 다다음번째 명령어의 주소를 담고 있게 된다.

 

이제 key1의 값을 구해보자.

pc는 다다음번째 명령어의 주소를 담고 있다고 했다.

다다음번째 명령어의 주소는 main+16 (0x00008ce4)이다.

이제 key2의 주소를 구해보자.

pc의 주소는 key2+24(0x00008d08)인데 중간에 adds r3, #4라고 있다.

, key2 값에 +4를 해줘야 한다.

그러니 key2의 값은 0x00008d0c가 된다.

이제 key3 의 값을 구해보자.

이번에는 중간에 lr이라는게 있다.

lr은 함수 호출 전에 다시 되돌아가 실행할 주소를 담고 있다고 한다.

lr의 값은 main+68(0x00008d80)이다.

이제 구한 값들을 모두 더해보자.

key1 -> 0x00008ce4

key2 -> 0x00008d0c

                                                            key3 -> 0x00008d80

10진수로 바꿔보자.

이제 10진수 값을 넣어flag를 얻자!!

'포너블 > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] shellshock  (0) 2020.03.09
[pwnable.kr] mistake  (0) 2020.03.09
[pwnable.kr] input2  (0) 2020.02.27
[pwnable.kr] random  (0) 2020.02.27
[pwnable.kr] passcode  (0) 2020.02.27

+ Recent posts