Bomblab - Phase 3

LONGNEW·2021년 10월 10일
1

Bomb

목록 보기
3/7

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

no. 1251056


<+40> sscanf 함수 들어가기 전 상황입니다.
"%d %c %d" 정수 문자 정수 이렇게 세개를 입력받는 함수의 형태.
이 때 리턴 된 값이 2개 보다는 커야 폭탄이 터지지 않습니다. 물론 위의 형태를 통해 3개를 입력 받아야 함을 알 수 있습니다.

<+55> cmp DWORD PTR [rsp + 0x10], 0x7
입력을 받는 주소를 보아 rcx의 경우 문자를 가지고 나머지 2개는 정수를 가집니다. 그 중 하나인 앞의 정수는 7보다 작거나 같아야 폭탄이 터지지 않습니다.

in[0] <= 7

<+70>에서 rax가 가지고 있는 값은

해당하는 주소값으로 jmp해서 그 상태에서 요구하는 값을 맞춰야 합니다. 그리고 그 값은 16진수로 나타나있는 값과 동일해야 합니다.
그렇기에 2번째 정수는 자신이 첫번 째 넣은 정수로 인해 이동한 주솟값에서 요구하는 값을 찾아야 합니다.

그래서 상황에 따라 다른 값을 원합니다.

if in[0] == 0 -> in[2] == 828 -> in[1] == 'i'
if in[0] == 1 -> in[2] == 779 -> in[1] == 'f'
if in[0] == 2 -> in[2] == 725 -> in[1] == 'q'
if in[0] == 3 -> in[2] == 565 -> in[1] == 'z'
if in[0] == 4 -> in[2] == 402 -> in[1] == 'l'
if in[0] == 5 -> in[2] == 422 -> in[1] == 'p'
if in[0] == 6 -> in[2] == 815 -> in[1] == 's'
if in[0] == 7 -> in[2] == 535 -> in[1] == 'm'

0개의 댓글