sticker-convert 2.9.0__py3-none-any.whl → 2.9.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,11 +51,17 @@ class ViberGetAuthWindow(BaseWindow):
51
51
  justify="left",
52
52
  anchor="w",
53
53
  )
54
+ else:
55
+ self.explanation_lbl2 = Label(
56
+ self.frame_info,
57
+ text="You may be asked for admin password.",
58
+ justify="left",
59
+ anchor="w",
60
+ )
54
61
 
55
62
  self.explanation_lbl0.grid(column=0, row=0, sticky="w", padx=3, pady=3)
56
63
  self.explanation_lbl1.grid(column=0, row=1, sticky="w", padx=3, pady=3)
57
- if self.explanation_lbl2 is not None:
58
- self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
64
+ self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
59
65
 
60
66
  # Start button frame
61
67
  self.launch_btn = Button(
@@ -0,0 +1,8 @@
1
+ param($processId)
2
+ $dumpFilePath = "$Env:TEMP\memdump.bin.$processId"
3
+
4
+ Powershell -c rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump $processId $dumpFilePath full
5
+
6
+ icacls $dumpFilePath /remove "Everyone"
7
+ icacls $dumpFilePath /grant "Everyone:(r)"
8
+ icacls $dumpFilePath /grant "Everyone:(w)"
@@ -1,137 +1,183 @@
1
1
  #!/usr/bin/env python3
2
+ import importlib.util
2
3
  import os
3
4
  import platform
4
5
  import shutil
6
+ import signal
5
7
  import subprocess
6
8
  import time
7
9
  from getpass import getpass
8
10
  from pathlib import Path
9
- from typing import Callable, Optional, Tuple, cast
11
+ from typing import Callable, List, Optional, Tuple, cast
10
12
 
11
13
  from sticker_convert.definitions import ROOT_DIR
12
14
 
13
- # psutil is missing on arm64 linux appimage
14
- # Note: There is no Viber Desktop on arm64 linux anyway
15
- try:
16
- import psutil
17
-
18
- PSUTIL_LOADED = True
19
- except ModuleNotFoundError:
20
- PSUTIL_LOADED = False # type: ignore
21
-
22
15
  MSG_NO_BIN = """Viber Desktop not detected.
23
16
  Download and install Viber Desktop,
24
17
  then login to Viber Desktop and try again."""
25
-
26
18
  MSG_NO_AUTH = """Viber Desktop installed,
27
19
  but viber_auth not found.
28
20
  Please login to Viber Desktop and try again."""
29
-
30
21
  MSG_SIP_ENABLED = """You need to disable SIP:
31
22
  1. Restart computer in Recovery mode
32
23
  2. Launch Terminal from the Utilities menu
33
24
  3. Run the command `csrutil disable`
34
25
  4. Restart your computer"""
26
+ MSG_NO_PGREP = "pgrep command or psutil python package is necessary"
27
+ MSG_LAUNCH_FAIL = "Failed to launch Viber"
28
+ MSG_PERMISSION_ERROR = "Failed to read Viber process memory"
35
29
 
36
- MSG_NO_PSUTIL = "Python package psutil is necessary"
37
30
 
38
-
39
- def killall(name: str) -> bool:
40
- if not PSUTIL_LOADED:
31
+ def check_admin_windows() -> bool:
32
+ username = os.getenv("username")
33
+ if username is None:
41
34
  return False
42
35
 
36
+ s = subprocess.run(
37
+ ["net", "user", username],
38
+ capture_output=True,
39
+ text=True,
40
+ ).stdout
41
+
42
+ return True if "*Administrators" in s else False
43
+
44
+
45
+ def check_admin_linux() -> bool:
46
+ s = subprocess.run(
47
+ ["sudo", "-l"],
48
+ capture_output=True,
49
+ text=True,
50
+ ).stdout
51
+
52
+ return True if "may run the following commands" in s else False
53
+
54
+
55
+ def killall(name: str) -> bool:
43
56
  result = False
44
57
 
45
- for proc in psutil.process_iter(): # type: ignore
46
- if name in proc.name().lower():
47
- proc.kill()
58
+ while True:
59
+ pid = find_pid_by_name(name)
60
+ if pid is not None:
61
+ os.kill(pid, signal.SIGTERM)
48
62
  result = True
63
+ else:
64
+ break
49
65
 
50
66
  return result
51
67
 
52
68
 
53
69
  def find_pid_by_name(name: str) -> Optional[int]:
54
- if not PSUTIL_LOADED:
70
+ if platform.system() == "Windows":
71
+ s = subprocess.run(
72
+ ["powershell", "-c", "Get-Process", f"*{name}*"],
73
+ capture_output=True,
74
+ text=True,
75
+ ).stdout
76
+
77
+ for line in s.split("\n"):
78
+ if name in line.lower():
79
+ info = name.split()
80
+ pid = info[5]
81
+ if pid.isnumeric():
82
+ return int(pid)
83
+
55
84
  return None
85
+ else:
86
+ if platform.system() == "Darwin":
87
+ pattern = "Viber"
88
+ else:
89
+ pattern = ".*[Vv]iber.*"
90
+ pid = (
91
+ subprocess.run(["pgrep", pattern], capture_output=True, text=True)
92
+ .stdout.split("\n")[0]
93
+ .strip()
94
+ )
95
+ if pid == "" or pid.isnumeric() is False:
96
+ return None
97
+ else:
98
+ return int(pid)
99
+
100
+
101
+ if importlib.util.find_spec("psutil"):
102
+ import psutil
103
+
104
+ def killall(name: str) -> bool:
105
+ result = False
56
106
 
57
- for proc in psutil.process_iter(): # type: ignore
58
- if name in proc.name().lower():
59
- return proc.pid
107
+ for proc in psutil.process_iter(): # type: ignore
108
+ if name in proc.name().lower():
109
+ proc.kill()
110
+ result = True
60
111
 
61
- return None
112
+ return result
113
+
114
+ def find_pid_by_name(name: str) -> Optional[int]:
115
+ for proc in psutil.process_iter(): # type: ignore
116
+ if name in proc.name().lower():
117
+ return proc.pid
118
+
119
+ return None
62
120
 
63
121
 
64
122
  class GetViberAuth:
65
123
  def __init__(self, cb_ask_str: Callable[..., str] = input):
66
124
  self.cb_ask_str = cb_ask_str
67
125
 
68
- def get_auth_windows(self, viber_bin_path: str) -> Tuple[Optional[str], str]:
69
- if not PSUTIL_LOADED:
70
- return None, MSG_NO_PSUTIL
71
-
72
- member_id = None
73
- m_token = None
74
- m_ts = None
75
-
126
+ def relaunch_viber(self, viber_bin_path: str) -> Optional[int]:
76
127
  killed = killall("viber")
77
128
  if killed:
78
129
  time.sleep(5)
79
- subprocess.Popen([viber_bin_path])
130
+
131
+ if platform.system() == "Darwin":
132
+ cmd = ["open", "-n", viber_bin_path]
133
+ else:
134
+ cmd = [viber_bin_path]
135
+ subprocess.Popen(cmd)
80
136
  time.sleep(10)
81
137
 
82
- from PyMemoryEditor import OpenProcess # type: ignore
138
+ return find_pid_by_name("viber")
83
139
 
84
- viber_pid = find_pid_by_name("viber")
85
- with OpenProcess(pid=viber_pid) as process:
86
- for address in process.search_by_value(str, 18, "X-Viber-Auth-Mid: "): # type: ignore
87
- member_id_addr = cast(int, address) + 18
88
- member_id_bytes = process.read_process_memory(member_id_addr, bytes, 20)
89
- member_id_term = member_id_bytes.find(b"\x0d\x0a")
90
- if member_id_term == -1:
91
- continue
92
- member_id = member_id_bytes[:member_id_term].decode(encoding="ascii")
93
- break
94
- if member_id is None:
95
- return None, MSG_NO_AUTH
140
+ def get_mem_windows(self, viber_pid: int) -> Tuple[Optional[bytes], str]:
141
+ from pathlib import WindowsPath
96
142
 
97
- for address in process.search_by_value(str, 20, "X-Viber-Auth-Token: "): # type: ignore
98
- m_token_addr = cast(int, address) + 20
99
- m_token = process.read_process_memory(m_token_addr, str, 64)
100
- break
101
- if m_token is None:
102
- return None, MSG_NO_AUTH
103
-
104
- for address in process.search_by_value(str, 24, "X-Viber-Auth-Timestamp: "): # type: ignore
105
- m_ts_addr = cast(int, address) + 24
106
- m_ts = process.read_process_memory(m_ts_addr, str, 13)
143
+ memdump_ps_path = str(WindowsPath(ROOT_DIR / "resources/memdump_windows.ps1"))
144
+ arglist = (
145
+ f'-NoProfile -ExecutionPolicy Bypass -File "{memdump_ps_path}" {viber_pid}'
146
+ )
147
+ dump_fpath = os.path.expandvars(f"%temp%/memdump.bin.{viber_pid}")
148
+
149
+ cmd = [
150
+ "powershell",
151
+ "-NoProfile",
152
+ "-ExecutionPolicy",
153
+ "Bypass",
154
+ "-Command",
155
+ f"Start-Process -Verb RunAs powershell -ArgumentList '{arglist}'",
156
+ ]
157
+
158
+ subprocess.run(cmd, capture_output=True, text=True)
159
+
160
+ while True:
161
+ try:
162
+ with open(dump_fpath, "rb") as f:
163
+ s = f.read()
164
+ if len(s) != 0:
165
+ break
166
+ time.sleep(1)
167
+ except (FileNotFoundError, PermissionError):
168
+ pass
169
+
170
+ while True:
171
+ try:
172
+ os.remove(dump_fpath)
107
173
  break
108
- if m_ts is None:
109
- return None, MSG_NO_AUTH
110
-
111
- killall("viber")
112
-
113
- viber_auth = f"member_id:{member_id};m_token:{m_token};m_ts:{m_ts}"
114
- msg = "Got viber_auth successfully:\n"
115
- msg += f"{viber_auth=}\n"
116
-
117
- return viber_auth, msg
118
-
119
- def get_auth_linux(self, viber_bin_path: str) -> Tuple[Optional[str], str]:
120
- if not PSUTIL_LOADED:
121
- return None, MSG_NO_PSUTIL
122
-
123
- member_id = None
124
- m_token = None
125
- m_ts = None
174
+ except PermissionError:
175
+ pass
126
176
 
127
- killed = killall("viber")
128
- if killed:
129
- time.sleep(5)
130
- subprocess.Popen([viber_bin_path])
131
- time.sleep(10)
177
+ return s, ""
132
178
 
133
- viber_pid = find_pid_by_name("viber")
134
- memdump_sh_path = (ROOT_DIR / "resources/memdump.sh").as_posix()
179
+ def get_mem_linux(self, viber_pid: int) -> Tuple[Optional[bytes], str]:
180
+ memdump_sh_path = (ROOT_DIR / "resources/memdump_linux.sh").as_posix()
135
181
 
136
182
  s = subprocess.run(
137
183
  [
@@ -141,7 +187,7 @@ class GetViberAuth:
141
187
  capture_output=True,
142
188
  ).stdout
143
189
 
144
- if s.find(b"X-Viber-Auth-Mid: ") != -1:
190
+ if len(s) > 1000:
145
191
  pass
146
192
  elif shutil.which("pkexec") and os.getenv("DISPLAY"):
147
193
  s = subprocess.run(
@@ -174,27 +220,80 @@ class GetViberAuth:
174
220
  stdin=sudo_password_pipe.stdout,
175
221
  ).stdout
176
222
 
177
- member_id_addr = s.find(b"X-Viber-Auth-Mid: ")
178
- m_token_addr = s.find(b"X-Viber-Auth-Token: ")
179
- m_ts_addr = s.find(b"X-Viber-Auth-Timestamp: ")
223
+ return s, ""
180
224
 
181
- if member_id_addr == -1 or m_token_addr == -1 or m_ts_addr == -1:
182
- return None, MSG_NO_AUTH
225
+ def get_mem_darwin(self, viber_pid: int) -> Tuple[Optional[bytes], str]:
226
+ subprocess.run(
227
+ [
228
+ "lldb",
229
+ "--attach-pid",
230
+ str(viber_pid),
231
+ "-o",
232
+ "process save-core /tmp/viber.dmp",
233
+ "-o",
234
+ "quit",
235
+ ],
236
+ stdout=subprocess.DEVNULL,
237
+ stderr=subprocess.DEVNULL,
238
+ )
183
239
 
184
- member_id_addr += 18
185
- m_token_addr += 20
186
- m_ts_addr += 24
240
+ with open("/tmp/viber.dmp", "rb") as f:
241
+ s = f.read()
187
242
 
188
- member_id_bytes = s[member_id_addr : member_id_addr + 20]
189
- member_id_term = member_id_bytes.find(b"\x0d\x0a")
190
- if member_id_term == -1:
191
- return None, MSG_NO_AUTH
192
- member_id = member_id_bytes[:member_id_term].decode(encoding="ascii")
243
+ os.remove("/tmp/viber.dmp")
193
244
 
194
- m_token = s[m_token_addr : m_token_addr + 64].decode(encoding="ascii")
195
- m_ts = s[m_ts_addr : m_ts_addr + 13].decode(encoding="ascii")
245
+ return s, ""
196
246
 
197
- killall("viber")
247
+ def get_auth_by_pme(
248
+ self, viber_bin_path: str, relaunch: bool = True
249
+ ) -> Tuple[Optional[str], str]:
250
+ from PyMemoryEditor import OpenProcess # type: ignore
251
+
252
+ member_id = None
253
+ m_token = None
254
+ m_ts = None
255
+
256
+ if relaunch:
257
+ viber_pid = self.relaunch_viber(viber_bin_path)
258
+ else:
259
+ viber_pid = find_pid_by_name("viber")
260
+ if viber_pid is None:
261
+ return None, MSG_LAUNCH_FAIL
262
+
263
+ try:
264
+ with OpenProcess(pid=int(viber_pid)) as process:
265
+ for address in process.search_by_value(str, 18, "X-Viber-Auth-Mid: "): # type: ignore
266
+ member_id_addr = cast(int, address) + 18
267
+ member_id_bytes = process.read_process_memory(
268
+ member_id_addr, bytes, 20
269
+ )
270
+ member_id_term = member_id_bytes.find(b"\x0d\x0a")
271
+ if member_id_term == -1:
272
+ continue
273
+ member_id = member_id_bytes[:member_id_term].decode(
274
+ encoding="ascii"
275
+ )
276
+ break
277
+ if member_id is None:
278
+ return None, MSG_NO_AUTH
279
+
280
+ for address in process.search_by_value(str, 20, "X-Viber-Auth-Token: "): # type: ignore
281
+ m_token_addr = cast(int, address) + 20
282
+ m_token = process.read_process_memory(m_token_addr, str, 64)
283
+ break
284
+ if m_token is None:
285
+ return None, MSG_NO_AUTH
286
+
287
+ for address in process.search_by_value( # type: ignore
288
+ str, 24, "X-Viber-Auth-Timestamp: "
289
+ ):
290
+ m_ts_addr = cast(int, address) + 24
291
+ m_ts = process.read_process_memory(m_ts_addr, str, 13)
292
+ break
293
+ if m_ts is None:
294
+ return None, MSG_NO_AUTH
295
+ except PermissionError:
296
+ return None, MSG_PERMISSION_ERROR
198
297
 
199
298
  viber_auth = f"member_id:{member_id};m_token:{m_token};m_ts:{m_ts}"
200
299
  msg = "Got viber_auth successfully:\n"
@@ -202,50 +301,43 @@ class GetViberAuth:
202
301
 
203
302
  return viber_auth, msg
204
303
 
205
- def get_auth_darwin(self, viber_bin_path: str) -> Tuple[Optional[str], str]:
304
+ def get_auth_by_dump(
305
+ self, viber_bin_path: str, relaunch: bool = True
306
+ ) -> Tuple[Optional[str], str]:
206
307
  member_id = None
207
308
  m_token = None
208
309
  m_ts = None
209
310
 
210
- csrutil_status = subprocess.run(
211
- ["csrutil", "status"], capture_output=True, text=True
212
- ).stdout
213
-
214
- if "enabled" in csrutil_status:
215
- return None, MSG_SIP_ENABLED
216
-
217
- killed = killall("viber")
218
- if killed:
219
- time.sleep(5)
220
- subprocess.run(
221
- ["open", "-n", viber_bin_path],
222
- stdout=subprocess.DEVNULL,
223
- stderr=subprocess.DEVNULL,
224
- )
225
- time.sleep(10)
311
+ if platform.system() == "Darwin":
312
+ csrutil_status = subprocess.run(
313
+ ["csrutil", "status"], capture_output=True, text=True
314
+ ).stdout
226
315
 
227
- viber_pid = subprocess.run(
228
- ["pgrep", "Viber"], capture_output=True, text=True
229
- ).stdout.strip()
230
- subprocess.run(
231
- [
232
- "lldb",
233
- "--attach-pid",
234
- viber_pid,
235
- "-o",
236
- "process save-core /tmp/viber.dmp",
237
- "-o",
238
- "quit",
239
- ],
240
- stdout=subprocess.DEVNULL,
241
- stderr=subprocess.DEVNULL,
242
- )
316
+ if "enabled" in csrutil_status:
317
+ return None, MSG_SIP_ENABLED
318
+ elif (
319
+ platform.system() != "Windows"
320
+ and shutil.which("pgrep") is None
321
+ and importlib.find_loader("psutil") is None
322
+ ):
323
+ return None, MSG_NO_PGREP
324
+
325
+ if relaunch:
326
+ viber_pid = self.relaunch_viber(viber_bin_path)
327
+ else:
328
+ viber_pid = find_pid_by_name("viber")
329
+ if viber_pid is None:
330
+ return None, MSG_LAUNCH_FAIL
243
331
 
244
- with open("/tmp/viber.dmp", "rb") as f:
245
- s = f.read()
332
+ if platform.system() == "Windows":
333
+ s, msg = self.get_mem_windows(viber_pid)
334
+ elif platform.system() == "Darwin":
335
+ s, msg = self.get_mem_darwin(viber_pid)
336
+ else:
337
+ s, msg = self.get_mem_linux(viber_pid)
246
338
 
247
- os.remove("/tmp/viber.dmp")
248
- killall("viber")
339
+ if s is None:
340
+ return None, msg
249
341
 
250
342
  member_id_addr = s.find(b"X-Viber-Auth-Mid: ")
251
343
  m_token_addr = s.find(b"X-Viber-Auth-Token: ")
@@ -307,9 +399,43 @@ class GetViberAuth:
307
399
  if not viber_bin_path:
308
400
  return None, MSG_NO_BIN
309
401
 
310
- if platform.system() == "Windows":
311
- return self.get_auth_windows(viber_bin_path)
312
- elif platform.system() == "Darwin":
313
- return self.get_auth_darwin(viber_bin_path)
402
+ # get_auth_by_dump()
403
+ # + Fast
404
+ # - Requires admin
405
+
406
+ # get_auth_by_pme()
407
+ # + No admin (If have permission to read process)
408
+ # - Slow
409
+ # - Cannot run on macOS
410
+
411
+ # If admin, prefer get_auth_by_dump() over get_auth_by_pme(), vice versa
412
+ methods: List[Callable[[str, bool], Tuple[Optional[str], str]]] = []
413
+ relaunch = True
414
+ viber_auth = None
415
+ msg = ""
416
+
417
+ pme_present = importlib.util.find_spec("PyMemoryEditor") is not None
418
+ if platform.system() == "Darwin":
419
+ methods.append(self.get_auth_by_dump)
420
+ elif platform.system() == "Windows":
421
+ methods.append(self.get_auth_by_dump)
422
+ if pme_present:
423
+ methods.append(self.get_auth_by_pme)
424
+ if check_admin_windows() is False:
425
+ methods.reverse()
314
426
  else:
315
- return self.get_auth_linux(viber_bin_path)
427
+ if not os.path.isfile("/.dockerenv"):
428
+ methods.append(self.get_auth_by_dump)
429
+ if pme_present:
430
+ methods.append(self.get_auth_by_pme)
431
+ if check_admin_linux() is False:
432
+ methods.reverse()
433
+
434
+ for method in methods:
435
+ viber_auth, msg = method(viber_bin_path, relaunch)
436
+ relaunch = False
437
+ if viber_auth is not None:
438
+ break
439
+
440
+ killall("viber")
441
+ return viber_auth, msg
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- __version__ = "2.9.0"
3
+ __version__ = "2.9.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.9.0
3
+ Version: 2.9.1
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -376,11 +376,11 @@ Requires-Dist: mergedeep ~=1.3.4
376
376
  Requires-Dist: numpy >=1.22.4
377
377
  Requires-Dist: Pillow ~=10.3.0
378
378
  Requires-Dist: pyoxipng ~=9.0.0
379
- Requires-Dist: python-telegram-bot ~=21.2
379
+ Requires-Dist: python-telegram-bot ~=21.3
380
380
  Requires-Dist: psutil ~=5.9.8
381
381
  Requires-Dist: PyMemoryEditor ~=1.5.22
382
382
  Requires-Dist: requests ~=2.32.3
383
- Requires-Dist: rlottie-python ~=1.3.5
383
+ Requires-Dist: rlottie-python ~=1.3.6
384
384
  Requires-Dist: signalstickers-client-fork-laggykiller ~=3.3.0.post2
385
385
  Requires-Dist: sqlcipher3-wheels ~=0.5.2.post1
386
386
  Requires-Dist: tqdm ~=4.66.4
@@ -6,7 +6,7 @@ sticker_convert/definitions.py,sha256=ZhP2ALCEud-w9ZZD4c3TDG9eHGPZyaAL7zPUsJAbjt
6
6
  sticker_convert/gui.py,sha256=hZOp2SyEYKbCRm9SRTItBqEk724SHtSqK_Txo0wpL8Q,31194
7
7
  sticker_convert/job.py,sha256=4C2WwB3PFldacqI8UPnM10thM087VLEl9wn6P9_LtS0,26128
8
8
  sticker_convert/job_option.py,sha256=yFwHEhW8Gzp9dfiXakkCREfejAIJhiOxwD4Wlg9jcPk,7805
9
- sticker_convert/version.py,sha256=UUJ5qrYrmZsock_EC-nYp5wKxs3ZAkgVkQPLxSv6l1E,46
9
+ sticker_convert/version.py,sha256=baBhLdXSz6WrhsijOG00KYOzp3-KSIDIG59dfAQPMrQ,46
10
10
  sticker_convert/downloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  sticker_convert/downloaders/download_base.py,sha256=x18bI2mPpbXRnSmStBHEb1IvN-VPCilOHLQUs6YPUEU,4041
12
12
  sticker_convert/downloaders/download_kakao.py,sha256=TCygK-LiSkk3yEYZymZsHVwtW5JmQX6JeIneh25XxFA,14984
@@ -31,7 +31,7 @@ sticker_convert/gui_components/windows/base_window.py,sha256=xBE1peGMPvWsdrFej0C
31
31
  sticker_convert/gui_components/windows/kakao_get_auth_window.py,sha256=AvXB2Q8pAPkKILHTvlLGV9jfBcvskCA4arko4nvBTdo,7115
32
32
  sticker_convert/gui_components/windows/line_get_auth_window.py,sha256=S4ES_lk2-GDvPokZtYALnUc5zW1VbS4WulNqO9K1aSs,3375
33
33
  sticker_convert/gui_components/windows/signal_get_auth_window.py,sha256=kbJPe558lLP4PbPT2mCw4Xgh06FX5mBEZXoW-Q1LvWY,4584
34
- sticker_convert/gui_components/windows/viber_get_auth_window.py,sha256=_LOAhyNEp4OL24i_PsVtXYE01EArH-9gOOdEaFG4H30,4876
34
+ sticker_convert/gui_components/windows/viber_get_auth_window.py,sha256=Ne0DG4wog7Pzw-fPsbr7HX40okFFo1INusVCSwSAQdQ,5051
35
35
  sticker_convert/ios-message-stickers-template/.gitignore,sha256=4uuTph_9eHfqXHUavLOmGOji6aIHOif2bUEU_hCBn4Y,9
36
36
  sticker_convert/ios-message-stickers-template/README.md,sha256=oN0FvJkCWWjSZ3PMrCvY3T1zCsdkZYFgGHAoFh0Kmt8,467
37
37
  sticker_convert/ios-message-stickers-template/.github/FUNDING.yml,sha256=3LlmdSAGDsBA2o_C1iBYTNLwkABnyZuN0zxgPPyd-f8,70
@@ -72,7 +72,8 @@ sticker_convert/resources/compression.json,sha256=tNBGCmFqZ4Bsik1-xtvkOSlRu1uF6K
72
72
  sticker_convert/resources/emoji.json,sha256=sXSuKusyG1L2Stuf9BL5ZqfzOIOdeAeE3RXcrXAsLdY,413367
73
73
  sticker_convert/resources/help.json,sha256=VgRYw5iNQGn_CDA4pTnk5QUO21lsx0JIvWgUV2kHPvY,6906
74
74
  sticker_convert/resources/input.json,sha256=S3CkInBMLrk5OS9aJfuTCDsf_64NOjNT3IKQr7d1hM0,2665
75
- sticker_convert/resources/memdump.sh,sha256=YbdX5C5RyCnoeDUE6JgTo8nQXKhrUw5-kFDx5bQp9tY,651
75
+ sticker_convert/resources/memdump_linux.sh,sha256=YbdX5C5RyCnoeDUE6JgTo8nQXKhrUw5-kFDx5bQp9tY,651
76
+ sticker_convert/resources/memdump_windows.ps1,sha256=CfyNSSEW3HJOkTu-mKrP3qh5aprN-1VCBfj-R1fELA0,302
76
77
  sticker_convert/resources/output.json,sha256=V4OseXEm3O16cAjHDVZRq8-SY-0_7cFFR_cyF-0Y_eQ,1570
77
78
  sticker_convert/uploaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
79
  sticker_convert/uploaders/compress_wastickers.py,sha256=SMPf1_ir30ZKO2ChHspDFuyaufx0XeVBVLOlHmawEdY,6021
@@ -86,7 +87,7 @@ sticker_convert/utils/url_detect.py,sha256=L2QwE2jwN85MoyYsW_4GvBHuoedrlhoIdAmzw
86
87
  sticker_convert/utils/auth/get_kakao_auth.py,sha256=ipAZ1DUd5CMTpUoxRXHVOFC3DKIpxwxpTYAfrOJ6UZ8,9829
87
88
  sticker_convert/utils/auth/get_line_auth.py,sha256=8l8ha2vQmk3rHGvDE7PkcxQXbH3oe62LKbI3qVUtvqc,2196
88
89
  sticker_convert/utils/auth/get_signal_auth.py,sha256=6Sx-lMuyBHeX1RpjAWI8u03qnRu9fmO4p89pd7fowOE,4925
89
- sticker_convert/utils/auth/get_viber_auth.py,sha256=U3_8qxVifiZ7T47PMW6Cdo7CcLJnUW-_rf8QIYL9bYY,9984
90
+ sticker_convert/utils/auth/get_viber_auth.py,sha256=UUdnESATVGj-mrDuM_5wq75ouQFqPvFtdyqjGDqxi5Y,13734
90
91
  sticker_convert/utils/files/cache_store.py,sha256=etfe614OAhAyrnM5fGeESKq6R88YLNqkqkxSzEmZ0V0,1047
91
92
  sticker_convert/utils/files/json_manager.py,sha256=Vr6pZJdLMkrJJWN99210aduVHb0ILyf0SSTaw4TZqgc,541
92
93
  sticker_convert/utils/files/json_resources_loader.py,sha256=flZFixUXRTrOAhvRQpuSQgmJ69yXL94sxukcowLT1JQ,1049
@@ -97,9 +98,9 @@ sticker_convert/utils/media/apple_png_normalize.py,sha256=LbrQhc7LlYX4I9ek4XJsZE
97
98
  sticker_convert/utils/media/codec_info.py,sha256=1QfW3wgZ5vOk7T4XtLHYvJK1x8RbASRPSvhKEPkcu9A,15747
98
99
  sticker_convert/utils/media/decrypt_kakao.py,sha256=4wq9ZDRnFkx1WmFZnyEogBofiLGsWQM_X69HlA36578,1947
99
100
  sticker_convert/utils/media/format_verify.py,sha256=MH68GLJfXeL8WFT8emtj355K5BLAtUX64tQ59nugx2c,5673
100
- sticker_convert-2.9.0.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
101
- sticker_convert-2.9.0.dist-info/METADATA,sha256=aGTUdCCINVKxrj8kM3b5pMpMDKbVu51_uuvVR8ee_2A,51091
102
- sticker_convert-2.9.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
103
- sticker_convert-2.9.0.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
104
- sticker_convert-2.9.0.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
105
- sticker_convert-2.9.0.dist-info/RECORD,,
101
+ sticker_convert-2.9.1.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
102
+ sticker_convert-2.9.1.dist-info/METADATA,sha256=Sim5kcFjuwRWedkvQhuAIyCMmpYRQ-bA3cAIqQiZuFw,51091
103
+ sticker_convert-2.9.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
104
+ sticker_convert-2.9.1.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
105
+ sticker_convert-2.9.1.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
106
+ sticker_convert-2.9.1.dist-info/RECORD,,