• 목록
  • 아래로
  • 위로
  • 17
  • Seia
  • 조회 수 6278

사실 개인적으로 쓸 용도로만 카카오톡 API를 비공식 저장소로 운영하면서 iOS, Win App을 제외한 Win32, Android 쪽은 리버싱이 리버싱 작업을 이미 몇 달 전에 끝냈었습니다. 카카오톡 자체는 LOCO(겁나 빠른 황소 프로젝트) 프로토콜을 사용하게 되면서 표준 HTTP(s) 프로토콜은 아니기도 하고 인증서 검사를 빡세게 해서 조금 힘들 수는 있지만 꽤 많은 분들이 성공하고 잘 운용하시는 것으로 압니다.

 

본래는 이러한 리버싱 작업을 하는데에 있어서는 기본적으로 카카오톡 회사 측에서 어떻게 대응할지도 모르고 기존 API 자체가 막히면 그만큼 허무한 점도 많고 법적으로 이게 문제가 없다고 보장되는 것이 아니라서 결과물을 보관하는 Git 저장소를 비공개로 맞춰놓습니다.

 

하지만 이번에 GitHub에 storycraft님께서 리버싱을 시도하고 있고 프로젝트를 보니 언어적으로 꽤나 모던한 결과물이 나올 것 같기도 하고 공개적으로 오픈소스로 공개 + NPM 레지스트리에도 등록하셔서 스포어에도 이 소식을 알려봅니다. 왜냐하면 카카오톡 봇?이라고 카카오톡 오픈 채팅 등에서 운영되는 서비스들은 너무나도 환경 자체가 안타까울 정도(어떻게 폰...?으로 돌려요. 심지어 정규 문법도 제대로 지원 안 하던데? 화가 많이 났었습니다)이고 예전에도 스칼라로 Win32로 카카오톡 봇을 만들어 본 적이 있어서 차라리 폰으로 24시간 켜놓고 여러 대 켜놓는다고 하기보다는 Node.JS API를 풀로 사용해서 하는 편이 낫지 않을까 싶습니다.

 

당시 그래서 카카오톡 봇을 폰으로 구동시켜주는 애플리케이션 개발자에게 차라리 이럴 바에야 Node.JS 바이너리를 첨부시키시는 편이 낫다고 했더니 용량 문제로 반대하시더군요... 오히려 더 어이가 없었습니다. (게다가 이 사람들은 OS의 알림에서 메세지를 가져온다고요...) 템플릿 리터럴도 지원 안 하고 순수하게 기본적으로 제공되는 패키지로 폰 코딩 하느니 LOCO 프로토콜을 뚫겠습니다...

 

아래 저장소에서 storycraft님이 운영 중이고 계십니다.

 

관심있으신 분은 꼭 카카오톡 봇 앱?들의 JS 엔진에서 벗어나길 하루 빨리 기원합니다.

 

https://www.npmjs.com/package/node-kakao

 

KakaoTalk PC Client implemention(Loco protocol wrapper) written with Node

 

 

작성자
Seia 33 Lv. (42%) 89400/92480EXP

GitHub에서 seia-soto로 활동 중입니다.

댓글 17

갱생협스
profile image
제가 바로 그 앱을 쓰던 사람이었죠.
쓰다가 ㅃ-ㅏㄱ6쇼ㅛ쵸ㅛㅕㅑ7ㄴㄴㄴㄴㅅ8ㅓ <-저희집 고양이가 키보드를 밟고 갔습니다
쓰다가 빡쳐서 결국 봇을 접었는데.. 리버스 엔지니어링을 해 볼 생각은 1도 못해봤네요. 좋은 정보 감사합니다!
comment menu
2020.05.06. 10:44

신고

"갱생협스님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → 갱생협스
profile image
진짜로 그 개발자들을 보면 아직도 화가 납니다. ㅜㅜ

정말로 무책임하다고 생각하는 동시에 안타깝습니다...

혹시 리버스 엔지니어링을 해보실 생각이 계시다면 구글신께 물어보시면 기본적인 자료를 찾으시고 Web archive만 뒤지셔도 금방 가능할 거라 믿습니다 :>
comment menu
2020.05.06. 10:46

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

갱생협스 → Seia
profile image
그래도 그들 나름대로 최선을 다 했다고 믿고 쓰는거죠 ㅎㅎ;;;;;
JS를 써야 한대서 자바스크립트 날림으로 테스트하고 업로드하니 오류만 뿜어대더라고요.
아무리 날림으로 만들었다고 해도... 적어도 오류는 없었는데...;;;

리버스 엔지니어링 자료가 궁금해지네요.

그나저나 저 댓글을 달면서 뭔가 생각난 게 있었는데.. 까먹어버렸어요. 뭔가 되게 괜찮은 생각이었는데 ㅏㅏㅏ 답답해 ㅠㅠㅠㅠ
comment menu
2020.05.06. 10:56

신고

"갱생협스님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → 갱생협스
profile image
네... 그랬으면 오히려 더 나았겠어요.ㅜㅜ

말씀하신 부분 중에 궁금하신 부분은 무엇인지 알 것 같습니다. 해당 코드가 동작하지 않는 주 원인은 JavaScript 엔진에서 미지원하기 때문입니다. Mozilla에서 만든 Rhino라는 엔진을 사용하고 있더라고요.

https://developer.mozilla.org/ko/docs/Rhino

자료와 같은 경우에는 저는 아직 두려움이 커서 제공해드리기가 어렵지만 인터넷에는 이미 프로토콜의 해석까지 친절하게 나와있답니다.
comment menu
2020.05.06. 10:59

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

갱생협스 → Seia
profile image
+1
음? 코뿔소 엔진을 썼다니, 이건 좀 뭐랄까, 이상하군요. 사정은 있었겠지만 라이노를..?
여하튼 왜 오류가 나온건진 이해가 가네요.

역시 사람은 구글링을 해 봐야 하는 것 같군요! 뭔가 감이 잡힐것도 같고 아닌것도 같고 그러네요.
comment menu
2020.05.06. 11:06

신고

"갱생협스님의 댓글"

이 댓글을 신고 하시겠습니까?

Hanam09
profile image

카카오톡에서 MITM을 한번 시도해본적이 안되더군요.
OS에 인증서를 등록하고 서버파서 인증서를 바꿔서 시도해봤는데 안됬습니다.
어떤 블로그를 찾아본 결과 인증서를 메모리에 담아서 시도한다고도 했는데..
메모리를 읽기가 힘들어서(제 실력이 없어서) 실패했습니다.
Python으로 해봤는데 그 인증서 구간을 찾기가 힘들어요.
ctypes.windll;
Kernel.ReadProcessMemory의 인자가 생각해야할게 많더라구요..
근데 이 게시물을 보니 힘이나네요!.
좋은소식이에요.

 

+) 아 그리고 법적으로는 

 

저작권법
제2조(정의) 이 법에서 사용하는 용어의 뜻은 다음과 같다.
34. "프로그램코드역분석"은 독립적으로 창작된 컴퓨터프로그램저작물과 다른 컴퓨터프로그램과의 호환에 필요한 정보를 얻기 위하여 컴퓨터프로그램저작물코드를 복제 또는 변환하는 것을 말한다.

제101조의4(프로그램코드역분석) ① 정당한 권한에 의하여 프로그램을 이용하는 자 또는 그의 허락을 받은 자는 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우에는 해당 프로그램의 호환에 필요한 부분에 한하여 프로그램의 저작재산권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.
② 제1항에 따른 프로그램코드역분석을 통하여 얻은 정보는 다음 각 호의 어느 하나에 해당하는 경우에는 이를 이용할 수 없다.
1. 호환 목적 외의 다른 목적을 위하여 이용하거나 제3자에게 제공하는 경우
2. 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발·제작·판매하거나 그 밖에 프로그램의 저작권을 침해하는 행위에 이용하는 경우

제104조의2(기술적 보호조치의 무력화 금지) ① 누구든지 정당한 권한 없이 고의 또는 과실로 제2조제28호가목의 기술적 보호조치를 제거·변경하거나 우회하는 등의 방법으로 무력화하여서는 아니 된다. 다만, 다음 각 호의 어느 하나에 해당하는 경우에는 그러하지 아니하다.
6. 정당한 권한을 가지고 프로그램을 사용하는 자가 다른 프로그램과의 호환을 위하여 필요한 범위에서 프로그램코드역분석을 하는 경우

 

이라고 하네요.

comment menu
2020.05.06. 12:00

신고

"Hanam09님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → Hanam09
profile image

네, 단순히 Root CA를 속이고 기만하는 짓은 작동하지 않습니다.

iOS 쪽에서는 얼마 전까지 오픈채팅 검색이 가능했었는데 그마저도 LOCO Secure 쪽으로 바뀐 것 같습니다.

법적으로는 딱히 공개적으로 개발은 못하겠습니다;

comment menu
2020.05.06. 12:55

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

포인트⠀폭탄+
Seia님 축하합니다.
추가로 1,000,000포인트만큼 포인트 폭탄+를 받았습니다.
comment menu
2020.05.06. 13:20

신고

"포인트⠀폭탄+님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → 포인트⠀폭탄+
profile image
+1
엥...?
comment menu
2020.05.07. 09:46

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit
profile image
솔직히 말해서 카카오쪽 입장도 이해가 가기는 합니다.

예전에 LOCO 프로토콜에 대해서 분석하신 분의 블로그를 본 적이 있는데 모두 소스 구걸 댓글이 달려있더라고요..
말로는 학습용이라고는 하는데, 아마 일부 사람들의 경우에는 해당 내용을 이용해서 광고를 하는 목적으로 사용하려는 사람도 있었겠지요...

차라리 API 형태로 해서 사용량에 제한을 두는 방식으로 쓸 수 있게 하면 좋을 거 같습니다.
comment menu
2020.05.06. 23:58

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → humit
profile image
네, 심지어 현재 프로토콜도 존재 의의가 그렇게 큰 지 잘 모르겠습니다. 기본적인 Handshaking은 HTTPs와 같이 TLS를 사용하고 있기도 하고요. 이미 HTTP 프로토콜을 사용해도 무방한 소스코드에 그저 디버깅을 피하려고 만든 프로토콜이 아닐까 싶습니다. 딱히 그 때와 지금도 달라진 점도 없기도 하고요.

소스 구걸...과 같은 경우는 솔직히 막상 오면 받아쳐주기도 애매하네요.
comment menu
2020.05.07. 09:45

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

Hanam09 → Seia
profile image
HTTP프로토콜의 통신 방식 자체가 무겁기 때문에 그렇지 않을까요?
저번에 카카오톡 분석 관련 블로그를 봤을때도 loco프로토콜의 개발 이유가 패킷 사이즈를 컴팩트하게 만들어서 서버에 걸리는 부하를 줄이게 만드는것이라고 하더라구요.
기본 패킷의 경우 해더가 22바이트라 하더군요. 필요한 정보는 다들어갔답니다.
comment menu
2020.05.07. 14:35

신고

"Hanam09님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → Hanam09
profile image
확실히 오버헤드도 줄어드는 효과가 있긴 합니다. 진짜로 단순한 프로토콜이기도 하고요.
comment menu
2020.05.07. 15:04

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

갱생협스
profile image
아이고. nodekakao 한번 써 보려니 왜 이리 머리가 아플까요?
자바스크립트는 잊어먹은지 오래라(늘 필요할때마다 날림으로 작성했습니다) 예제 분석도 안 되고... 허..
그냥 앱을 쓸까요? ㅋㅋㅋㅋ
comment menu
2020.05.08. 21:49

신고

"갱생협스님의 댓글"

이 댓글을 신고 하시겠습니까?

{Cog}

404가 뜨네요???

Screenshot_20200520-234137_Chrome.jpg

comment menu
2020.05.20. 23:42

신고

"{Cog}님의 댓글"

이 댓글을 신고 하시겠습니까?

Seia 작성자 → {Cog}
profile image
저도 얼마 전에 알아 현재 글을 쓰려하는 참에 먼저 들어오셨군요.

카카오에서 현재 흔적도 없이 짜른 듯합니다.

안타깝네요.
comment menu
2020.05.22. 19:08

신고

"Seia님의 댓글"

이 댓글을 신고 하시겠습니까?

{Cog} → Seia
오픈소스다보니 클론당한(?) 레포가 있더라고요.https://github.com/starlesssss/node-kakao
comment menu
2020.06.16. 19:09

신고

"{Cog}님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 394
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4075
공지 낚시성 불법도박 홍보 게시글을 주의하세요. 9 image 네모 네모 22.08.09.18:13 459
공지 슬기로운 포인트 벌이를 하는 법 (22.10.11 업데이트) 64 네모 네모 18.06.17.20:25 15360
6508 안드로이드에서 EXE 실행하기..! 6 image 네모 네모 18.05.10.06:17 35720
6507 인터넷 무료 및 유로 소설 사이트 어느곳이용하새여? 3 핫슈 17.12.12.16:01 16262
6506 어도비 학생 할인 받는 법이 왜 이리 간단하죠? 3 image 제르엘 제르엘 18.11.24.08:25 8155
6505 와이파이가 급 느려 터져서 핑테스트를 해봤는데... 12 image 국내산라이츄 국내산라이츄 17.11.01.18:10 6785
카카오톡 API (채팅, 비공식) 리버싱에 관하여 17 Seia Seia 20.05.06.10:37 6278
6503 어라 ckeditor 유료인가요? 10 라엘 라엘 18.12.24.01:41 5535
6502 금융거래한도계좌로 웃고 웁니다 ㅠ.ㅠ 8 대전댁 title: 은메달대전댁 17.03.17.17:53 4927
6501 시험을 앞두고서 노트북 바탕화면을 갈았습니다. (+ 스카웃되었습니다만..) 24 image 갱생협스 갱생협스 19.06.18.18:51 3931
6500 배그때문에 C드라이브 용량이 꽉찼네요 6 title: 은메달도다 18.02.06.20:43 3746
6499 방문에 잠금장치를 추가했습니다! 17 image 네모 네모 18.05.03.00:04 3214
6498 이 광고의 정체는 무엇인가요? 12 image 연우빠 연우빠 22.01.29.02:05 3124
6497 평소 생각없이 듣던 노래가 수위곡이라면 어떤 기분들 드시나요? 16 image BVC_Liper_Okbul BVC_Liper_Okbul 19.01.30.23:19 3004
6496 KT의 QoS에 대한 제 경험에 덧붙여 약간의 질문 드립니다 18 image 이니스프리 이니스프리 17.12.03.23:02 2970
6495 주간 근황 7 image 국내산라이츄 국내산라이츄 22.02.27.01:23 2934
6494 크롬 다운로드도 이어받기 되겠죠...? 5 국내산라이츄 국내산라이츄 19.06.15.01:08 2926
6493 [투표] 선호하시는 WYSIWYG HTML 에디터가 있으신가요? ^^ 16 image 이니스프리 이니스프리 18.11.20.17:21 2870
6492 [설문조사 없는 설문조사 11탄] 암호와 관련된 뻘글 14 제르엘 제르엘 22.03.03.01:29 2728
6491 [애플페이] 저는 이제 지갑이 없어도 됩니다 10 image 갱생협스 갱생협스 22.02.22.14:21 2720
6490 여러분 들 인터넷 명칭 이더넷인분들도잇나요? 13 image 핫슈 17.10.18.22:06 2626
6489 새 번호를 팠습니다. 14 image 제르엘 제르엘 22.02.24.14:59 2605