물리 버전 오버플로 버그 ㅋㅋㅋㅋ
- 오버플로란?
사람들의 숫자 개념에는 딱히 한계가 없습니다. 소수점도 무한대도 다른 점 없는 숫자일 뿐이죠.
하지만 컴퓨터가 숫자를 다룰 때는 반드시 크기나 용도에 맞는 메모리에 할당해야 합니다.
예를 들어, 1비트만 사용하는 bool, 8비트의 byte, 16비트 short, 32비트의 int, 64비트의 long 등 다양한 숫자 타입이 존재합니다.
소수점과 같은 실수 표현을 위해서는 전용 데이터형으로 32비트의 float, 64비트의 double 등, 넣을 숫자에 맞는 데이터 타입을 써야만 하죠.
(심지어 사칙연산도 같은 메모리 타입끼리만 할 수 있습니다.)
오버플로 = 넘치다는, 이러한 “제한된 메모리”에서 시작됩니다.
정해진 메모리의 한계값 이상의 숫자를 담으려 하면, 메모리가 넘치면서(오버플로), 숫자가 초기값 0이 되거나 최소값(-max) 또는 0이 되어 버리는 증상입니다.
밀레니엄 버그라고 불리던 사건 역시, 이 “오버플로” 때문에 모든 전자기기들이 망가져 버릴 것이다. 라는 접근에서 시작된 발상이었습니다.
초기의 컴퓨터는 비용 문제로 인해, 연도 처리를 단 2자리로만 할당했거든요.
- 2 진법에서의 이해
오버플로우를 더욱 깊이, 그리고 쉽게 이해하기 위해 4자리의 2진법 숫자를 사용해 보죠.
이진법의 0000은 십진법의 0이고, 이진법 4자리로 표현할 수 있는 가장 높은 숫자는 1111은 십진법으로 15 입니다.
이 1111에 0001을 더하는 순간, 첫자리는 당연히 0이되고 숫자를 다음 자리로 올려줍니다. 이걸 반복하면…
1 0000 이 되어야 하지만, 5번째 자리의 1을 저장할 공간이 없습니다. 메모리에는 0000이 남게 되겠죠.
결국 15에 1을 더하니 0이 되는 “오버플로”를 보실 수 있습니다.
이 오버플로를 음수로 확장하는 경우, 보수 개념과 컴퓨터 2진 연산에 대한 설명이 필요한데…
이건 컴공 수업시간에 1시간 잡고 설명하는 이론이라 생략하는게 더 좋겠군요!
0111 (7)에 0001 (1)을 더하면 1000 (-8)이 되는, “최대값을 넘는 값을 저장하니 최소값이 되었다.” 이 개념의 연장선으로 보시면 문제 없습니다.
4자리 계수기에서 9999 다음에 0000이 나오는 것을 10진법에서 볼 수 있는 오버플로라고도 할 수 있죠!
- 디지털과 관련되면 오버플로 버그는 거의 필연적
아무리 똑똑한 개발자들이라도, 프로그램을 사용하는 사람들의 사용 패턴을 완벽하게 예측할 수 없습니다.
그렇기에 기상천외한 방식으로 프로그램을 이용하는 사람들에 의해, 거의 모든 컴퓨터 프로그램은 오버플로 버그에 노출되어 있다고 보실 수도 있죠.
특히 일반인들도 프로그래밍의 결과를 가장 직접적으로 체감할 수 있는 게임이라는 매체의 특성상.
이 오버플로 버그는 온갓 게임에서 재밌고도 당황스러운 버그를 일으켜왔습니다.
게임 업계에서 벌어진 재밌는 오버플로 사건들을 알아 봅시다!
> 순순히 금을 넘기면 유혈사태는 일어나지 않을 것입니다. 문명 시리즈 간디의 폭력성
가장 유명한 오버플로 사건은 “핵무기를 사랑하는 간디” 사건입니다.
문명에 등장하는 인도 문명의 지도자 간디는 평화 선호도에 최대값이 설정되어 있는 극한의 비(非)폭력주의자 AI이지만,
거기에 추가로 평화를 올려주는 민주주의와 같은 연구를 진항하면, 평화 선호도 값에 오버플로우가 발생해서, 극도의 Be폭력주의자가 되어 호전성을 보여주게 됩니다.
거기에 과학 중시의 인도 문명 특징이 결합하면, “과학적 Be 폭력주의 = 핵무기 선호”의 결과를 만들어 내게 되었죠.
이후 시리즈에선 고칠 수도 있었지만, 팬들이 너무 좋아하는 요소라서 계속 남아 있다고 합니다.
순순히 금을 넘기면 유혈사태는 일어나지 않을 것입니다.
이 내용은 게임 속 오버플로 버그의 대표적인 알려졌지만,
이후 개발자 인터뷰에서 오버플로 버그가 아닌 처음부터 의도된 설정이었음이 밝혀졌습니다.
그러나 게이머들이 너무 재밌는 사례로 받아들여서, 이후 시리즈에서도 지속적으로 성향을 유지하는 것 뿐이라고 합니다.
> 현실의 복사판, 부자를 빛쟁이로 만든 쿠키런 오버플로
게임에서 만나기 가장 쉬운 버그입니다. 게임이 오래되면 화폐 인플레가 발생하며, 개발자들이 예측한 값 이상의 재화를 얻게 되죠.
이는 매우 자주 오버플로 버그를 목격하게 만들어 줍니다.
대표적으로 쿠키런에서는 2,147,483,647 코인을 넘기면 오버플로가 일어나 -21억 코인이 되는 현상이 발생하였습니다.
점수 쪽에서도 주로 이와 같은 32비트 숫자 체계를 사용하다보니, 21억점을 넘어선 점수가 갑자기 0으로 리셋되거나, -21억 점으로 감점되는 버그가 자주 발생했습니다.
워낙에 흔하게 발생하다보니, 이제는 64비트 기반 숫자 체계로 변경되었다고 하네요!
이런 화폐 인플레나 파워 인플레에 의한 오버플로 버그가 정말 많습니다 ㅎㅎㅎㅎ

> 세계의 평화를 안겨준 메탈 기어 솔리드 V 더 팬텀 페인 “핵무기”
메기솔 5에는 강력한 “핵무기”가 존재했습니다. 핵무기를 보유하면 PVP에 엄청난 이득을 챙겨갈 수 있기 때문에 사람들은 게임의 메시지인 ‘반전’과는 다르게 엄청나게 핵무기를 찍어내고 있었죠.
그런데 반전이라는 메시지를 위해 “게임 내에 모든 핵무기가 제거되면 나오는 히든 엔딩”이 있는 게임이기도 했습니다.
그래서 다른 사람의 기지를 습격해서 핵무기를 제거하는 운동을 하는 조직까지 만들어 지기도 했습니다.
이들은 히든 엔딩과 반전의 메시지를 위해 엄청나게 노력하고 핵무기를 제거하기 위해 동분 서주 한 끝에…
히든 엔딩 발동!
그런데 실상은 조금 달랐습니다.
너무 많은 핵무기가 만들어져서, 글로벌 핵무기 통계 값이 오버플로되면서 0개를 찍어버린 것입니다.
즉, 핵무기 반대 운동보다도, 너무 많은 핵무기가 생산되어 세계의 평화 엔딩이 발생해 버린 것이었죠 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
모두가 핵을 가지면 모두가 가지지 않은 것과 같다. 1인 1핵의 평화 시대를 열어버린 메기솔 ㅋㅋㅋㅋㅋㅋ
> 빈곤은 우리의 힘! 하츠 오브 아이언 4 의 물자
하츠 오브 아이언 4에서는 지금까지의 넘치는 오버플로가 아닌 - 값의 한계치보다 더 낮은 값을 유도하여 오버 플로우를 발생시키는 버그(전술)이 존재합니다.
전쟁 도중 부족한 장비 생산 없이 군대만 계속 찍어내면, 군대는 계속 장비가 부족하다며 - 요청이 누적됩니다.
결국 이 - 값이 한계까지 누적되면 오버플로가 발생하여, 장비가 +2147483648개로 늘어나는 버그가 있는데, 이 값이 실제 적용이되어서 장비가 단번에 보급되는 치트입니다.
공업력이 부족하고 인력이 넘쳐나는 중국 같은 국가 플레이어들은, 멀티에서도 이런 버그성 플레이를 사용하기도 합니다.
일부에서는 최저값 이하에 빼기가 된다고 해서, 오버플로의 반대인 ‘언더플로’ 라고 말하기도 합니다만, 일반적으로 이와 같은 메모리 초과는 모두 오버플로라 말합니다.
-1.21M으로 크게 물자가 부족한데, 생산량이 오버플로되어버려 보유 물자는 최대치가 되어버린 장면
> 패배를 한 내가 세계 최강 - 오버워치
오버워치의 경쟁전 시즌 2에서는, 평점 1점에서 패배를 하면 - 오버플로가 발생하는 버그가 있었습니다.
0점이 되어야 하는 점수는, 가장 높은 5000점을 찍어버리며, 단번에 세계 1위로 만들어 주었죠.
단 1승 만으로 시즌 세계 1위 찍은 썰 푼다. ㅋㅋㅋㅋㅋ
> 죽음으로 최강자가 된다. LoL 비에고, 몰락한 왕 (버그의 왕)
롤 챔피언 중 버그가 가장 많기로 유명한 비에고 또한, 이 오버플로 버그를 3개나 발생시킨 것으로 유명합니다. (*물론 아래 버그는 전부 수정되었습니다.)
특정 캐릭터를 지배한 후, 지배 상태가 풀리명 오버플로가 발생하여 스킬 포인트가 255개가 되는 버그에, 여기에 랩업을 하면 오버플로가 발생해서
스킬 포인트가 0이되는 버그가 있었죠. 영구적으로 스킬 포인트 1개를 상실하게 됩니다.
암흑의 인장을 구매하고 2스택을 만든 뒤 죽으면, 인장 스텍이 감소하며 오버플로가 발생하게 됩니다.
인장의 스텍은 - 65534 (8비트 오버플로), 주문력은 -214743648 (32비트 오버플로)
문제는 공격할 때는 - 값이 빠지고 실제 대미지로 적용되니 무쌍을 찍을 수 있는 버그였습니다.
> 오락실 금기 조합 - 최강 아이템으로 최강 마법을 사용하니 D&D 미티어 스웜
많은 사람들의 오락실 추억을 장식하고 있는 “던전 앤 드래곤 섀도 오버 미스타라”
여기에서 가장 강력한 기술은 누가 뭐라고 해도, 마법스의 미티어 스웜 (메테오 스웜이라고도 합니다.) 입니다.
마법사가 두 팔을 펼져 주문을 외우면, 행성들이 떨어지며 주변이 불바다가 되는, 게임내 최강 마법이죠.
1p로 마법사를 플레이하면 더 강력한 데미지를 안겨주는데,
여기에 더 강력한 피해량을 위해서 마법 데미지를 올려주는 이어링과 스태프 오브 위저드리를 동시에 장착하면…
데미지가 평타 수준으로 떨어지는 기적을 볼 수 있습니다 ㄷㄷㄷ
데미지에 오버플로가 발생하는 것이죠.
그래서 1p로 위저드를 잡으면, 스태프 오브 위저드리는 2p 사용자에게 양보하는게 암묵적인 룰이었습니다.
> 도매 할인 챙겨드립니다! 마비노기의 돈 복사 사건
작년 말 (24년 12월), 마비노기에서도 오버플로 버그로 인해 한바탕 소동이 발생했습니다.
상점에서 구입할 수 있는 매우 비싼 아이템을 한번에 대량으로 구입할 경우, 도매가로 엄청나게 저렴하게 아이템을 구입할 수 있는 버그가 발생했습니다.
그렇게 구입한 물건을 상점에 그대로 되팔아도 큰 돈을 남길 수 있을 정도였기에, 이 작업을 몇번만 반복하면 돈이 돈을 찍어내는,
소위 “돈 복사 버그”가 터진 것입니다.
바로 비싼 아이템을 많이 구입하면서 “구매가격에 오버플로”가 발생한 것이었습니다. 발생하기 위한 조건 값이 43억 골드를 초과해야 발생하는 버그다 보니,
일반적인 플레이로는 발견하지 못할 버그이긴 했죠.
이후 마비노기의 부실한 대응 때문에 섭종 이야기가 나올 정도로 심각하게 확대되기도 했습니다.
> 힐러가 최강 딜러(배신자)가 된 사건, 프리코네 힐 오버플로
프린세스 커넥트 re:dive 의 힐러 역할을 담당하고 있는 콧코로에게서 발생한 버그입니다.
6성 한계 돌파 이후에는 전체 힐에 TP 부스팅, 행동속도 상승등으로, 안쓰면 이상한 최강 서포터로 자리잡고 있는 캐릭터 였는데요.
문제는 너무 강력했던 힐이었습니다.
21억을 넘기는 파티 힐을 사용하자, 오버플로가 발생하면서 아군에 -21억짜리 힐 = 데미지가 박히면서 아군을 전멸시켜 버렸죠!
프리코네처럼, 오래 운영한 모바일 게임에서 흔하게 보이는 파워 인플레이션으로 인해 힐러가 최강 딜러가 되는 버그입니다 ㅋㅋㅋㅋㅋㅋ
힐을 썼는데, 아군 전부가 뒤져버리는… 배신의 아이콘 캬루조차 당황할 마망의 배신 ㅋㅋㅋㅋ
마망이 그럴 줄은 몰랐어…
- 인구가 많아지니 교통 체증이 해소되었어요! 시티즈 스카이라인
이 오버플로 버그는 유니티 엔진의 한계와 관련이 있습니다.
당시 유니티 엔진으로 구현된 시티즈 스카이라인에는 오버플로 버그를 막이 위해, 최대로 할당할 수 있는 오브젝트 제한이 있었습니다.
UI 및 기본 도구들에 할당된 오브젝트를 제외하고는, 실제로 도시에 이용가능한 최대 오브젝트 갯수는 49,152개 였죠.
이건 건물, 차량, 사람 등 모든 오브젝트의 최대 출력 수에 해당했습니다. 하지만 건설 게임에는 건물만해도 5만개의 오브젝트는 부족했죠.
도시를 확장하며 건물을 지을 수록, 인구가 늘어날수록, 이 오브젝트 한계를 넘기 시작했습니다.
게임에서는 도시에 가장 중요한 건물에 우선순위가 있어, 건물이 모두 로딩되고, 차량, 사람이 로딩되게 설정되어 있었습니다.
이 때문에 건물이 너무 많아지면 사람과 차량이 점차 표시되지 않게 되었습니다.
초반에는 엄청난 차량으로 발생하던 교통 체증이었지만, 건물과 인구가 많아지니 오히려 차량이 사라져서 교통체증이 없어지는 마술이 발생하게 된 것입니다.
굳이 말하면 이건 오버플로라기보다는, 메모리 보존과 오버플로를 막기 위한 장치 때문에 발생하는 문제이긴 합니다 ㅎㅎ
심각한 교통 체증이 발생하나요? 그럼 혹시 건물이나 인구가 부족한 건 아닌지(?) 확인해 보세요 ㅋㅋㅋ
- 재밌지만 치명적인 오버플로 버그.
이외에도 게임에서는 정말 많은 웃기고도 슬픈 오버플로 버그가 발생해 왔습니다.
특히 수치 인플레가 되기 쉬운, 인게임 재화나, 데미지 같은 수치는 생각보다 쉽게 마주칠 수 있는 버그죠.
그래서 이런 오버플로 버그를 막기위한 버퍼 플로 기술이나 우회 프로그래밍 방법도 많이 만들어졌습니다.
참고로 조~경~나유타, 아승기, 무량대수까지 뻣어나가는 방치형 게임들은, 아예 숫자를 위한 전용 변수 타입을 만들기도 합니다.
주로 배열(Array) 타입을 응용한 방법을 애용하고 있습니다.
한편 우주 공학쪽에서는 큰 수치를 다루면서도, 작은 값 또한 큰 오차를 발생시킬 수 있기에,
더욱 특화된 전용 변수타입을 이용하는 공학용 프로그래밍 언어(Fortran, Ada)를 사용하기도 하죠.
비록 게임에서 발생하는 오버플로 버그의 대부분은 위와 같이 웃어 넘길 수 있는 하나의 에피소드이고, 수정할 수 있는 버그에 불과합니다.
(물론 섭종이야기가 나올 정도의 심각한 버그도 있었지만…)
하지만 오버플로 버그는 자체는 마냥 웃고 넘길 수 만은 없는 중대한 프로그래밍 문제입니다.
실제 산업 현장에서 발생하는 오버플로 버그는 치명적인 사고로 이어질 수 있죠.
유럽 우주국의 아리안 5 로켓의 첫 발사 때, 정상적으로 비행하던 로켓의 속도가 메모리 값을 초과하는 오버플로 때문에, 컴퓨터가 로켓을 자폭시켜버리는 일이 일어나기도 했습니다.
2014년 IT와 금융 업계에 닥쳤던 대재앙급 보안이슈인 ‘하트 블리드’ 사태 또한 이 오버플로 버그를 악용해 할당된 범위 밖에 메모리에 접근할 수 있었습니다.

아리아5 로켓의 자폭 : 너무 높은 수평속도 값이 오버플로우를 일으켰고, 컴퓨터는 해당 값이 비정상적이라고 판단해 자폭을 진행했습니다.
혹시 여러분들이 게임을 하면서 겪은 ‘오버플로’ 경험담이 있으신가요?
제가 하던 로그라이크 게임에서도, 특정 빌드 특화를 하면 너무나 강화된 데미지에 오버플로가 발생해 최약체로 변하는 마술을 당한적이 있습니다 ㅋㅋㅋ
참고로 세계 최초로 유튜브의 시청자 수 최대치를 세운 강남 스타일(2,147,483,647 조회수)은,
최고 기록을 기념하기 위해 일부러 오버플로가 발생한 것 같은 -21억 조회수를 보여주는 연출도 해주었다고 합니다. 현재 조회수는 64비트 데이터형을 택하고 있답니다.
마지막의 시티즈 버그는 신박하네요 ㄷ
시티즈에서 가장 어려운 부분이 교통 체증인데, 그래서 도시 키우기가 오히려 팁이 되기도 했습니다.
그런데 그 교통 체증을 해결하는 걸 좋아하는 사람들은 오히려 모드를 통해서 객체 제한을 해제해 더 큰 도시에서 더 큰 교통 체증을 해결하는 마조 플레이어 분들도 계셨습니다 ㅋㅋㅋ
0...
저울아 죽지마ㅠㅠ
저 저울은 정말로 탄성 한계를 넘어서 죽어버렸을지도 모르겠습니다 ㅋㅋㅋㅋ
강남 스타일이 21억 뷰였군요 ㄷㄷ
하츠 오브 아이언 보니까 2차 대전 종전 후 서독이 거의 봉쇄되다시피 하니까
미국이 공중으로 거의 무한 보급을 했던 일이 떠오르네요. 미국만이 가능했던 무한 보급 작전...
이번에도 배 터지게 잘 봤습니다. ㅎㅎ
강남스타일은 다시 봐도 놀라운 기록이네요 ㅋㅋㅋㅋ
미국은 진짜 '방장 사기맵'이라는 표현이 딱 맞는 것 같습니다. 넘사벽 보급 / 넘사벽 물량 / 넘사벽 자원까지...
그런데 배도 아니고 공중으로 무한 보급이라니 ㄷㄷ 진짜 미국만 가능한 작전이네요!
즐거운 주말 되세요!
러브 딜리버리도 돈 몇십 억 되면 마이너스 되더라고요 ㅋㅋㅋ
와, 럽딜에도 오버플로 버그가 있었군요? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
덕분에 재밌는 사실하나 알아갑니다!
모두 "그려진 힘" 한젓가락씩 한다면
더 이상 오버플로우 발생하지 않을겁니다!
앗 9,999 최대값 고정이라니 ㅋㅋㅋㅋ
이건 절대 오버플로를 발생시키지 않겠다는 누군가의 의지가 느껴지는 물건이군요 ㅋㅋㅋㅋ