ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pwnable.kr leg 풀이
    Wargame/Pwnable.kr 2019. 8. 7. 22:02

    메타스플로잇을 잠시 접어두고 leg 풀이하겠습니다

    일단 코드는 이 정도로 어셈블리어가 나오는군요 main함수의 if구문을 본다면 key1, key2, key3를 모두 더한 값을 입력하면 플래그를 출력할 겁니다 그럼 key 함수들을 해석해보겠습니다

    key1 함수입니다. pc에 담긴 값을 r3에, r3에 담긴 값은 r0에 넘겨주는 간단한 함수네요

    근데 pc가 뭘까요 컴퓨터 말하는 거는 아니겠죠ㅎ,,

     

    CPU는 명령어를 수행할 때 fetch - decode - execute 의 세 과정을 거칩니다.

    이게 한 명령어를 수행할 때니까 두 개의 명령어(opcode)를 수행하려면 2(fetch - decode - execute) 해서 총 6번의 과정이 필요하죠?

    하지만 파이프 라인(pipe line)이라는 걸 사용하면 두 opcode을 수행할 때

    fetch - decode(fetch) - execute(decode) - execute

    총 4번의 과정만 거칩니다. 이 때 fetch할 주소를 담는 게 pc입니다.

    그럼 pc는 어디를 가리키고 있는 걸까? 라는 생각이 드시겠죠 안 들면 죄송합니다

     

    방금 쭉 예로 든 fetch - decode - execute 명령어가 계속 실행중이었다 생각하고, 그 중간에 부분을 떼어볼게요

    fetch - execute - decode - fetch - execute - decode - fetch 이 과정이 반복할겁니다

    네 뭐 어쨌든 현재 execute하는 부분으로부터 2칸 떨어져있고 이 2칸에서 1칸은 1word니까 주소가 8씩 떨어져있겠네요

    설명이 왜이렇게 안되지 ㄷㄷ 요약하면 pc는 현재 실행중인 주소로부터 8 더한 값입니다

     

    key1 함수에서 실제로 실행한 부분은 key+8 이니까, 그로부터 8 더한 key+16 즉 8ce4가 pc가 되겠습니다ㅏ아아ㅡ

    고로 r0 = 8ce4

    key2 함수입니다. mov r3, pc가 실제로 실행한 부분이라 판단되므로 pc값은 그로부터 8 더한 8d08이 아닙니다 훼이크임

    그 직후에 adds r3, #4가 실행되므로 r3=r0 은 0x8d08 + 0x4로 0x8d0c입니다 ㅎㅋ

     

    key3 함수입니다. lr의 값을 r3에 대입한 뒤 그 값을 r0에 넘기네요 그럼 이제 lr을 알아봅시다..ㅎ..

     

    그래도 간단하네요 BL 명령을 사용할 때 복귀주소를 자동으로 저장하는 레지스터라고 합니다(? bl?)

    main 함수에서 BL 명령을 사용해 key3 함수에 관여하는 건 8d7c고, 그 직후에 8d80이 아마 복귀주소겠죠 나머지 main 함수 실행해야 되니깐요

     

    그럼 모두 더한 값인 0x8ce4 + 0x8d0c + 0x8d80 = 

    0x1a770, 108400d입니다 십진수값으로 입력하면

    짜잔 플래그가 나오네요 빡센 레벨이었습니다 ^^7

     

    2019.8.7

    메타스플로잇하러 가야지

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

    Pwnable.kr shellshock 풀이  (0) 2019.08.14
    Pwnable.kr mistake 풀이  (0) 2019.08.11
    Pwnable.kr input 풀이  (0) 2019.08.05
    Pwnable.kr random 풀이  (0) 2019.07.22
    Pwnable.kr passcode 풀이  (0) 2019.07.22
Designed by Tistory.