전체 글 118

국민대학교 알고리즘 경시대회 후기

어제 국민대학교에서 알고리즘 경시대회를 개최해 참가했다. 문제는 실버1 ~ 골드2 사이 정도로 나왔고, 난이도가 어렵지 않아 올솔을 할 수 있었다. 그러나 문제가 쉬웠기 때문에 올솔러들이 많이 나와 장려상이나 동상 정도 받을 수 있을 것 같다. 정말 많이 성장했다는 느낌을 받을 수 있던 대회였고, 이 페이스를 유지하며 공부하면 내년엔 은상도 노려볼만 한 것 같다.

programming 2022.08.06

layer7 리버싱 6차시 과제(2) - x64dbg 명령어 써보기

목차 1. x64dbg명령어 쓰기 1. x64dbg명령어 쓰기 수업 중 x64dbg사용법에 대해 배웠다. 오늘은 사용법을 익히기 위해 간단한 드림핵 rev-basic-0 프로그램을 분석해보며 모든 명령어를 한 번씩 써볼 것이다. 써볼 명령어는 이와 같다. 하나씩 써보자. 일단 프로그램을 열어보았다. 그럼 F2부터 써보겠다. F2명령어는 코드에 브레이크 포인트를 설정하는 명령인데, 이를 설정하면 프로그램을 continue로 실행시켜도 그 부분에서 반드시 멈추게 된다. 즉, 프로그램을 디버깅할 때마다 원하는 곳으로 이동시켜야하는 수고를 하지 않아도 된다. 일단 shift + f12를 사용해 문자열 탐색을 한 후, 가장 수상해보이는 문자열을 클릭해 그 부분을 따라갔다. 문자열 참조를 클릭하면 이런 식으로 모든..

reversing 2022.08.03

Layer7 리버싱 6차시 과제(1) - ELF, PE 파일 정리

목차 1. ELF 2. PE 1. ELF ELF란? Executable and Linkable File의 약자로, 리눅스 상에서 컴파일을 하게 되면 ' ... -> 오브젝트 파일 -> 링킹 -> 실행 파일'이 되는데, 이 오브젝트 파일과 실행 파일 같이 뭔가 실행할 수 있는 파일이 바로 ELF파일이다. 또한, 라이브러리도 ELF파일이다. 이 ELF 파일은 ELF 헤더와 프로그램에서 쓰이는 데이터로 구성된다. ELF 파일은 이렇게 구성되어 있다. 저 ELF Header 부분이 파일 구조를 알려주는 부분이고, 나머지는 파일의 데이터를 저장한다. ELF 헤더부터 알아보자. 이것이 ELF 헤더에 어떤 값이 들어가야할지 정의한 표이다. 표의 앞부분 몇가지를 한 번 알아보자. · 0x00오프셋부터 표에 매직 넘버라..

reversing 2022.08.03

Layer7 리버싱 5차시 과제(3) - prob4 분석

목차 1. prob4 분석 및 코드 복원 1. prob4 분석 및 코드 복원 main함수를 뜯어봤다. 처음에 시작하자마자 fopen으로 파일을 여는 걸 볼 수 있는데, 한 번 어떤 파일인지 확인해보자. fopen은 첫 번째 인자가 파일 이름, 두 번째 인자가 파일 열기 모드이므로 첫번째 인자에 파일 이름이 들어있을 것이다. 그랬더니 이런 문자열이 나왔다. /dev 경로에 있다는 건 문제 제작자가 직접 urandom 파일을 만들었을 확률은 적으니 인터넷에 무슨 파일인지 검색해봤다. 검색해보니, urandom에선 절대 예측 불가능한 문자열을 준다는 사실을 알게 됐고, 다음 함수를 분석하기 시작했다. rbp-0x10에 fopen으로 얻은 파일 디스크립터를 저장하고, 4바이트 1블록를 읽어와 rbp-0x1c에 ..

reversing 2022.08.01

layer7 리버싱 5차시 과제(2) - prob3 분석

목차 1. prob3 분석 및 코드 복원 1. prob3 분석 및 코드 복원 일단 gdb를 켠 후, main 함수를 뜯어보았다. 하나씩 분석해보자. 처음에 스택프레임을 만든 후, time 함수를 호출하고 있다. time의 인자는 하나로, 원래는 NULL이 들어가지만 NULL은 0이기 때문에 0x0을 edi에 복사해 인자로 전해주었다. 그 바로 다음 코드에선 time의 결과값으로 srand를 호출하고 있는데, 이는 같은 시드라면 언제 실행해도 같은 랜덤값이 나오는 걸 방지하기 위해 1초마다 바뀌는 시드값을 이용한 것이다. 다음 코드에선 rbp-0xc에 있는 값을 0x0으로 만들고, main+143으로 점프하고 있다. 이젠 익숙해진 for문 전개이다. 아마 rbp-0xc에 반복횟수를 저장한 for문일 것이다..

reversing 2022.08.01