교육8 [교육일지] 자바 기초교육 회고 교육 목표자바 기초교육은 내가 교육부장이 된 후 처음으로 하는 교육이었다. 그만큼 정말 열심히 준비하였다! 내 교육 목표는 시간을 내서 내 교육을 들으러 온 모든 학생들에게 확실하게 얻어가는 것이 있도록 하는 것이었다. 그러기 위해서 가장 중요한 것은 난이도조절이라고 생각했다. 개발자 컨퍼런스 등에서 내 수준에 비해 너무 어려운 수업을 들으면 집중력이 떨어져 나중에 기억나는 내용이 전혀 없었던 적이 있었기 때문이다.그래서 나는 코딩을 처음 시작했을 때 어땠는지부터 떠올렸다. 나는 선생님께 1대1로 배웠음에도 이해하기 어려운 부분이 많았던 것 같다. 입출력 조차도 많이 헷갈렸던 과거를 생각하면 정말 하나하나 천천히 가르쳐야겠다고 생각했다. 교육 자료자료 만드는 것은 생각보다 매우 오래걸렸다. 만들다보니 .. 2024. 9. 17. [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. 이전 1 2 다음