2014년 3월 경 출시되어, 4월 무렵 "좀비고등학교" 로 바뀌게 되었던, 아오오니 레전드에 대해 간단하게 분석해보고 있다.
당시 개발진이었던 김원배, 송준원의 나이는 24살이었고,
덤으로 14년도 당시에는 유니티 게임 개발에 대한 레퍼런스도 많이 적었는데도 게임 이론에 대해 모범적인 사례가 여럿 보였다.
1. 구조
아오오니 레전드는 2009년 개발되었던 레시아 온라인의 통신 구조를 그대로 사용하였다.
- lesiam.dll
레시아 모바일에서도 사용되었던 라이브러리로 보이며,
모든 패킷의 DTO가 작성되어있다.
- lesiamSerializer.dll
통신에 사용되는 패킷들을 serialize/deserialize 한다.
해당 라이브러리의 'LesiamSerializer' class는 protobuf-net의 TypeModel을 상속받아서 오버로드 하고 있다.
현재 해당 protobuf-net 라이브러리를 사용해본 결과, 현재는 TypeModel을 하나씩 작성해줄 필요는 없다.
사용된 라이브러리가 초창기 버전이어서 리플렉션을 지원하지 않았던 것으로 보인다.
- Kernys.Bson
아오오니 레전드의 타일맵 형식은 커니스의 자체 구현이다.
타일의 위치를 Bson으로 저장하였는데, 이를 deserialize하기 위해 자체 구현한 bson 라이브러리를 사용중이다.
2. 접속 구조도
Scene_Login 씬에서의 로그인 버튼을 누르면 아오오니 레전드의 서버 ( oni3.kernys.net , oni4.kernys.net , 포트 8283 ) 으로 연결되게 되어있다.
GameClient라는 singleton instance를 얻어와서 connect 메소드를 호출한다.
특이하게도 로그인/회원가입 의 핸들링을 한 함수 안에서 다 컨트롤 한다.
Scene_Login.handleEvent
FuncType.LOGIN
FuncType.SIGNUP
LOGIN일때는 Login 패킷을, SIGNUP 일때는 CreateAccount 패킷을 전송하는것으로 확인되었다.
'리버싱' 카테고리의 다른 글
카카오톡 Loco frida 후킹 (0) | 2024.08.06 |
---|---|
Firefox cookie, local storage 추출 (0) | 2024.04.26 |
ld.exe 분석 (0) | 2024.04.25 |
[Zeta] 대화하기 (0) | 2024.04.22 |
[Zeta] OAuth token 추출 (0) | 2024.04.22 |