Self-Improvement

Protostar-stack1 풀이 본문

리버싱 기초

Protostar-stack1 풀이

JoGeun 2018. 12. 19. 15:39

먼저 stack1의 소스코드를 확인해보도록 한다. 인자가 무조건 존재해야 하며 modified 변수는 초기값으로 0이 주어지고 0x61626364가 되면 해결이 되어지는 문제이다.


역시나 gcc로 컴파일을 해준다.


gdb-multiarch로 stack1 디버깅을 시작해준다.


필자는 빅엔디안과 intel로 셋팅을 해놓고 시작하였다.


disass main으로 디스어셈블리를 확인하던 중 쉽게 비교구문을 찾을 수가 있었다.


바로 브레이크포인트를 설정하고 run AAAA로 실행해 보았다.


정상적으로 브레이크포인트에서 멈춘걸로 확인이 된다.


이때 cmp에서 사용되는 eax 레지스터의 값을 확인해보니 0으로 그대로 설정되어 있다.


당연히 continue을 하게되면 풀이에 실패하게 된다.


다시 run A*76dcba(계산법은 마지막에)으로 실행해본다.


브레이크 포인트에서 멈추었으며 이때 다시 eax의 레지스터 값을 확인해보니 비교하는 값과 같다라는 걸 확인할 수 있다.


역시나 continue을 하게되면 문제가 해결이 되었다.


계산법은 disass main eax는 modified을 나타내며 그 값은 rbp-0x4에서 가져왔음이 확인된다.

그리고 buffer는 rax로써 rbp-0x50에서 가져왔음이 확인되며 두개를 빼게되면 buffer에서 modified까지의 거리가 나오게 된다. 그 뒤에 dcba을 입력하면 해결되어진다.