Top Coder RAW novel - Chapter (27)
탑 코더-27화(27/303)
# 27
잡아야 한다.
────────────────서현석.
바나나 톡 내에서 그의 이름을 모르는 사람은 없었다. 단지 임원이기 때문은 아니었다.
시대를 꽤 뚫는 통찰.
그에 못지않은 기술력.
뿐만 아니라 한국인 최초로 컴퓨터 과학 분야의 노벨상이라 불리는 에니악 상을 수상한 걸로 유명했다. 그런 사람이 겨우 삼 천 만 원짜리 솔루션 납품 계약을 위한 자리에 앉아 전면에 설치된 스크린을 보고 있었다.
“이게 바나나 후킹 앱을 디 컴파일 한 결과란 말입니까?”
“네. 확실히 여러 암호 알고리즘이 뒤섞여 있어 추적이 쉽지 않았습니다. 그러나 결국 대칭 키를 찾아냈고, 디 컴파일을 해서 내부 코드를 확인 할 수 있었습니다.”
서현석이 화면에 나타난 코드를 보며 미간을 찡긋 거렸다.
RouterMessageCatch.java
BananaHooking.java
BananaMessageParsing.java
“핵심은 이 세 가지 입니다. 제가 추측할 때는 RouterMessageCatch에서 공유기를 해킹합니다. BananaHooking 클래스에서 해킹한 공유기의 내용을 가져와 세 번째 파일에서 실제 메시지를 파싱 하는 것으로 추측 됩니다.”
직원이 실제 파일을 클릭해, 파일에 쓰여 있는 코드를 화면에 띄웠다.
“실제 코드를 보시면 관련 내용들을 보실 수 있습니다. 비록 100% 디 컴파일이 되지 않아 완벽하게 복구 하지 못했지만 일주일 정도의 시간만 더 있다면 충분히 해낼 수 있습니다.”
“결국 우리가 납품 받기로 한 난독화 솔루션도 완벽하지는 않다는 말이군요.”
“네. 아직 웹 관련 솔루션은 살펴보지 않았지만, 앱과 큰 차이가 없다면 실패한 도입 사례가 될 수 있습니다. 시내 소프트에서 제시한 내용을 보면 앱을 업데이트 할 때 마다 비용을 지불해야 한다고 되어 있습니다. 비용은 앱 하나당 200만원. 저희가 운용하는 앱이 20개 정도 되는데 할인을 적용받아 삼천만원 입니다.”
“무슨 말씀인지 잘 알았습니다. 회의 때 관련 내용을 다시 한 번 발표해 주세요. 업체에서도 이미 알고 있는 내용일 수도 있으니까.”
“그럴 리야 없겠지만. 알겠습니다. 한 번 말해 보겠습니다.”
그때 문이 살짝 열리며 직원 한 명이 쑥 머리를 내밀었다.
“시내 소프트 분들 도착하셨습니다.”
서현석이 고개를 끄덕이자, 문이 완전히 열리며 사람들이 들어왔다.
잠시 간의 사담이 오가고.
바로 일 이야기가 시작되었다.
방금 전 서현석에게 보고를 하던 직원인 조민수가 입을 열었다.
“안녕하십니까. 보안 팀 조민수 입니다. 이번 계약 관련하여 먼저 말씀 드릴 사항이 있어 이렇게 자리를 마련하게 되었습니다. 내용은 다름이 아니고, 솔루션 샘플 앱으로 보여 주신 바나나후킹 앱. 그걸 디 컴파일 하는 데 성공했습니다.”
순간 황호근의 눈동자가 흔들렸다. 최기훈은 시선을 돌려 승호를 보았다. 그러나 승호의 표정에는 일말의 변화도 없었다.
‘태연하다?’
바나나 톡 취약점을 알려주고, 1억을 받았다.
이번 자리는 코드 난독화 솔루션 계약을 논의 하는 자리.
그게 무산 될 위기 임에도 승호는 태연하기만 했다.
‘디 컴파일 됐다는 건 솔루션이 무용지물이라는 뜻인데. 그럼에도 태연하다는 건 아무런 문제가 없다는 뜻인가.’
조민수를 주시하던 승호가 입을 열었다.
“그렇군요. 그 결과물을 저희도 한 번 볼 수 있을까요.”
“그래서 간략하게 ppt를 준비 했습니다.”
직원이 화면에 ppt를 하나 열었다. 첫 번째 페이지는 기존 앱 코드 난독화 솔루션과의 비교 장표였다.
“그간 솔루션 도입을 위한 비교 검토를 진행해 보았습니다. 자바 스크립트 난독화의 경우에는 비교할 만한 솔루션이 없었습니다. 엔드로이드 코드의 경우 디 가드의 제품을 비교대상으로 삼았습니다.”
직원이 포인터로 화면의 한 부분을 가리켰다.
“디 가드는 앱 당 150만원. 시내 소프트는 200만원. 일단 비용부터 50만원이나 차이가 납니다. 그렇다면 그 가격만큼의 가치가 있느냐. 다음.”
승호가 흥미로운 표정으로 그 모습을 지켜보았다.
“저희 보안 팀에서 분석한 결과 디 가드에서 출시한 난독화 솔루션의 경우에는 대칭키 암호알고리즘이 사용되었습니다. 그리고 시내 소프트의 경우도 마찬가지였습니다. 이미 바나나 톡 자체적으로 가지고 있는 난독 화 모듈과 큰 차이를 느끼기 힘들었습니다. 다음.”
다음 화면에는 샘플 코드가 나타났다.
“어렵게 그 키를 찾아내 지난 번 보내주신 바나나 후킹 앱을 리버싱한 결과 입니다. 시간이 좀 걸리긴 했지만 바나나 톡의 기술력으로 결국 찾아 낼 수 있었습니다.”
말투에는 자부심이 가득했다. 화면에서 시선을 돌린 조민수가 승호를 바라보며 결론을 내렸다.
“이 점이 보완되지 않으면 솔루션 도입이 어려울 것 같습니다. 결국 리버싱 되는 난독화 솔루션을 앱 당 200만원이나 주고 구매 할 수는 없으니까요. 추가로 구매를 진행하려고 했던 웹 난독화 솔루션도 진행을 멈춰야 할 것 같습니다.”
황호근의 눈동자가 사정없이 떨렸다.
‘쩝, 회사에 여유가 생기긴 했지만 계약 하나하나가 아쉬운 상황인데······.’
황호근이 걱정스런 눈길로 최기훈을 보았다. 최기훈이 괜찮다는 뜻으로 고개를 끄덕였다.
‘어제 보셨잖아요.’
둘은 이미 눈빛만으로 대화가 통하는 사이.
최기훈의 말을 알아들은 황호근이 다시 눈빛을 보냈다.
‘그래도······.’
‘승호 믿어보세요.’
황호근이 고개를 끄덕였다. 무언의 대화를 나눈 둘이 승호를 보았다. 승호는 여전히 화면을 보고 있었다. 서현석이 승호를 보며 말했다.
“하시고 싶은 말씀이 있다면 편하게 하셔도 됩니다.”
그제야 승호가 입을 열었다.
“거기까지 찾아내는 것도 쉽지 않을 거라 생각 했는데···. 확실히 바나나톡은 다르다는 생각이 듭니다. 먼저 한 가지 궁금한 점이 있는데 혹시 다시 컴파일은 해보셨나요?”
“네? 그게 무슨 말도 안 되는 소리를··· 아무리 리버스를 완벽하게 진행 했다고 해도 다시 컴파일을 진행할 수 는 없습니다.”
디 컴파일과 컴파일.
깨진 유리를 아무리 잘 이어 붙인다고 해도, 그 전과 완벽하게 같을 수 없다. 디 컴파일과 컴파일의 과정이 이와 같았다.
“아마 다시 컴파일을 하면 앱이 만들어 질 겁니다. 제가 그 키로 리버스 된 코드는 다시 컴파일 되도록 만들어 놨으니까요”
그러나 승호는 그 불가능한 과정이 가능하다 말하고 있었다. 주변의 반발은 당연한 것이었다.
“네? 제가 이해가 잘 안되는데. 디컴파일 된 코드를 다시 컴파일 되게 만들었다는 말입니까?”
지켜보던 서현석 이사도 고개를 저으며 말했다.
“이미 아시겠지만 리버싱이나 디 컴파일을 하면 코드는 어글리한 형태로 나옵니다. 그걸 다시 컴피일 되는 형태로 만들기란 거의 불가능에 가까운 일입니다.”
그러나 승호는 전혀 개의치 않았다.
“한 번 해보세요. 아마 될 겁니다.”
승호의 대답에 조민수의 표정이 붉게 물들었다. 지금 자신을 무시하고 있다는 생각마저 들었다. 자연스럽게 목소리가 높아졌다.
“그게 가능할 리가 없습니다.”
승호의 입 꼬리가 살짝 올라갔다.
“컴파일을 해보면 알게 되겠죠. 뭐, 채 10분도 안 걸릴 테니 지금 여기서 해보시겠어요?”
승호의 말대로 컴파일 과정이 큰 시간이 걸리는 일은 아니었다. 조민수는 바로 엔드로이드 스튜디오를 구동시켜 컴파일을 시작했다.
—BUILD Script run—
프로그램 빌드가 시작되고.
1초.
2초.
조민수는 시간이 흐릴수록 뭔가 자신이 뭔가 놓친 게 있다는 생각을 지울 수가 없었다. 자신만만해 보이는 시내 소프트 쪽 개발자 표정을 보니 더욱 강한 확신이 들었다. 그렇게 채 5분도 지나지 않아 빌드가 끝나고 apk 확장자로 이루어진 앱이 만들어졌다.
승호가 다시 입을 열었다.
“한번 설치해서 실행해 보시겠어요. 다만 꼭 테스트 폰에 설치하셔야 합니다.”
고개를 끄덕인 직원이 테스트 폰에 앱을 넣고 실행해 보았다.
순간.
삐이이이익.
삐이이이익.
삐이이이익.
고막을 찢는 비프 음이 회의실을 가득 메웠다. 이상현상에 놀란 사람들이 허둥지둥 거렸다. 승호가 그런 사람들을 보며 말했다.
“바로 이렇게 됩니다. 아마 제가 넣어 놓은 트릭 키를 찾아내신 것 같습니다. 그 키를 찾아 앱을 다시 컴파일 시키면 보시다 시피. 이런 결과가 나타나고요.”
의기양양하게 말을 하던 조민수의 표정이 썩어 들어갔다.
“아······.”
“어쩌다보니 제품 시연회가 되었네요. 보시다 시피 시내 소프트의 코드 난독화 솔루션은 지금까지 나온 제품들 중 가장 뛰어난 성능을 자랑합니다.”
황호근이 입을 떡 버린 채 승호를 보고 있었다. 최기훈이 툭 하고 옆구리를 쳤다.
“보셨죠?”
“저런 기능이 있다는 거 알고 있었냐?”
“저라고 알고 있었겠습니까. 중요한 건 이게 빙산의 일각이라는 사실입니다.”
“······.”
“엔드로이드 코드를 난독화 하는 게 쉬운 일은 아니라는 거 잘 아실 겁니다. 더구나 그걸 디 컴파일 한 코드를 다시 컴파일 한다? 승호 잡아야 합니다.
“······.”
“이제 충분히 느끼셨잖아요. 승호 실력.”
최기훈이 빠르게 말을 이었다.
“주주가 되면 회사의 수익을 공유하는 만큼 주인의식도 생길 겁니다. 뭘 그리 고민하십니까. 어차피 망해가던 회사인데.”
“마, 망해가기는. 자, 잘 될 거였어.”
“사장님이 말하셨잖아요. 회사 문 닫아야 할지도 모른다고.”
“그거야······.”
순간 승호가 입을 열었고, 둘은 입을 닫았다.
“그 중 한 가지 장치가 트릭 키를 통해 디 컴파일 한 코드를 다시 컴파일 했을 때 비프 음이 울리도록 한 것입니다. 이건 각 회사의 취향에 맞게 경고 문구나, 다른 알림으로 제공할 수도 있으니 필요하면 말씀주세요.”
승호의 설명에 회의실이 조용해졌다. 발표를 진행하던 조민수가 푹 고개를 숙였다.
“그리고 실제 코드를 볼 수 있는 키는 인더스 클라우드 서비스에서 관리되고 있습니다. 인더스의 보안 기술이야 워낙 정평이 나있으니 탈취될 염려는 말할 것도 없고요.”
최기훈이 다시 황호근 쪽으로 몸을 기울이며 소곤거렸다.
“선진에 이어 바나나톡 사람들 까지 조용해진 거 보셨죠? 20%가 아니라 30% 입니다.”
황호근이 미미하지만 고개를 끄덕였다.