전체 글 (24) 썸네일형 리스트형 [문제해결] Reversing.Kr Music Player 해결과정 문제 제목만 보면 재밌어 보일것 같다. 1분 미리듣기를 우회하면 flag를 얻을수 있다고 한다. 아무 mp3파일을 들고와서 재생을 해보면 1분이 되었을때 미리듣기만 가능하다는 메시지가 나온다. 코드가 난잡하다.(알고보니 이유가 있었는데...) 당황하지말고 start 부분을 찾아보았다. 문제에서 준 dll 파일을 로드하고 dll에 있는 ThunRTMain 부분으로 점프한다. 본격적으로 대화창을 생성하는 부분인듯 하다. 미리듣기 메시지가 담겨있는 부분을 한번 찾아보자 .text:00401851 aMp3Player db 'MP3_Player',0 문자열을 참조한 부분을 도저히 찾을 수 없어서 왜그런지 알아봤더니 이 프로그램의 작성 언어인 비쥬얼 베이직을 IDA에서 인식하지 못하기 때문이었다. X32디버거를 이.. [문제해결] Reversing.kr Easy Keygen 해결과정 일단 힌트가 될 만한것들이 있는지 문자열과 함수부분을 잘 살펴보자. Correct라는 문자열이 있다. 401113 함수로 가면 될것같다. 입력받는 부분들을 찾아보자 문법구조상 이름을 입력받는 부분은 이곳일 것이다. esp+143C+var_12C에 Name을 입력받는다. repne scasb라는 함수가 보인다. 구글링 결과 scasb는 EAX에 있는 값이랑 (EDI가 가리키는 곳의 공간에 담겨있는 값)을 1바이트 단위로 비교하는 것이고, repne는 값이 같은곳이 나올때까지 비교하는 것이다. 그리고 한번 비교할때마다 ECX가 1씩 줄어드는데, 0이 되면 작동을 멈춘다. edi가 가리키고 있는곳은.. esp+0x144-0x12C 부분이다. 이 부분은 esp가 4 더해지기 전 사용자로부터 입력을 받았던 곳이다.. [문제해결] HackCTF RandomKey 해결과정 마지막 200점짜리 문제 [사전조사] 실행해봤더니 정품 키 인증같은걸 구현해놓은것 같다. 쉘코드 삽입 기법은 불가능하다. [코드 분석하기] var_10과 var_c의 값을 일치시키면 되는것같다. 이들 변수에 대해서 더 자세히 알아보자 처음에 0을 인자로 해서 time 함수가 호출되고, 그 결과가 srand()함수의 인자로 들어가며 , 그 다음으로 실행되는 rand함수의 결과가 eax->varC로 이동되고 있다. 조금 익숙한 흐름이라고 생각했다. 합쳐보면, srand(time(0)); var_C=rand()인데, 이는 현재시간을 기반으로 시드를 생성하고, 이 시드를 기반으로 랜덤 정수를 생성하는 랜덤함수의 기본 사용 형태였다. var_C에는 랜덤함수의 결과가 들어간다는것을 알았다. scanf를 보면 "%d.. [문제해결] HackCTF Poet 해결과정 두번째 200점짜리 문제 [사전조사] 시 내용과 저자를 입력받아서 정확히 백만점을 획득하라고 한다. 단순히 길게 입력한다고 점수를 주는것같지는 않다. 쉘코드는 삽입할 수 없다. [코드 분석] 전체적으로 봤을때는 reward로 가면 될것같다. 그러기 위해서는 dword_6024e0에 있는 값이 0xf4240(=백만)과 같아야 할것같다. dword_6024e0은 여기에 있고 bss 영역이라 aslr을 걱정할 필요가 없다. 쭉 위로 올려보면 poem이라는 변수명이 보인다. 버퍼 오버플로우와 관련이 있을것같다. get_poem, get_author, rate_poem 함수들을 더 살펴보자 첫번째로 호출되는 get_poem 함수다. gets를 중심으로 보면 poem부터 입력받기 시작한다. gets로 입력받아서 입.. [문제해결] HackCTF RTL_World 해결과정 첫 200점짜리 문제다. [사전조사] 아주 간단한 게임같지..만? 코드의 흐름은 복잡할것같은 느낌이 든다.(근데 이런문제 어디서 본적 있는것같다. 물론 풀지는 못했다.) 쉘코드 삽입은 불가능하다. [프로그램 흐름 살펴보기] 이럴줄 알았다. 200점짜리가 되더니 코드가 더 복잡해졌다. 일단 전부다 분석하지는 않고 전체적인 흐름만 봐야할것같다. system과 /bin/bash라는 문자열이 보인다. 함수는 특별한건 없어보인다. 일단 처음부터 분석해보자 dlopen과 dlsym은 라이브러리에서 함수들의 주소를 찾아주는 함수라고 한다. dlsym함수에 system을 넣은걸 보니 system함수의 주소를 찾을것같다. dlsym 이후 eax값(함수의 반환값)이 var_C로 옮겨지므로 var_C에는 system함수의 .. [문제해결] HackCTF yes or no 해결과정 이번에는 파일이 2개 이상인것같다. 실행파일과 함께 libc-2.27라는 라이브러리 파일이 들어 있었다. [사전조사] 실행을 하면 "show me your number"을 출력하고 입력을 받는다. 아무 입력이나 하면 All I can say ~ 를 출력한뒤 good luck을 출력한다. 쉘코드 삽입 기법은 불가능하다. [흐름 분석] 1. Show me your number 출력 2. 최대 10글자까지 입력을 받아 rbp+s에 저장 3. eax에 0 저장한 뒤 atoi(rbp+s) 호출해서 결과값을 eax에 저장 4. [rbp+var_8]에 atoi 결과값을 옮기고 eax에서 0x0A를 빼고 오른쪽으로 3만큼 시프트 연산(8로 나눈 몫) 5. 연산결과가 음수면 초록색으로, 아니면 빨간색으로 이동 연산결과가.. [정보보안] Return to Libc 씹어먹기 버퍼 오버플로우를 이용해서 저 Return address를 변조하면 현재 실행되는 함수 다음으로 무슨 함수를 실행할지를 결정할 수 있다. 이때 궁금증 두가지가 생겼다. 1. 매개변수를 받는 함수일경우 어떻게 전달해줄까? 2. 함수를 두 개 이상 실행하고 싶다면 어떻게 해야할까? 1. 매개변수 전달하기 ret 명령어와 스택의 변화를 알아보면서 이해할 수 있었다. 데이터가 이렇게 있다고 가정해보면 함수가 종료될때쯤 rsp는 saved ebp를 가리키고 있을 것이다. 예전에 알아보았던것처럼 함수의 끝부분에는 pop ebp; ret; 이렇게 이루어지는데 이렇게되면 ret 직전에 스택의 모습은 이렇게 되어있다. 만약 return address에 새로운 함수의 시작 주소가 들어있으면 어떻게 될까? 일단 ret 명령.. [문제해결] BOF_PIE 해결과정 저번에 풀었던 PIE 보호기법과 관련있는 문제인것 같다. 실행해보면 어떤 주소와 함께 문자열들이 나오는데, 아무 단어나 입력하면 Nah...라고 출력해준다. [사전조사] 예상대로 PIE가 걸려있었고(함수들의 절대주소 계속 변함), NX bit가 있어서 쉘코드 삽입도 불가능하다. 단, GOT overwrite 정도는 가능해 보인다. [프로그램 흐름 분석해보기] 특별히 보이는 함수는 j0n9hyun, welcome이었다. 분석이 필요해 보이는 함수는 main을 포함해 3개 정도가 될것같다. welcom함수와 puts함수만 호출하는걸 보니 welcome함수에서 입력을 받고, 다시 여기로 돌아와서 Nah를 puts하는것 같았다. 눈에 띄는 문자열은 "j0n9hyun is %p\n"인데, 스택의 최상위에 쌓이게 .. 이전 1 2 3 다음