Bomblab - phase 1

LONGNEW·2021년 10월 10일
1

Bomb

목록 보기
1/7

폭탄 출처 : Bomb from "Dr.Evil"

no. 1251056


<+9>
까지의 스택 상황이다. esi 레지스터에는 특정 주소를 가리키고 있고 이 주소가 가지는 문자열은 아래와 같다.

일단 특정한 문자열을 저장하고 함수로 간다.

<+14> test %eax, %eax
를 통해 두 수를 AND 연산 한다. 그리고 이 두 수가 0이면 분기한다.


"Strings not equal"

나머지 r12, rbp, rbx를 스택에 넣은 이후 입력 받은 두 개의 문자열을 rbx, rbp 레지스터에 옮깁니다.

<+15> mov %eax, %r12d
함수에서의 리턴 값을 r12d로 옮깁니다. 이 값이 "4"인 걸로 보아 입력 한 문자열의 길이를 저장하는 듯 합니다.

"string length" 함수에 넣을 인자를 계속 레지스터 rdi에 넣으면서 확인합니다.

<+31> cmp %eax, %r12d
두 수의 길이를 비교해서 이 두 개가 다른 경우에는 <+96>으로 이동한 후에 1을 eax로 옮겨 리턴하도록 합니다.

이를 통해 우리는 입력하는 문자열이 동일해야 함을 알 수 있습니다.

<+39> test %al, %al
rax 레지스터의 마지막 값을 가져ㅘ서 둘을 AND 연산합니다. 그리고 이를 rbp 레지스터가 끝날 떄까지 하도록 합니다.

0개의 댓글