본문 바로가기

CSE8

[BombLab] 환경설정 만약 윈도우 노트북을 가지고 있고, 우분투가 설치되어있다면 이 과정은 전부 건너뛰어도 됩니다! 이 앱이 있으면 우분투가 설치된겁니다!(버전은 22.04, 24.04 상관 없음) 우리는 x86_64 아키텍쳐를 기반으로 실행되는 밤랩을 해야하는데, 맥북의 경우 arm64 아키텍쳐입니다.따라서 맥북 내에서 이를 실행하는 것은 불가능하고, 우분투 서버를 만들어서 실행해야합니다.(아마 시스템프로그램에서 하는 찐 밤랩은 따로 서버가 있어서 이에 대한 문제는 없을 것입니다.) 윈도우는 우분투를 깔아서 컴퓨터 내에서 실행할 수 있지만, 제가 보기에 우분투를 설치하는 것보다 서버를 만들어서 하는 방법이 더욱 간편해서 우분투 설치가 안되어있으시다면 아래 방법을 따라하시는 것을 추천드립니다. 아주 간단하니까 겁먹지 말고 따.. 2024. 10. 6.
[BombLab] phase_6 해설 드디어 마지막이다!마지막인만큼 좀 길다ㅜㅜ phase_6 disassemble이제 이 부분을 보면 6개의 숫자를 입력받는 phase라는 것을 유추할 수 있다. 나는 임의로 1 2 3 4 5 6을 넣어보겠다. 위 코드들을 보면 $r13에 있는 수가 eax로 들어가고, eax에 있는 수에서 1이 한번 빼진 후 5와 비교를 한다.만약 6보다 작거나 같으면 52번으로 넘어가고 그렇지 않으면 폭탄이 터진다.그럼 r13에 우리가 입력한 값들이 들어있다는 것을 유추할 수 있다. 확인해보면맞다. 이를 통해 처음 입력하는 숫자는 6보다 작거나 같아야한다는 것을 알 수 있다. 여기서는 이중 반복문이 실행된다.(32에서 93, 65에서 87)52번으로 분기 한 후 r12d에 1을 더한다. 지금 r12에는 0이 들어있으니까 .. 2024. 9. 11.
[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.