Top Coder RAW novel - Chapter (33)
탑 코더-33화(33/303)
# 33
더 게이트
────────────────황시내가 걱정을 가득 담아 물었다.
“부장님, 괜찮으세요?”
승호의 모습은 걱정을 자아내기 충분했다.
눈꺼풀은 길게 늘어져 있었고, 두 눈은 붉게 충혈 되어 있었다. 새벽 4시가 넘어가는 시각.
쌩쌩하다면 거짓말이리라.
“아직은 버틸 만합니다.”
“잠깐만 눈 좀 붙이세요. 제가 어떻게든 해볼게요.”
“아직은 괜찮습니다. 이제 몇 시간만 버티면 되니까요.”
그러자 함께 있던 원지훈이 거들었다.
“부장님 너무 무리하시는 것 같습니다. 저희도 아주 조금은 감 잡았으니까. 한 30분 만이라도 눈 좀 붙이세요. 대회 시작 하고 부터 전혀 쉬지 않으셨잖아요.”
밥은 햄버거로 때웠다. 생리현상을 줄이기 위해 물은 거의 마시지 않았다. 그렇게 한시도 컴퓨터 앞에서 떠나지 않았다. 승호는 지친 표정으로 고개를 저었다.
“진짜 괜찮아요. 이제 6시간 뒤면 끝인데. 이왕 여기까지 온 거 우승해야죠.
승호는 탁자위에 있던 레드불을 한 캔 더 원샷 했다.
벌써 세 캔 째.
황시내가 걱정 가득한 목소리로 말했다.
“그러다 정말 탈나요. 저는 여기까지 온 것만 해도 만족해요.”
그러자 다른 팀원들도 한 마디씩 거들었다.
“저도 좋은 경험이었습니다.”
“부장님 덕분에 많이 배웠습니다. 그걸로 족해요.”
그러나 정작 승호는 고개를 저었다.
“저는 아닙니다. 우승하기 위해 여기까지 온 겁니다.”
단호한 그 말에 팀원들이 입을 닫았다.
“아직 만족하지 못했어요.”
승호는 다시 모니터에 집중했다.
타닥.
타다다닥.
이내 키보드를 두드리며 황시내에게 말했다.
“시내씨는 제가 적용한 패치에 올라오는 로그 한 번 확인해 보세요. 거기에 Bxx RPC Ready 로그 올라오면 바로 저한테 알려주세요.”
황시내가 한숨을 내쉬며 키보드 위에 손을 얹었다. 승호는 다른 팀원들에게도 지시했다.
“민성씨는 각 라운드 별로 설치된 프로세스 로그 모니터링 부탁해요.”
“알겠습니다.”
“지훈씨는 지금처럼 서버 시스템 로그 모니터링 하면서 이상패턴 생기면 제게 말해주세요.”
“알겠습니다.”
“아직 시간이 있어요. 할 수 있습니다. 그러니 포기 하지 말아요. 제가 있는 이상. 패배는 없습니다.”
피곤에 잠긴 목소리.
그러나 왠지 모르게 믿고 따르게 만드는 힘이 담겨 있었다. 황시내도, 원지훈 대리도 두 눈을 부릅뜨고 모니터링에 열중했다. 승호의 포기할 줄 모르는 저 집념이.
피곤한 몸을 움직이게 만들었다.
***
아침 9시.
대회 종료 1시간 전.
에이든이 성을 내며 자리에서 일어났다.
“뭘 어떻게 패치 한 거야!”
어째서 인지 4라운드에서 부터 제로원 팀 서버에서 파일을 탈취 할 수가 없었다. 그런 에이든을 헤나가 위로했다.
“어차피 우승 확정이잖아. 그걸로 만족하자고.”
“이건 나와 그의 대결이야. 남자들의 승부라고.”
헤나가 눈을 감고, 고개를 저었다. 에이든이 그런 헤나를 보며 물었다.
“제로원이 올린 패치 분석은?”
“하다 말았다. 어차피 이제 지키기만 하면 되니까.”
“그거 어딨어. 내가 한 번 봐야겠어.”
“패치는 서버에서 밖에 다운로드 안 된다는 것도 잊었냐? 당연히 서버에 있지.”
자신의 책상 주변을 서성거리던 에이든이 다시 의자에 앉았다.
“패치, 패치. 거기에 답이 있을 거야.”
에이든은 ssh로 자신의 서버에 접속해 패치 파일을 찾았다. 이내 고개를 갸웃거리며 중얼 거렸다.
“패치 파일 용량이 5메가나 된다고? 도대체 코딩을 얼마나 한 거야.”
헤나가 고개를 돌리며 말했다.
“디컴파일해도 코드가 제대로 안보이더라. 난독화를 지독하게 해놨어.”
“IDA로 디스어셈블리 한건?”
“같은 디렉토리 안에 내가 넣어 놨다.”
에이든이 헤나가 가리킨 파일을 열었다.
MOV A01X01 11211
POP ETX
JMP 1A22
익숙한 어셈블리어가 모니터에 나타났다.
어샘블리. 소위 말하는 기계어.
대부분의 프로그래머들이 사용하는 언어는 추상화 되어 있어 좀 더 해석이 간단하다. 뿐만 아니라 한 줄의 코딩으로 수십 가지의 일을 수행 할 수 있었다.
그러나 어셈블리어는 아니다.
한 줄이 단 한 가지 명령을 수행한다.
JMP 는 해당 주소로 이동해 그곳의 명령어를 실행해라.
MOV 는 B의 값을 A에 대입해라.
그렇게 한 줄 단위로 명령어를 해석해 해당 프로그램의 목적을 파악해야 하는 것이다.
이건 마치 널 부러져 있는 레고 블럭을 설계도면도 없이 원상태로 복구하는 일과 같았다.
블럭의 개수가 수십 개 정도면 가능한 일이다.
그러나 용량만 5메가바이트.
이는 블록의 개수가 수천 개임을 뜻하는 것과 마찬 가지였다.
에이든은 수천 개의 레고 블럭을 머릿속으로 조합해 가며 프로그램의 내부를 파악했다.
“이 주소는 4바이트를 할당 해놔서 6바이트의 데이터는 대입 할 수가 없는데 왜 이런 식으로··· 이건 마치 일부러 예외사항을 만든 것 같잖아.”
의문은 그게 끝이 아니었다.
“이건 네트워크 패킷을 체크하는 로직인것 같은데··· 이걸 이용해서 이상패킷이 오면 deny 시키는 건가. 굳이 이렇게 까지 할 필요는 없을 것 같은데.”
그렇게 하나씩 해석해 나가던 에이든의 안색이 딱딱하게 굳어졌다.
“헤나, 우리 패치에 심어놓은 백도어 동작 방식이 어떻게 된다고 했지?”
“커널쪽 건드려서 파일을 우리가 만들어놓은 사용자 파일 시스템쪽으로 마운트 시킨 다음에 빼내오지. 그건 왜.”
에이든이 슬쩍 시계를 확인해 보았다.
오전 9시 55분.
“그거 지금 바로 내려.”
“으, 응?”
“당장 내리라고.”
“아니 이해가 되게 말을 해야.”
파방!
터지는 효과음에 헤나가 시선을 돌렸다.
파방!
다시 터지는 효과음.
그런데.
효과음이 터지는 주기가 너무 짧았다.
파방.
팡.팡.팡.팡.팡.팡아아아앙!
제로원 +1
제로원 +1
제로원 +1
제로원 +1
······.
헤나가 당황한 표정으로 스크린을 보고 있는 사이.
에이든은 서버에 돌고 있는 패치 프로세스들을 전부 셧 다운 시켜 버렸다.
“damn it!!”
욕을 해보았지만 분이 풀리지 않았다.
화려한 불꽃 쇼를 보는 것 같았다. 스크린에서 폭죽이 터질 때마다 제로원의 점수가 올라갔다.
1.
2.
3.
4.
5.
6.
7.
어떻게?
어떻게 이럴 수 가 있을까.
황시내는 두 눈을 비벼 보았다. 점수는 여전히 멈추지 않고 올라갔다.
“지, 지금 꿈꾸고 있는 거 아니죠?”
승호가 고개를 끄덕였다.
“아니야. 이건 꿈일 거야. 제 볼 한번 꼬집어 봐요.”
승호가 손가락으로 황시내의 볼을 꼬집었다. 말캉한 느낌이 그리 싫지 않았다.
“윽!”
황시내가 다시 스크린을 보았다.
11.
12.
13.
여전히 점수는 멈추지 않고 올라갔다.
“말도 안 되······.”
이제 시간은 2분도 남지 않았다. 단상으로 올라와 대회 종료 카운트다운을 하려던 사회자도 당황해 화면에서 시선을 떼지 못했다. 그렇게 1분이 더 지나가고 나서야 사회자가 입을 열었다.
“조, 종료 1분 전입니다······.”
사회자의 말은 폭죽소리에 묻혀 제대로 들리지 조차 않았다. 장내에 있던 사람들의 시선이 스크린 쪽을 향했다.
09:59:34.
09:59:35.
09:59:36.
일 초.
일 초.
시간이 흐를수록 제로원 팀원들의 얼굴에 희열이 번져갔다.
현재 스코어 제로원 +21.
앞으로 30초 이내에 이변이 생기지 않는다면 1등 확정이었다. 황시내가 조마조마한 심정으로 스크린을 보았다. 시간은 계속 흘렀고, 결국 대회 종료 시간인 10시가 되었다. 그때 까지도 제로원은 전체 1위를 지키고 있었다.
***
헤나가 황망히 스크린을 보며 중얼거렸다.
“뭐야 이거. 방금 무슨 일이 벌어진 거야. 어?”
에이든이 머리를 감싸 쥐며 괴로워했다.
“젠장, 졌어. 졌다고!”
헤나의 시선이 천천히 제로원 팀을 향했다. 서로 얼싸 안으며 축제 분위기를 연출하고 있었다. 헤나가 에이든을 보며 말했다.
“혹시 그 패치. 그것 때문이야?
에이든이 격하게 고개를 끄덕였다.
“백도어의 백도어. 저 놈이 만든 패치에 우리가 만들어 놓은 백도어로 침입하는 백도어가 들어 있었어.
“그러면 다른 팀들 파일이 털린 건?”
“다름 팀들도 우리와 비슷한 생각을 한 거지. 백도어를 만들어서 상대 서버 파일을 탈취 한다.”
“그러니까 각 팀 별 백도어의 백도어를 만들어서 패치에 넣어 놨다. 그러다 보니 코드 양이 많아졌고, 패치의 용량이 커졌다?”
대부분의 팀들이 생산한 패치하나의 용량이 대략 100kb 였다. 승호가 만든 건 5mb 대략 50배가 넘는 양이었다.
“패치 용량은 이 놈이 난독 화를 지독하게 해놓은 영향도 있지. 한 줄의 코드도 난독화를 거치며 여러 줄로 늘어나니까.”
말을 하던 에이든이 깊은 한 숨을 내쉬며 자리에서 일어났다.
“휴우··· 젠장. 완전히 졌어.”
그러고는 터벅터벅 승호가 있는 곳으로 걸음을 옮겼다.
제로원 팀 앞.
정확히는 승호 앞에 선 에이든이 입술을 꽉 깨물고 올라오는 분노를 씹어 삼키며 말했다.
“···이번에도 내가졌다.”
승호가 전광판을 보았다.
1위. 제로원 21.
2위. FFF 9.
자신이 아니었다면 1등을 했을 팀.
승호가 손을 내밀며 말했다.
“FFF팀도 꽤 강적이었습니다.”
“날 인정해 주는 거냐?”
“물론입니다.”
순간 뒤에서 적갈색 머리의 미녀가 고개를 불쑥 내밀었다.
“당신이 정말 제로원? 코드 제로에서 최단 시간에 1등급을 달성한 그 제로원이 맞나요?”
에이든이 고개도 돌리지 않은 채 말했다.
“맞 다니까.”
승호가 고개를 끄덕였다.
“최단 시간인지는 모르겠지만, 1등급을 달성한 건 맞습니다.”
헤나가 입술을 동그랗게 오므렸다. 밤샘의 피로도 그녀를 비켜 간 것처럼 보였다. 피부는 여전히 빛났고, 두 눈에는 생기가 가득했다.
“거기에 더 게이트 우승까지 거머쥐었군요.”
승호가 어깨를 으쓱거리며 말했다.
“네, 뭐. 어쩌다 보니. 그런데 그쪽은 누구······.”
“헤나 로페즈. 이 친구는 에이든 베이커.”
승호가 손을 내밀었다.
“반습니다. 미스 로페즈.”
“그냥 헤나라고 불러요.”
에이든이 손을 내밀며 말했다.
“나도 에이든이라 부르면 된다.”
헤나가 에이든을 가리키며 말했다.
“이 친구가 포트에서 코드 제로를 담당하고 있어요. 그래서 제로원에 관심이 많았던 거고.”
“아······.”
조용히 지켜보던 황시내가 불쑥 둘 사이의 대화에 끼어들었다.
“사회자가 참가자 분들 전원 단상으로 올라와 오라는데요.”
고개를 돌린 승호가 대답을 하고.
“아. 네.”
다시 에이든을 보며 영어로 대답했다.
“시상식이 시작한답니다. 단상으로 올라오라네요.”
유창하지는 않지만. 충분히 소통이 가능했다. 시내소프트 직원 원지훈이 혼잣말을 중얼 거렸다.
“강 부장님이 원래 저렇게 영어를 잘했었나?”
“그러게. 나도 잘 모르지 들어 본적이 없으니······.”
“근데 좀 멋있다. 영어로 대화하는 거 보니까.”
“더 게이트 1등은 또 어떻고. 난 진짜 상상도 못했다.”
“하긴 부장님이 혼자 우리 멱살 끌고, 하드캐리 한 거나 마찬가지니까.”
“혹시 상금도 나눠주실까······.”
“너 같으면 주겠냐?”
“쩝······.”
“무임승차 한 거나 마찬가진데. 염치가 있어야지.”
“올라가죠.”
“아, 넵”
둘의 대화는 황시내의 제지로 멈추었다. 황시내의 시선은 승호의 등에서 떠나지 않았다. 헤나, 에이든이라는 사람들과 막힘없이 대화를 나누는 모습.
어쩔 수 없이 생기는 거리감에 입술을 꽉 깨물었다.