시스템프로그래밍5 [BombLab] phase_5 해설 이제 phase_5 해설을 해보겠다. phase_5 disassemblephase_5의 전체적인 코드는 위와 같다.나는 임의로 hispgs를 입력하였다. 를 보면 string_length를 호출하고 리턴값인 eax의 값이 6인지 확인한다.이를 통해 입력되어야 하는 값은 6글자의 string이라는 것을 유추할 수 있다. 그 다음 쭉 내려가보면 eax에 0을 넣는 과정을 거치고 41번부터 70번을 6회 반복한다. 이를 통해 한 글자씩 어떤 변형을 하는구나! 라는 것을 알 수 있다. 이후 strings_not_equal을 통해서 두 string을 비교한다. 이건 phase_1에도 나온 함수이다.이 떄 esi에 특정 주소에 있는 값을 넣는다. 이 값을 꺼내보면flyers라는 string이 나온 걸 볼 수 있다... 2024. 9. 10. [BombLab] phase_4 해설 여러분 할 만 하신가요 지금 정말 슬프실텐데요.. 저도 작년에 밤랩 강의 들을 때 정말 슬펐어요따라오고 계신 분은 정말 잘하시고 계신거구요 아닌 분들도 좌절하지 마시길 바랍니다. 저도 1도 못따라갔었어요ㅎㅎ 그래서 그 시절을 생각하면서 최대한 교육이 끝나고도 공부를 해볼 수 있도록 최대한 열심히 쓰고 있습니다. 잘 전달되었으면 좋겠네요! 그럼 phase_4 시작하겠습니다 phase_4 disassemble phase_3과 비슷한 부분이 있다! 바로 sscanf 함수를 호출하기 전에 rsi에다가 어떤 값을 넣는 것이다. 이걸 까보면 phase_3과 마찬가지로 두 정수를 입력받고자 한다는 것을 알 수 있다. eax에는 입력받은 숫자의 갯수가 들어가니까 무조건 2이다. 그리고 0x8(%rsp)에 들어가는 값을.. 2024. 9. 9. [BombLab] phase_3 해설 phase_3 disassemble전체 코드이다. 점점 길어진다... 우선 나는 임의로 숫자 4와 56을 입력했다. 4를 보면 함수에 파라미터로 주기 위한 부분인 rdi에 무언가 들어가는 것을 볼 수 있다. 해당 주소에 있는 값을 보면 이렇다. 이 값이 __isoc99_sscanf@plt에 들어간다는 것을 알 수 있고, 원하는 값은 정수 2개라는 것도 추측할 수 있다. 위 함수가 호출된 후 eax에는 입력받은 숫자의 갯수가 들어간다.jg는 앞에 수가 뒤에 수보다 작을 때 분기한다. 즉 eax에 있는 값이 1보다 커야한다는 것을 알 수있다. 우리는 어차피 2개의 숫자를 입력할 것이기 때문에 자연스럽게 넘어가자 39번을 보면 0x8(rsp)에 있는 값과 7을 비교하여, 7이 작으면 106번으로 분기하는 것을.. 2024. 9. 3. [BombLab] phase_2 해설 phase_2는 6개의 숫자를 알아내야한다. phase_2 disassemble입력한 수가 들어간 레지스터 찾기phase_2를 disassemble하였다.를 보면 read_six_numbers 함수를 호출하는 것을 볼 수 있다. 근데 이번에는 굳이 저 함수를 뜯어보지 않을 것이다. 함수명으로 기능을 유추할 수 있으니까!대신 우리는 저 함수로 받은 6개의 숫자가 어느 레지스터에 들어갔는지를 알아보아야한다. 코드를 쭉 따라가보면 로 가는 것을 볼 수 있다. 부터 rsp에 있는 수를 건드는게 보인다. 이 안에 의미있는 데이터가 있는 것 같다. 그래서 우선 실행한 후 phase_2의 정답을 입력하는 부분에 아무런 6개의 숫자를 넣어본다.그 다음 ni로 까지 간다.0x4(%rsp)를 하는 것을 보니까 숫자가 .. 2024. 9. 2. [BombLab] phase_1 해설 이제 본격적으로 문제를 풀어볼거다! 이렇게 bomb을 실행하고 r(run)명령어로 실행하면 환영 메세지가 나옵니다. 이제 이 밑에다가 phase_1의 정답을 찾아 입력하면 된다.이 때 bomb에 break 안걸고 오답을 입력하면 폭탄이 터진다! 주의!!phase_1 disassemble간단하게만 설명하자면맨 위와 아래에 sub와 add는 별 신경쓰지 않아도 된다에서 esi에 어떤 값이 들어갑니다. 이 값이 뭔지 한번 뜯어보겠다스포를 하자면 여기에는 문자열이 들어있다. 아마 모든 분들의 esi에는 문자열이 들어있을것이다 실행하면서 레지스터 값 확인하기밤랩의 핵심은 특정 instruction이 실행될 때의 레지스터값을 확인하는 것이다이를 위해서는 미리 phase_1에 breakpoint를 걸어두고 실행한 후.. 2024. 9. 2. 이전 1 다음