1. 개인 블로그 운영
2. 개인 프로젝트 – 너의 타자소리가 들려
3. 팀 프로젝트 – 다함께 끝말잇기
4. Hackerschool FTZ 풀기
5. 리버싱 – 리버싱 핵심원리
6. CCE 참가
7. Anti – Cheat 연구
8. 영어점수 UP!!ㅎㅅㅎ
1. 개인 블로그 운영
동아리 활동을 시작한 후 동아리에서 배우고 공부하는 내용과 스스로 공부한 내용을 어떻게 정리하면 좋을지 고민하다가 개인 블로그를 운영하게 되었다. 공부한 내용과 라이트 업을 주기적으로 올렸다. 블로그에 공부했던 내용을 기록하니 시간이 흐른 후에 정확한 개념이 기억나지 않을 때 내가 공부했던 내용을 다시 복습할 수 있어서 실력향상에 많은 도움이 되었다. 또한 무엇을 얼마나 공부했는지 목차로 알 수 있어서 동기부여가 되었다.
2. 개인 프로젝트 - <너의 타자 소리가 들려>
동아리 활동을 시작한 후 내가 처음부터 끝까지 개발한 가장 첫 번째 프로그램이었다. 그동안 공부했던 C언어의 지식을 정리하고자 만들었던 프로그램이었다. 처음에는 어떻게 설계를 해야 할지 막막했지만 종이로 구조도를 그려가며 생각을 정리했다. C언어를 기반으로 구조체, 파일 입출력, 동적 할당을 사용하여 내가 배웠던 프로그래밍 문법들이 실제로 어떻게 쓰이고 더 효율적으로 코드를 짜는 방법들을 연구하고 배울 수 있어서 좋은 경험이었다.
3. 팀 프로젝트 - <다 함께 끝말잇기>
버전 제어를 위한 웹 기반 호스팅 서비스인 GitHub을 사용하는 방법을 배우려고 팀 프로젝트를 시작하게 되었다. 이미 한번 프로그램을 만든 경험이 있었지만, 팀 프로젝트는 팀원과 분업을 하여 더 큰 규모의 프로그램을 만들 수 있었다. 프로젝트 도중 친구들과 분업을 하고 이견을 조율하는데 많은 어려움이 있었지만 대화를 하며 극복했다. GitHub에 코드를 올리고 공유하는 방법이 처음에는 어려웠지만 점점 익숙해졌고 자신이 수정한 코드의 기록이 남아 개발에 더 도움이 되었다. <다 함께 끝말잇기>는 2명 이상의 사용자가 같은 서버에 접속하여 끝말잇기를 플레이 할 수 있는 게임 프로그램이었는데 나는 소켓 통신을 맡았다. 프로그램 개발 경험이 있었기 때문에 소켓이라는 새로운 분야를 공부하고 싶어서 도전하였다. 소켓의 개념과 소켓을 설정하는 방법 등 처음에는 이해가 잘 안 되었지만, 선배들의 도움과 정보 검색으로 소켓을 완전히 이해할 수 있게 되었다.
4. Hackerschool 풀기
리눅스에 익숙해지고 gdb, Vm 명령어에 익숙해지기 위해 해커스쿨의 FTZ trainer 를 풀었다. 리눅스 명령어와 구조에 대해 아무것도 모른 채로 초보자를 위한 trainer 레벨을 풀기 시작했다. Trainer 9 까지 있는 연습용 ftz로 리눅스 명령어와 구조를 배우고 Level 1~Level 20까지 본격적으로 리눅스의 취약점을 이용한 해킹 시뮬레이션을 학습했다. 정해준 목표를 힌트만 보고 처음부터 끝까지 풀어간다는 것이 처음에는 어렵고 오랜 시간이 걸려 힘들었지만 점점 정보 검색에 익숙해지고 게임처럼 즐기게 되면서 간접적으로나마 해킹을 시뮬레이션해볼 수 있어서 좋은 기회였다.
5. 리버싱 - <리버싱 핵심 원리>
FTZ Level 10에 접어들고 스택의 구조와 어셈블리의 이해가 필요해서 해킹을 처음 시작할 때부터공부하고 싶었던 Reversing을 공부하기 시작했다. <리버싱 핵심 원리> 책을 읽으면서 책에 있는 예제를 풀면서 공부했다. 엄청나게 두꺼운 책을 보고 걱정이 앞섰지만 두꺼운 책을 세 부분으로 나누어 가장 기본이 되는 첫 번째 부분을 반복 학습 하였다. 처음에는 어떤 명령어인지도 모르고 OllyDbg의 사용이 너무나 어려웠지만 점점 활용에 능숙해 지면서 리버싱이 재미있어졌다. 프로그램의 결과나 중간 부분을 내가 직접 조작하고 이끌어 낼 수 있는 것이 리버싱의 가장 큰 매력으로 다가왔다. 아직 기초적인 것들을 배우고 계속 복습하고 있지만 더욱 열심히 공부하여 CTF에서 리버싱 문제를 푸는 것이 목표이다.
6. CCE 참가
외부 연구회에서 만난 친구들과 팀을 이뤄 2017년 10월에 개최된 CCE에 참가하였다. 경험을 쌓는 차원에서 참가했는데 보통 CTF에서 나오는 문제와 유형이 많이 달라서 신기했다. CCE는 설정된 환경, 프로그램이 있으면 리얼 월드(현실세계)에서 분석을 하고 공격을 하는 것을 시뮬레이션 하면서 문제를 해결해 나가는 방식이어서 해킹을 하는 기술보다 리버싱에 대한 전반적인 기초와 개념의 이해가 중요한 것 같다고 느꼈다. 아직 경험과 실력이 부족하여 본선에 진출하지는 못했지만 내년에 다시 참가하여 본선에 진출하고 싶다.
7. Anti-Cheat 연구
1학년 학기 초부터 관심이 있었던 Anti-Cheat 연구를 시작하게 되었다. Anti-Cheat는 게임을 Cheating하는 행위를 역으로 공격하여 보안을 강화하는 기술이다. Cheatengine을 사용하여 체력, 총알 수, 위치, 시점등을 관리하는 메모리 주소를 찾아내서 코드를 조작했다. 지금은 메모리를 조작하는 정도의 실력이지만 계속 연구하여 직접 게임 핵을 만들어보고 이 경험을 기반으로 게임 핵을 방지하고 공격하는 Anti-Cheat 프로그램을 개발하고싶다.
8. 영어점수 up!!
원래 영어 점수가 70점 대였는데 열심히 공부했더니 2학기 중간부터 오르기 시작해서 기말에 드디어 96.3점이 되었습니다~~(빠ㅏ빠밤)
내년에는 영어 점수 유지하면서 수학도 올려야지ㅎㅅㅎ
동아리 활동 소감:
선린인터넷고등학교에 입학하고 나서 처음으로 시작한 동아리 활동이어서 어떤 수업을 하고, 프로젝트를 준비할지 많은 기대가 되었다. 프로그래밍과 해킹의 기초가 되는 C언어를 1학기 동안 공부하고 2학기부터는 자신이 공부하고 싶은 분야를 골라 선배들의 도움을 받으며 공부했다. 그 과정에서 개인프로젝트와 팀 프로젝트를 준비했는데 난생 처음 해보았던 프로젝트에서 많은 것들을 배웠다. 정해진 기한까지 과제를 제출하기위해 노력하고 어떤 주제로 프로그램을 만들지, 또한 완성도를 높이기 위해 많은 노력과 시간을 투자했다. 개인프로젝트 이름인 <너의 타자소리가 들려>는 파일입출력을 주로 하는 타자 검정 프로그램인데 프로젝트를 준비하면서 파일입출력을 다루는 방법을 완전히 익혔다. 팀 프로젝트는 소켓 통신을 활용한 <다함께 끝말잇기> 프로그램을 만들었는데 나는 기본적인 프로그램 로직과 클라이언트와 서버간 통신을 담당하는 소켓 프로그래밍을 담당했다. 소켓프로그래밍도 일반 C언어 프로그래밍과 크게 다르지 않아 신기하기도 했고 쓰레드의 사용법 또한 배워서 후에 많은 도움이 될것 같다. 팀 프로젝트를 하면서 팀원들과 각자 역할을 정하고 주어진 역할에 충실하면서 책임감있게 역할을 수행하였고 팀원들간에 의견을 조율하고 조합하는 방법도 배웠다. 2학년이 되면서 나도 내가 관심있는 게임 해킹 분야를 더 공부하면서 프로젝트를 진행할 예정인데 1학년때 동아리에서 경험한 많은 경험들이 좋은 참고가 될 것 같다.
나름대로 열심히 산 2018년!!(?)
'@C언어 : Layer7' 카테고리의 다른 글
PLT,GOT와 동적 라이브러리 (0) | 2018.10.23 |
---|---|
HackerSchool FTZ 풀이 (0) | 2018.06.15 |
Git 사용 보고서 (1) | 2018.06.08 |
너의 타자소리가 들려 (0) | 2018.05.23 |
구조체 예제 (0) | 2018.05.15 |