Reverse engineered NFS Most Wanted, Underground 2 and Carbon (also MAD) servers.
NFS Most Wanted·Underground 2·Carbon 온라인 서버를 리버스 엔지니어링한 프로젝트 — 게임 내 광고 서버(MAD)까지 복원
개발자 moio9가 Electronic Arts의 고전 레이싱 게임 세 작품 — Need for Speed: Underground 2, Most Wanted (2005), Carbon — 의 온라인 기능을 되살리는 비공식 커뮤니티 서버를 공개했습니다. 서버는 Python으로 작성됐고, 게임 클라이언트에 주입하는 ASI 플러그인은 Zig로 빌드되며, 게임 내 광고를 대체하는 Massive Ads 서버까지 리버스 엔지니어링됐습니다.
- 주제
본문
공식 온라인 서비스가 종료된 지 오래인 2000년대 중반의 Need for Speed 시리즈를 다시 멀티플레이할 수 있게 해주는 리버스 엔지니어링 프로젝트가 공개됐습니다. GitHub에 공개된 'NFS-Online-Server'는 Underground 2, Most Wanted (2005), Carbon 세 작품을 위한 비공식 커뮤니티 서버와 Windows x86 클라이언트 플러그인을 제공하며, 게임 속 인게임 광고를 대체하는 Massive Ads(MAD) 서버까지 함께 구현돼 있습니다.
아키텍처 — Python 서버 + Zig 클라이언트
서버는 Python으로 작성됐으며 TOML 설정 파일 하나로 동작을 제어합니다. Linux 환경에서 Python 3.10 이상과 sqlite3가 필요합니다. 클라이언트 쪽은 세 개의 ASI 플러그인으로, Zig 0.16.0 소스에서 빌드되며 빌드 환경은 Linux x86-64 또는 Android의 Termux입니다. 원본 게임 파일은 일절 포함되지 않아, 이용자가 정품 게임을 보유하고 있어야 합니다.
배포와 운영 절차
운영 도구는 nfs_online.py라는 단일 엔트리포인트로 통합돼 있습니다. 'python nfs_online.py check'로 환경을 점검하고, 'configure --public-host'로 공개 호스트를 지정한 뒤 'create-account'로 계정을 만들고 start.sh로 기동하는 순서입니다. 이후 status, stop, 'start --games u2,mw --daemon'처럼 게임별 선택 기동, kick으로 이용자 추방, 'dlc show'로 계정별 DLC 확인, stats로 통계 조회가 가능합니다. 서버 설정은 config/server.toml에 저장되고, 클라이언트 설정은 게임별 net_u2.ini, net_mw.ini, net_carbon.ini로 분리됩니다. 개발자 본인이 운영하는 공개 서버 주소(brake.go.ro)도 함께 공개했습니다.
포트 구성과 보안 권고
README는 13개 포트를 표로 정리하고 있습니다. 공용 Messenger가 TCP 13505, loopback 전용 Messenger IPC가 13506, Underground 2는 bootstrap 20921과 로비 20922, U2/MW 공용 웹·PREL이 20923, Most Wanted는 로비 30920과 bootstrap 30921, 두 게임의 레이스 릴레이가 UDP 20000입니다. Carbon은 FESL 18210, Theater 18215, 레이스 전송 UDP 19119, Massive Ads가 TCP 9000을 쓰고, 독립 DLC 페이지는 loopback 8081입니다. 문서는 실행하는 게임에 필요한 포트만 개방하고, 인터넷 배포 전 PUBLIC_HOST를 바꾸며, Messenger IPC와 DLC 리스너는 보안 리버스 프록시 없이는 loopback에 묶어두라고 권고합니다.
빌드·테스트·라이선스
source/client-zig에서 build_linux.sh를 실행하면 net_u2.asi, net_mw.asi, net_carbon.asi가 생성되며, 각각 대응하는 INI와 함께 게임의 ASI/plugin 디렉터리에 복사하면 됩니다. 같은 게임 코드를 패치하는 구형 플러그인과 동시에 로드하면 안 된다고 명시돼 있습니다. 테스트는 unittest discover 기반 스위트가 서버 common·classic·carbon 세 모듈에 나뉘어 있고, 배포 전 check_public_tree.py와 check 명령을 돌리도록 규정돼 있습니다. 코드는 AGPL-3.0-or-later로 배포되며, EA와 무관한 비공식 프로젝트임을 명확히 하고 있습니다.
Reddit 반응
- @u/TacoBOTT — 최근 디컴파일·리버스 엔지니어링 프로젝트가 부쩍 늘었는데, 이제는 대부분 AI의 도움으로 진행되는 것인지, 직접 시작하려면 어떤 접근법이 가장 좋은지를 묻는 질문이 가장 많은 공감을 얻었습니다.
원문: Reddit / 번역·요약: Trawling