이번 건 지난번 것보다
한 단계 낮은 Hard Level
라서 그런지
조금 빠르게
작성되는듯합니다.( ´∀`)
스샷.1
그럼 지문 마이웨이 직역
으로 는 다음과 같습니다.
Daddy told me I should study arm.
(셈님이 arm 공부해야 한다고 말했당께.)
But I prefer to study my leg!
(근디 나는 leg 공부가 더 하고싶당께?)
스샷. 2
ssh leg@pwnable.kr -p2222
바로 접속해주시고
스샷. 3
ls -l로 파일부터 확인해줍니다.
그런데 어떻게 할 방법이 없군요,
접근 시도가 안됩니다…? ōxō
접근 시도가 안됩니다…? ōxō
그럼 아까 지문에 있는
다운로드 부분에서
Download :
http://pwnable.kr/bin/leg.c
http://pwnable.kr/bin/leg.asm
각각 받아둡니다
다운로드를 하고 바로
leg.c를 확인해 봅시다.
key1부터 3까지의
함수들은 ARM 어셈블리어
로 작성되었습니다.
먼저 main 함수를 보면 위 3개의
함숫값을 모두 더한 값을
맞추면 키값을 받아 챙길 수
있는 모양입니다.
main 함수 어셈코드도
봅시다.
스샷. 5
함수를 통해 구한 r0 값을
모두 더해서 최종적으로
r2에 들어가는 것을
알 수 있습니다.
그럼 각 함수를 보겠습니다.
스샷. 6
key1함수의 c와 어셈코드 입니다.
pc라는 값을 r3에 넣고
다시 r3 릉 r0에 넣습니다.
그럼 pc라는 값이 key1의
값이 되겠습니다.
pc가 뭔지 잠깐 들여다본다면
cpu가 명령어 하나를 수행할 때 fetch > decode > execute 의 과정을 거친다고 합니다. 2개의 opcode를 실행하려면 fetch > decode > execute > fetch > decode > execute 총 6번의 작업이 필요합니다.
이렇게 병렬적으로 단계를 수행하면 2개의
opcode를 실행할 때 6번의 작업이
필요했던 것을 4번으로 줄일 수 있습니다.
직렬보다 효율적이라고 합니다.
pc는 fetch할 주소를 담고 있습니다.
현재 명령어가 execute 단계라면,
다음 명령어는 dexode 단계,
그다음 명령어는 fetch
단계 이겠습니다.
그래서 pc는 다음번째 명령어의 주소를 담고
있게 됩니다.
|
이제 본론으로 돌아와서
key1 함수에 pc의 값은
0x00008ce4
되겠습니다.
이제 key2로 가봅시다.
스샷. 7
r3에 pc 값(0x00008d08)
을 대입하고, 4를 더해서
r0에 대입합니다.
key2의 값은
0x8d08 + 4 = 0x8d0c
key3을 봅시다.
스샷. 8
lr이라는 값을 r3에 대입하고
r3의 값을 r0에 대입합니다.
그러면 lr이라는 값을
구하면 될 듯합니다.
main함수를 보면
스샷. 9
lr의 값은
0x00008d80
3가지 모두 구했읍니다.
key1 | 0x8ce4
key2 | 0x8d0c
key3 | 0x8d80
0x1a770
그럼 바로 키값을
받아챙기러 가봅시다 ㅋㅅㅋ
이렇게 입력창에다가
108400을 입력하겠습니다.
그리고 프로그램 특성상
반드시 정수로
입력해야 됩니다.
스샷. 10
이렇게 키값이 나오고
스샷. 11
받아챙긴 값으로
처음 화면으로 돌아와서
빈칸에 입력하고
auth 버튼을 누르면 됩니다.
미션 완료 동시에
2 포인트 받아 챙겨젔습니다.
그럼 다시 최초의 화면에
돌아 와보면 이렇게
완료되었다고 녹색
점선으로 표시가 됩니다.
긴 글을 보시느라 감사합니다.
수고하셨습니다(ㆁᴗㆁ✿)
좋은 하루 되시고 하시는 일 잘 되시고
날이 덥습니다 더위 먹지 않게 유의하시고
코로나 조심하세요 🙂
#pwnable_kr,#pwnablekr,#웹해킹,#해킹,#실습,#ieg,#Ieg,
#모의해킹,#나오마리오타프라데이리,#ōxō,#oxo,#콧코로 ,
#콩코로,#콩,#콩진호 , #홍진호 , #kokkoro , #コッコロ , #어_왜_두번_써지지 ,
#피치피치핏치,#Mermaid_Melody ,#ぴちぴちピッチ,#네오아카데미,#코로나