카테고리 없음

[BombLab] phase_1, 2, 3

qkrdldks04 2025. 5. 14. 23:44

 

 

phase_1은  strings_not_equal 함수에서 설정된 문자열과 사용자의 입력값을 비교하여 일치하면 0을 반환하고 아니면 0이 아닌 값을 반환하는 비교 함수 같다. 일치하면  jump 하기에 값을 동일하게 만들어서 0x400ef7로 점프하게 만들어야겠다.

 

 

strings_not_equal 함수를 disassemble 해보니 rbx에 rdi, rbp에 rsi의 값이 대입되고 같으면 0을 반환하는 것을 알 수 있다.

 

 

phase_1 에 브레이크 포인트를 걸고  ni로 2번 정도 실행했고 1을 입력해서 rax, rcx, rdx 에 1값이 저장되어 있다.

x86에서 함수에 인자 전달 방식인 rdi → rsi → rdx → rcx → r8 → r9 로 진행 되기에 먼저 rsi 에 적혀 있던 문구가 rdi 로 넘어간 상황이다. 따라서 실행하기 전에 rsi 에 저장되어 있던 Border relations with Canada have never been better. 를 써주면 동일한 값으로 인식하여 +23 으로 점프할 수 있다.

 

phase 1 defused

 


 phase_2 를 disassemble 해보니 read_six_numbers 함수가 있기에 숫자 6개를 적으면 된다.

<+14> 에서 rsp = 0x1 이기에 첫 번째 숫자는 1이고 <+30>, <+32> 에서 현재 숫자 = 이전 숫자 x2 이기에 1부터 시작하여 각 숫자가 이전 숫자의 두 배가 되도록 6개를 입력해야 한다.

따라서 1 2 4 8 16 32 를 입력하면 된다.

 

 

phase 2 통과


 

사실 3 아직 이해를 못 해서 스터디 시작 전까지 수정해서 올려놓겠습니다 ㅠ