여러분 할 만 하신가요 지금 정말 슬프실텐데요.. 저도 작년에 밤랩 강의 들을 때 정말 슬펐어요
따라오고 계신 분은 정말 잘하시고 계신거구요 아닌 분들도 좌절하지 마시길 바랍니다. 저도 1도 못따라갔었어요ㅎㅎ
그래서 그 시절을 생각하면서 최대한 교육이 끝나고도 공부를 해볼 수 있도록 최대한 열심히 쓰고 있습니다. 잘 전달되었으면 좋겠네요!
그럼 phase_4 시작하겠습니다
phase_4 disassemble
phase_3과 비슷한 부분이 있다! 바로 sscanf 함수를 호출하기 전에 rsi에다가 어떤 값을 넣는 것이다. 이걸 까보면
phase_3과 마찬가지로 두 정수를 입력받고자 한다는 것을 알 수 있다.
eax에는 입력받은 숫자의 갯수가 들어가니까 무조건 2이다. 그리고 0x8(%rsp)에 들어가는 값을 0xe와 비교한다. 이 값은 첫번째 수를 의미하는 것 같지만 한번 확인해보자 난 임의로 12 34를 넣었었다.
맞다.
0xe는 10진수로 15이다. jbe는 뒤에 있는 것이 작거나 같을 경우 jump한다. 즉, 첫번째 수는 15이하여야한다.
그 다음 코드를 보면 레지스터에 파라미터 값을 넣고 함수를 호출하는 것을 볼 수 있다.
이후 eax값이 0인지 확인하여 맞다면, 두번째로 입력한 인자(0xc(%rsp))와 0을 비교하여 0이면 함수를 종료하도록 한다.
여기서 감이 오신 분들이 있을텐데, 우리는 phase4를 풀기 위해 굳이 func4를 보지 않아도 된다. 왜냐하면 첫번째 인자는 15이하의 수, 그리고 두번째 인자는 0이라는 것이 나왔기 때문이다.
그래서 우리는 위 경우를 모두 해봐서 func4 결과 eax가 0이 될 수 있는 인자를 찾으면 된다.
다 해본 결과 1 0을 입력했을 때 통과되는 것을 볼 수 있었다.
정답
1 0
phase_5로 가보자!
'CSE > 시스템프로그래밍' 카테고리의 다른 글
[BombLab] phase_6 해설 (0) | 2024.09.11 |
---|---|
[BombLab] phase_5 해설 (1) | 2024.09.10 |
[BombLab] phase_3 해설 (0) | 2024.09.03 |
[BombLab] phase_2 해설 (0) | 2024.09.02 |
[BombLab] phase_1 해설 (0) | 2024.09.02 |