[BombLab] phase_3 풀이

안우진·2024년 2월 21일

BombLab

목록 보기
4/9
post-thumbnail

[Type 1]

밤랩 1251056, 1451023, .. 의 유형이다.

입력 받는 부분을 보니 %d %c %d이고 입력 개수를 2개보다 많이 넣어야 한다.
그리고, 0x10(%rsp)가 7보다 크면 터진다.
<+70>에 jmp가 보이는데

0x10(%rsp)의 값에 따라 해당 주소로 jmp를 한다.

예로, 0x10(%rsp) 에 0을 넣으면 위의 사진처럼 0x400f62로 jmp 한다.
이 때, %eax에 상수 값을 복사하고, 0x14(%rsp)와 상수를 비교한다.
저 두 상수를 알아내면 답을 알 수 있다.
0x10(%rsp), 0xf(%rsp), 0x14(%rsp) 는 각각 %d %c %d에 대응한다.

[Type 2]

밤랩 1551002, 1551015, .. 의 유형이다.

입력 받는 부분을 보니 %d %d이고 입력 개수를 1개보다 많이 넣어야 한다.
그리고, %rsp가 7보다 크면 터진다.
<+57>에 jmp가 보이는데

%rsp 의 값에 따라 해당 주소로 jmp를 한다. Type 1과 다른 것은 오름차순이 아닌 내림차순이라는 것 뿐이다.

예로 %rsp가 0이라면 위의 사진처럼 0x400f8e로 jmp 한다.
이 때 %eax에 상수 값을 복사하고 %eax와 0x4(%rsp)를 비교한다.
상수 값 하나만 알면 페이즈를 통과할 수 있다.
또한 %rsp, 0x4(%rsp) 가 각각 %d %d 에 대응한다.

[Type 3]

밤랩 1551008, 1551012, .. 의 유형이다.

입력 받는 부분을 보니 %d %d 이고 입력 개수는 1보다 커야한다.
그리고, %rsp가 7보다 크면 터진다.
<+57>에 jmp가 보이는데

%rsp 의 값에 따라 해당 주소로 jmp를 한다.

Type 3은 특이하게 %eax가 계속 누적된다.
%rsp가 0이면 0x2fb - 0x3b9 + 0x367 - 0x146 + 0x146 - 0x146 + 0x146 - 0x146 이다.
뒤에 반복이 보인다. 그래서 계산하기 쉽게 %rsp가 4 또는 6 일 때 %eax는 0이다.
항상 위의 값이 일정하다는 보장이 없기 때문에 확인해야 한다.
다만, 경험상 %rsp가 4, 6이면 %eax 가 0 일 확률이 높다.

그런데 <+165>를 보면 %rsp가 5보다 크면 터져버리기 때문에 주의하자.
또한 %rsp, 0x4(%rsp) 는 각각 %d %d 에 대응한다.

0개의 댓글