[일상스케치] 21세기 게임 보안 프로그래머의 변천사

세상이 MS와 MS가 아닌 것들로 양분되던 시기에 개발을 시작했던 나는 참 편했다. MS가 워낙 독점적이었기에 MS가 아닌 것들은 사실 거들떠 볼 필요도 없던 시절이었다. 단지 MS것 내에서 이거냐 저거냐에 따라 차이가 있을 뿐. 그렇게 20년의 세월이 지난 요즘은 MS가 너무 초라해졌고 개발자는 넘나 피곤해졌다. 재미로 정리해보는 시대별 변천사…​

2002

windows 95/98만 없으면 세상 편해질 것 같았던 시절, VxD는 인간이 코딩하라고 만든 것일까?

IsWindows9x()

2008

windows 2000에는 뭐가 이렇게 부족한게 많은 건지. 2000만 제거할 수 있다면 제품의 일관성을 유지하기가 한결 편할 것 같았던 시절.

IsWindows2k()
IsWindows9x()

2015

어느덧 XP는 구시대의 유물이 되었고, 지원 안되는 기능은 너무나 많고, 심지어 시스템 고유 기능들 조차도 지원 안되는 것들이 많았던 시절. 슬슬 컴파일러들도 XP를 손절각을 보던 시기.

IsWindowsXP()
IsWindows2k()

2016

64비트 운영체제가 일반화 되는 시기. 하지만 아직 대부분의 프로그램은 32비트. wow64처리가 안드로메다로 가는 시절. MS가 만든 에뮬레이팅 레이어를 벗어나기 위한 처절한 몸부림. 왜 이런게 생겼을까? 그냥 32/64만 있었으면 세상 편하겠구만…​

IsWow64()
IsWindowsXP()
IsWindows2k()

2017

누군가 wow64에 존재하는 천국의 문을 발견하면서 32비트 프로그램에서 64비트 코드를 직접 구동하는 것이 가능해진 시기. 진짜 64비트 시스템인지 판별하는 코드들이 삽입되고, 32비트 프로그램이 메모리 상에서 64비트 코드를 직접 실행하면서 32/64 포인터 변환 헬게이트가 열림.

IsNative64()

IsWow64()
IsWindowsXP()

2020

wow64는 양반이었다. arm이라뉘. chpe는 또 무엇. 심지어 이건 당연한 소리겠지만 천국의 문 따윈 없다. 대중화되지 않았지만 실리콘 맥으로 대중화의 물꼬가 트일거 같은 느낌적인 느낌. 인텔만 있을때가 꿀이었던 것인가??

IsWindowsOnArm()

IsNative64()
IsWow64()
IsWindowsXP()

2022

윈도우만 있던 시절은 세상 편했다. 온갖 윈도우 포트 레이어 wine, proton, 네이티브 리눅스, 맥, 안드로이드, iOS가 난무하는 세상이란. 2022년의 게임 보안 개발자는 월요일은 온갖 윈도우 인텔/암/32/64/wow64/xp, 화요일은 리눅스와 각종 포트 레이어 linux/proton/wine, 수요일은 안드로이드, 목요일은 iOS/macOS를 개발해야 하는 세상이 돼 버렸다. 여기에 더 무서운 건 윈도우는 인사이더 빌드로 수시로 내부 구조체와 함수 구조를 바꾸고, 안드로이드와 iOS는 빼먹지 않고 매년 대규모 업데이트를 단행한다는 것…​

IsWine()
IsProton()
IsMacOS()
IsLinux()
IsAndroid()
IsiOS()

IsWindowsOnArm()
IsNative64()
IsWow64()
IsWindowsXP()

금요일은? 놀 순 없지. 어서와 LLVM은 처음이지…​ Xcode가 이렇게 자주 업데이트 되는 줄 몰랐어? LLVM 애플 버전은 업스트림에 반영하지 않는 거도 몰랐어? 그럼 지금부터 LLVM 지옥문을 맛보도록 하자.

IsTripleAndroid()
IsTripleiOS()
IsTripleMacOS()

주말은? 새나라의 게임 보안 프로그래머라면 콘솔 개발해야지…​

IsXbox()
IsPS()
IsNSW()

20년간 우리가 버릴 수 있었던 if문은 IsWindows9x와 IsWindows2k 단 두 개 밖에 없었다. 새로 추가된 if문들을 보면 눈물이…​

그럼에도 긍정적으로 바라보자면 우리에겐 github, slack, aws가 생겼다는거…​