해커스쿨 LOB4 해커스쿨 L.O.B level 7 [darkelf] darkelf 로그인 후 파일을 확인한다. 코드 파일을 확인한다. 힌트와 추가된 부분까지만 보겠다. 추가된 부분을 분석한다. argv[0]이 77이 아니면 if 문을 실행한다. 코드는 아주 간단하다. 지금까지 argv[1], argv[2]를 사용해서 argv[0]이 어떤 것인지는 알 순 있지만 어떻게 해야 할지 고민이 많아진다. gdb로 메모리 분석한다. 이때, 추가된 부분만 가져오겠다. level 6 [wolfman]에서 배운 어셈블리 언어의 if 문의 분석 방법을 통해 분석한다. strlen 함수를 부르고 cmp로 "%eax, 77"을 비교한다. 여기서 %eax 레지스터에는 argv[0]이 들어있고 77과 비교한다. 코드에서는 "!=(JNE)"인데 대우 명제를 취해 "==(JE)"를 사용해 argv[.. 2020. 5. 28. 해커스쿨 L.O.B level 6 [wolfman] wolfman 로그인 후 파일을 확인한다. 코드 파일을 확인한다. 코드 시작 전 힌트를 보면 level 5 [orc] 문제에서 "check length of argv[1]"가 추가되었다. 추가된 코드를 분석해보면 "argv[1]"의 길이가 48보다 크면 문자열을 출력하고 프로그램을 종료시킨다. 이전 문제들을 잘 풀었다면 추가된 if 문에서 막히지 않을 것이다. 왜냐하면, 지금까지 두 번째 if 문에서 "agrv[1][47]"에서 '\xbf'가 들어가고 끝나므로 즉, 47byte에서 끝나고 48byte까지 가지 않아서 생각할 필요가 없어지고 이전 문제들과 같아진다. gdb로 메모리 분석한다. 이때, 추가된 코드와 메모리 스택만 하겠다. strlen 함수를 부르고 cmp로 비교한다. JBE(JLE와 비슷) .. 2020. 5. 25. 해커스쿨 L.O.B level 5 [orc] orc 로그인 후 파일을 확인한다. 코드 파일을 열어 코드를 분석한다. level 4 [gobilin] 문제와 비슷한데 buffer hunter가 생겼다. level 4에서 배운 memset을 분석하면 buffer 변수의 메모리를 0으로 40byte만큼 초기화한다. gdb로 메모리를 분석한다. 이때, 권한문제를 피해 복사해서 열어야 하는 건 많이 해서 이제는 알 것이다. 이전 메모리들은 이전 문제와 같고 이 부분만 추가됐으므로 이 부분문 가져왔다. 어셈블리 코드를 보지 않아도 될 정도다. 주소만 보자면 "ebp-40"이고 메모리 스택을 도식화해본다. int i 4byte char buffer[40] 40byte SFP 4byte RET 4byte 여기서도 변수 i는 신경 쓰지 않아도 되고 dummy도 들.. 2020. 5. 21. 해커스쿨 L.O.B 시작 해커스쿨 L.O.B 포스팅을 시작하기에 앞서 정보공유를 하려 한다. 해커스쿨 F.T.Z를 모자란 실력으로 해결했다. F.T.Z를 해결한 후 모자란 C언어 공부를 했다. 어셈블리어를 조금 맛을 보았고 LOB와 병행하려 한다. 코딩을 배운 지 얼마 되지 않았고 C언어, 어셈블리어를 자세히 알지 못한다. C언어 공부는 "독하게 시작하는 C 프로그래밍 최호성 지음"으로 인터넷 강의를 들으며 공부를 했다. 인터넷 강의는 인프런, 유튜브에 공개되어 있었으나 2023년 6월 1일부터 인프런에는 강의가 내려갔고, 유튜브에는 회원전용으로 바뀌었다. (2024.03.14 수정) 어셈블리어는 "게임처럼 쉽고 재미있게 배우는 어셈블리 언어 튜토리얼 원일용 지음"으로 인터넷 강의를 들으며 공부하고 있다. 인터넷 강의는 인프런,.. 2020. 5. 15. 이전 1 다음