Xiaomi socket protocol finding [failed now...]

Flashscope edited this page Aug 22, 2015 · 2 revisions

FreeShipping + $14이라는 놀라운 가격에 팔고 있는 샤오미 콘센트...

앱 자체는 잘 만들어져 있지만 직접 제어를 못하는거에 답답함을 느낌...

옵션에 있는지 모르지만 시간 예약 기능은 중국 시각으로 작동중...

$3.5로 구매한 usb wifi로 패킷을 살펴보기로... 이 제품이 재미 있는게 자체 프로그램(miwifi.com)을 사용하면 간단하게 ap환경을 만들어줌 그냥 드라이버를 깔면 일반 usb wifi로 사용 가능

하지만 프로그램 사용시 와이어 샤크에서 인식을 하지 않음... Mediatek (Ex Ralink) MT6701을 사용한다고 하지만 ap모드로 사용가능하게 해주는 드라이버 유틸리티를 못찾음

조금 불편하지만 tcpdump를 사용하기로 함

패킷을 보니 54321포트에 udp로 전송중!

처음에는 무조건 21:31:00:20:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff (32)를 전송을 함 이건 초기화 용도의 패킷으로 추정 중

이 패킷을 전송하면 21:31:00:20:00:00:00:00:00:0d:96:fd:00:00:91:6e:aa:98:3c:86:84:8b:ea:bb:00:16:f5:c9:7b:2b:31:33 이런식의 데이터가 돌아오는것을 확인 함

이런식으로 여러번 데이터 오가는 것을 보다 보니 21:31:00:20:00:00:00:00:00:0d:96:fd:00:00:91:6e:aa:98:3c:86:84:8b:ea:bb:00:16:f5:c9:7b:2b:31:33 요 부분은 그냥 패킷 헤더의 샤오미 소켓이라는걸 알리는 부분인것 같고

21:31:00:20:00:00:00:00:00:0d:96:fd:00:00:91:6e:aa:98:3c:86:84:8b:ea:bb:00:16:f5:c9:7b:2b:31:33 이 부분은 헤더에서 패킷 종류인 것으로 보임(2? 4?)

21:31:00:20:00:00:00:00:00:0d:96:fd:00:00:91:6e:aa:98:3c:86:84:8b:ea:bb:00:16:f5:c9:7b:2b:31:33 그리고 이게 세션 용도로 사용되는 값인지 처음에 초기화를 할때(fff~전송) 리턴된 저 값을 가지고 다른 패킷을 보낼때 사용... 그리고 가끔 콘센트에서 리스폰스가 저 값이 1씩 올라서 전송이 됨 그러면 다음 리퀘스트때에는 오른 값으로 전송...

이제 테스트를 하기 위해 파이썬으로 간단하게 테스트 코드를 작성

결과는 초기화 패킷 전송후 리턴은 잘 됨 하지만 키를 교체하고 다른 패킷을 쏘아보면 ffffff로 에러 패킷이 돌아옴

혹시 몰라서 java 안드로이드로도 테스트 해보았지만 결과는 마찬가지

일단 리퀘스트 패킷 자체는 정상으로 생각됨 잘못된 패킷을 보내면 아예 리스폰스가 안오는데 일단 2131~~ffff라도 오고있으니... 문제는 이제 헤더 뒤의 페이로드 부분인데 저 내용을 아는게 중요 해 보임 보통 샤오미는 통신할떄 json형태를 사용하던 것 같던데 패킷만 봤을때는 json형태는 아닌듯 함 혹 저게 암호화되어있다면... 덜덜... 일단 나중에 시간이 남을때 더 확인해 보기로...

일단 다른 루트인 앱 디컴파일을 시도 해 보기로...

역시나 프로가드가 적용되 있음...

하지만 udp라는 것과 포트번호를 알고 있기에 그나마 쉽게 찾음...

하지만 주요 함수들이 다 복호화 실패...

응?

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.