ARM assembly 공부, bof

ARM assembly를 공부하기 위해서 bof redhat 원정대 1번 문제를 ARM환경에서 컴파일하고 단순하게 어셈블리어만 라인바이라인으로 분석해보고 x86 리눅스에서와 어떤식으로 다른지 확인 해 보았다.

bof 1번 문제의 c코드


strcpy에서 버퍼의 크기를 확인하지 않아 버퍼오버플로우가 발생 될 것으로 예상된다.

c코드 바이너리의 어셈블리어코드


서브루틴으로 진입시 r11, rl 을 사용하여 분기오피코드와 서브함수의 PUSH {r11, lr}로 SFP와 RET를 백업 한다. argv는 r0. r1로 전달한다.
함수를 빠져 나올때는 POP {r11, pc}로 스택프레임과 돌아갈 주소를 복귀시켜준다.
여기서 POP되는 스택을 조작하면 이전처럼 pc를 조작 할 수 있을것 같다.


첫번째 네모가 r11로 팝될 놈이고 두번째 네모가 pc로 팝될 놈이다.
두번째 네모를 덮어 pc를 조작 할 수 있어 보이나 안해봐서 확실하지 않다ㅋ

0 개의 댓글:

댓글 쓰기