Created
December 16, 2017 18:34
-
-
Save kyujin-cho/f361f94dd5654c23187bc4306673fc5a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import requests | |
| import urllib.request | |
| import re | |
| import json | |
| import os.path | |
| import PIL.Image | |
| import zipfile | |
| import io | |
| import sys | |
| import glob | |
| import base64 | |
| def xor(a, b): | |
| return bytearray([x^y for x, y in zip(a, b)]) | |
| key = base64.b64decode('you-find-out-yourself') | |
| def download_kakao(sids, resize=False): | |
| for sid in sids: | |
| os.mkdir(sid) if not os.path.isdir(sid) else False | |
| tid = re.findall(r'[0-9]+', re.findall(r'https:\/\/item\.kakaocdn\.net\/dw\/[0-9]+\.share\.png', requests.get('https://e.kakao.com/t/' + sid).text)[0])[0] | |
| zipfile.ZipFile(io.BytesIO(urllib.request.urlopen('https://item.kakaocdn.net/dw/{}.file_pack.zip'.format(tid)).read()), 'r').extractall(sid + '/') | |
| if os.listdir(sid)[0].split('.')[-1] == 'webp': | |
| for image in os.listdir(sid): | |
| f = open(sid + '/' + image, 'rb') | |
| decrypted, plain = xor(f.read(128), key), f.read() | |
| open(sid + '/' + image, 'wb').write(decrypted + plain) | |
| else: | |
| [i[1].save(sid + '/' + i[0]) for i in [(image, PIL.Image.open(sid + '/' + image).resize((512, 512))) for image in os.listdir(sid)]] if resize else None | |
| # ex1 | |
| # print(download_kakao(['blu-yello-daily-life', 'blu-yello-daily-life-2'], resize=True)) | |
| # ex2 | |
| # print(download_kakao(['extremely-frends', 'korean-ver-extremely-rabbit-2', 'extremely-rabbit', 'korean-ver-extremely-cat-winter-ver', 'korean-ver-extremely-rabbit-valentine-ver', 'extremely-cat2', 'korean-ver-extremely-dog-dialect-special-gyeongsang-chungcheong-ver', 'extremely-bear', 'korean-ver-extremely-chibi-rabbit', 'korean-ver-extremely-chibi-rabbit-chibi-bear', 'korean-ver-extremely-rabbit-2'])) |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
설명:
카카오톡의 움직이는 이모티콘의 경우 WebP 파일로 이루어져 있으며,
일반 이모티콘 과는 다르게 이 파일은 앞의 128바이트가 특정 방식으로 암호화되어 있습니다.
이를 해제하기 위해서는 128바이트짜리 키를 구해서 앞의 128바이트와 XOR 연산을 해야 합니다.
키는 디버거 붙이면 나오니까 알아서 찾으세요.