개발&Development/프로그래밍 일반

Lineage2 클라이언트의 보안 변천사

겐도 2005. 5. 26. 12:57
이전에 암호를 다르게 넣어도 인증되는 오류(암호화 알고리즘은 함부로 생각해 내지 말자라는 교훈을 주고 있음)와 이번에 Plain Text로 로그에 저장하는 문제때문에 시껍한 문제의 프로그램...
본인이 지켜본 리니지2 클라이언트의 변화를 적어 보고자 한다.

일전에 NCSoft에 면접 보러 갔다가 거기의 아는 선배가 던진 질문이 생각난다. 서버의 부하때문에 일부 연산은 클라이언트로 옮기는 것이 좋을거 같은데 괜찮을까? 역시 대답을 예상하고 던진 질문이겠지만 "NO"이다. 다른 게임의 Speed Hack(게임에서 설정한 정상적인 이동 속도보다 더 빠르게 움직일 수 있게 하는 프로그램)이 이런 이유에서 나올 수 있는 것이다. 리니지를 보고 있노라면 적어도 이런 부분은 잘 지키고 있다. 클라이언트는 말 그대로 화려한 그래픽을 그려주는 것이 전부이고 상당수의 연산은 서버에서 담당한다. 물론 그 댓가로 렉도 심하다.

리니지 클라이언트의 데이터는 모두 암호화 되어 있다. 물론 처음에는 깨끗한 Text여서 보기 좋았지만 어느 순간 노트패트로 보기 힘들게 변하였다. chronicle 1때 부터인거 같은데 암호화라는 단어의 "암"자를 시작한 것 같다. 그래서 XOR로 암호화를 시켜놨나 보다. 10초만에 갤 수 있었다. 설정파일중에 줌아웃의 한계를 설정해 놓은 부분이 있었는데 이 부분을 수정해서 하늘 꼭대기에서 내려다본 성을 감상하곤 했다. 이후 약간 암호화 기법을 변경해서 약 3일이 걸려서야 풀 수 있었다. Blowfish 기법을 사용한 암호화. 대칭키를 이용한 암호화는 단점이 하나 있다. 그 키가 클라이언트에 들어가 있을 것이고 클라이언트 조금만 분석하면 암호를 풀 수 있다. chronicle 2가 시작되기 직전에 나는 미리 변경되는 이미지를 찾아 볼 수 있었고 심지어 가지고 있지도 않은 장비의 이미지도 데이터 편집을 통해 볼 수 있었다. 그러나.. 최근에는 이 방법이 상당히 힘들어져 버렸다. RSA 알고리즘을 사용해서 비대칭키 방식으로 변경 데이터를 복호화는 하겠는데 수정한 것을 다시 암호화 해서 적용시키는 것은 불가능하다. Public Key는 알고 있지만 Private Key를 모르기 때문에 암호화 시켜서 데이터 적용이 불가능한 것이다. 최근에 찾아본 인터넷의 자료로는 아예 프로그램까지 수정해서 대충 돌게만드는 방법이 존재하고 있긴 하다.

리니지 클라이언트와 서버의 통신프로토콜상의 암호화도 몇번 변경이 된 것 같고 타인이 그 내용을 보는 것은 힘들다는 것 같다. (물론 어떤 개발자들이 클라이언트를 역어셈블 해서 지네들이 만든 클라이언트도 있다. 물론 BOT 용으로..) 또한 몹이 피가 달아가는 것 조차 서버에서 계산하기 때문에 편법적인 사냥은 불가능 한 것으로 보이고 있다. NCSoft는 적어도 자신들의 자산은 정말 잘 보호하고 있는 것으로 보인다. 그리고 역시나 부하는 심하지만 서버기술도 인정할만 하고... (이번에 64환경으로 서버 이전한다는 것은 왠지.. 불안불안)


뭐... 몇 삽질맨들을 제외하곤 칭찬해 줄만한 프로그램.

PS.
그래도.. 만약 회사에서 짤려서 한 몇달 백수생활을 하게 된다면 역어셈블이나 해서 50 엘레멘탈 소드나 만들어 보고 싶은데.. ㅋ