본문 바로가기

분류 전체보기211

[강의노트] 사전ADT를 이용한 선형탐색과 이진탐색 - 1 사전ADT를 이용한 선형탐색과 이진탐색 - 1 먼저 이전시간까지 다룬 정렬알고리즘들을 복습할 겸 정리해보고, 새로 배울 내용인 사전 ADT를 공부해보자. 비교정렬 알고리즘의 비교 정렬의 안정성 키-원소 항목들을 정렬할 때, 중요한 이슈는 동일 키를 어떻게 처리되느냐는 것. 동일키의 원래 순서를 보존해주는 것을 안정적인 알고리즘이라고 부른다. 쉽게 예시를 들면 학교에서 운동장으로 나와 한 줄로 서있으라고 방송을 한다면, 나온 순서에 맞게 줄에 서있을 것이다. 이때 키가 큰 순서대로 다시 줄을 서라고 했을때, 키가 같은 친구들은 원래의 순서에 맞게 줄을 서는것 그럼 지금까지 배운 정렬 알고리즘들 중에 안정성을 보장하는 알고리즘은 어떤 것이 있을까? 답은 선택정렬, 삽입정렬, 합병정렬이 안정적인 알고리즘이다 .. 2021. 10. 5.
[포너블] LOB 10 - vampire LOB 10 - vampire write up /* The Lord of the BOF : The Fellowship of the BOF - skeleton - argv hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i, saved_argc; if(argc 48){ printf("argument is too long!\n"); exit(0); } // argc saver saved_argc = argc; strcpy(buffer, argv[1]); printf("%s\n", buffer); // buffer hunter memset(buffer, 0, 40); // u.. 2021. 10. 3.
[포너블] LOB 9 - troll LOB 9 - troll write up 코드가 좀 간결해진걸로 봐서 뭔가 제약이 풀린 것 같다. 확인해보니 환경변수와 버퍼 초기화 부분이 사라졌다. 그 대신 here is changed 의 코드를 살펴보면 47번째 바이트에 \xff 를 사용할수 없게 되어있다. 즉 다시 말해서 argv[1]의 48번째와 47번째는 \xbf\xff 로 시작하는 스택주소를 줘서 지금까지 풀었는데 ff를 사용하지말라는 말은, 저기 영역대를 사용하지 말라는 것이다. 그니까 이번 문제가 거는 유일한 제약은 bfffxxxx 로 시작하는 주소 영역대를 사용하지말라는 것인데, 그럼 이전에 사용했던 argv[2]에 쉘을 올리고, 놉(또는 dummy 문자)을 엄청 많이 깔면 주소영역대가 변하지않을까? 라는 아이디어가 들었다. argv[2.. 2021. 10. 3.
[포너블] LOB 8 - orge LOB 8 - orge write up LOB 8 orge write up 입니다. 계속해서 같은 스택프레임 구조에 제약사항만 추가되는 형태로 문제가 진행되고 있다. 이번에는 argc가 2개 그니까, 하나의 명령어를 가지고 문제를 해결하란 소리다. 이전에 argv[2] 에 쉘코드를 넣고 주소를 주던 그런 방식은 더 이상 통하지 않는다 총 제약을 정리하면 다음과 같다. 환경변수 초기화 -> 환경변수 사용 x 버퍼 초기화 -> 버퍼 내부에 쉘코드 넣는것 x argv[1]의 길이제한 48번째 바이트는 \xbf 하나의 인자만 입력 가능 좀 고민하면서 삽질해보다가 잘 모르겠어서 또 다른 분들의 라업을 참고했는데 내가 처음에 생각한 아이디어는 맞았다 바로 이전 문제에서 사용한 심볼릭 링크가 그렇게 의미 있지않게 사.. 2021. 10. 3.