Facebook 5th Analysis Guide
User Manual: Pdf
Open the PDF directly: View PDF .
Page Count: 27
LOCO 프로토콜 분석과 구현
HeXA
김태훈
LOCO 프로토콜
•TCP/IP를 바탕으로 작동하는 request and
response 프로토콜
•패킷 경량화를 목표로 제작된 비공개 프로토콜
•‘겁나 빠른 황소’ 프로젝트의 일환으로 개발됨
•2011년10월에 첫 번째 버전 공개 및 사용됨
•카카오 톡팀에서 자체적으로 디자인 및구현
분석 과정
•구버전(1.0.0.0)의윈도우 모바일 어플리케이션
분석
•대략적인 패킷 생성 과정 분석
•안드로이드 패킷 분석
•현재 어플리케이션에서 사용되고 있는 프로토콜 분
석
•최근 버전(1.5.0.0)의 윈도우 모바일 어플리케이
션dll 변조
* 구 버전 1.0.0.0, 1.2.0.0 사용 불가능
* 최신 버전 : 1.9.0.0 (2013.05.26)
App에서 LOCO 서버와 통신 방법
•LOCO 서버에 대한 TCP 소켓이 연결되어 있는
지 확인
•그렇지 않다면 재 접속 시도
•FillBuffer 함수를 통해 현재 커맨드에 해당하는
패킷 생성
•if(isSecureMode)
•True & Login : handshake 패킷 생성 후암호화된 커
맨드 패킷 앞에 붙이고 전송
•True & !Login : 커맨드 패킷을 암호화 하고 전송
•False: 그대로 전송
FillBuffer 함수를 통해 현재 커맨드
에해당하는 패킷 생성
True & Login : handshake 패킷 생성 후
암호화된 커맨드 패킷 앞에 붙이고 전송
LOCO 서버에 대한 TCP 소켓이 연결되어 있는지 확인
윈도우 KakaoTalk 1.0.0.0 버전 KakaoTalkSLLib.dll
LOCO 패킷 종류
•LocoPacket : non-secure 패킷
•암호화 되어있지 않음
•LocoSecureNormalPacket
•AES encryption 적용된 secure 패킷
•LocoSecureHandShakePacket
•LOGIN 커맨드 패킷에 사용되는 handshak 패킷
LocoPacket
•가장 기본이 되는 패킷
•Packet ID
•Status Code : 0
•Method
Ex) LOGIN, ADDMEM , ACHATLIST
•Body Type : 0
•Body Length
•Body Contents
•bson 형태로 전송됨
출처 : http://www.bpak.org/
윈도우 KakaoTalk 1.0.0.0 버전 KakaoTalkSLLib.dll
LocoSecureNormalPacket
•secure 모드일 때
LocoPacket(주로 커맨드)
을AES 암호화 한형태
•Data Length
•Encrypted Body contents
출처 : http://www.bpak.org/
LocoSecureHandShakePacket
•LOGIN 커맨드 앞에 붙여서 보
내지는 패킷
•LOGIN 커맨드 : LOCO 서버와
세션을 열기 위해 필요한 커맨
드
•AES 암호화에 사용되는 shared
key를 서버에 전달하기 위함
•이후 secure 패킷은 전달된 key
로 암호화 되어 보내짐
출처 : http://www.bpak.org/
커맨드 종류
•ADDMEM
•NOTIREAD
•LEAVE
•READ
•BUY # non-secure
•CWRITE
•LOGIN
•PING
•BLOCK
•NCHATLIST
•CHATON
•CHATOFF
•UPDATECHAT
•UNBLOCK
•UPSEEN
•CHATLIST
•WRITE
윈도우 KakaoTalk 1.0.0.0 버전 KakaoTalkSLLib.dll
BUY
Encrypted
LOGIN
handshake
WRITE
loco.kakao.com
Host
port
Host:port
AES key
(랜덤 생성됨)
Encrypted
AES key
public key로
rsa encrypt
LOGIN
AES
BUY 커맨드
•LOCO 서버 정보 받음
•loco.kakao.com 에서 소켓을 할당함
•non-secure 모드
•암호화 되지 않고 LocoPacket 형태로 그대로 전송됨
출처 : http://www.bpak.org/
BUY 커맨드의 구현
안드로이드 패킷 분석
•ADB (Android Debug Bridge) 사용
•tcpdump를 사용해 패킷 덤프
•설치에 super user 권한 필요
•Wireshark로 패킷을 hex 형태로 분석
CHECKIN 커맨드
•이미 세션이 열려있는 경우 and 세션이 만료되
지 않은 경우 사용됨
•형태는 BUY 커맨드와 유사함
Handshake 패킷
Handshake
with RSA
encrypted
AES key
AES
Encrypted
Login
AES
Encrypted
Response
LOGIN 커맨드의 구현
Handshake
with RSA
encrypted
AES key
AES
Encrypted
Login
Login
최근 윈도우 모바일 앱 리버싱
1.0.0.0 버전 : 아주 친절하게 나와 있음
최근 윈도우 모바일 앱 리버싱
Todo : AES 키를 random이아닌 이미 아는 키로 바꿔주어야 함
Write 커맨드의 구현
LOCO 프로토콜 외의 통신
•SSL 층에서 통신함 (https)
•But 3g 네트워크를 사용하면 http 형태로 분석
가능
반영구적인 세션키
json 파일
LOCO 프로토콜 외의 통신
•어플리케이션이 켜질 때 가장 먼저 보내지는 패킷
LOCO 프로토콜 외의 통신
•새로운 세션키를 요청하는 패킷
HTTPS 통신의 구현
Q&A