Add tests

This commit is contained in:
stulle123 2023-09-06 20:51:55 +02:00
parent a372afb1b0
commit 6167927dd9
57 changed files with 635 additions and 0 deletions

View File

@ -0,0 +1,8 @@
# pyproject.toml
[tool.pytest.ini_options]
pythonpath = [
".", "lib",
]
testpaths = [
"tests",
]

Binary file not shown.

View File

@ -0,0 +1,6 @@
body_length: 20
body_payload: {pr: 1, r: 1}
body_type: 0
id: 10006
loco_command: BLSYNC
status_code: 0

View File

@ -0,0 +1,6 @@
body_length: 60
body_payload: {chatId: 9388759392670092, sc: 0, st: 0, token: 1693554522}
body_type: 0
id: 10016
loco_command: CHATONROOM
status_code: 0

View File

@ -0,0 +1,23 @@
body_length: 677
body_payload:
a: [405368327, 405368740]
c: 9388759392670092
f: true
l: 0
m: []
o: 1693554522
pct: null
pi:
- {cs: '', ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAykBFu1jEsa4PW2keOTSAELXE/VCJqGqiYmc9J0NiYAGFZO5R1vcziBg957PJAGL6U3Ut8Y+iNpDyEk8310pswQVZL1r/AJEJL/WPUgyVT0xk40VC72xYGasi/Cao7Cq3ZJo+rk3tCQx7RCGA0GtyosoEvj0yCNI4/NH9TJhkaKXmFgWwp9d42m75TmGHFFbvEkPyFXtcwmNhJH3cgVHAMlMCaspedPHlK8FAdl0jt20VqaScN4VSx7E//9VX2tcMpM/9R80QX/42lD/62r2eC8tO+9jGuJWl0SKOidDXGF4061SleosWZMy2TyS5sk+/Bb777I9GSoJ0bge5wXyaGwIDAQAB,
pt: 3124392943946588704, sk: 0PahpeVCuIzcuIYql9HbFGc4J7Tl9CNTsRqj4ByvvCY=, u: 405368327}
r: null
sc: 3125740649914852441
status: 0
sui: 0
t: SDirectChat
w: [3125740641498169344, 3125740641498169344]
body_type: 0
id: 10016
loco_command: CHATONROOM
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,7 @@
body_length: 99
body_payload: {MCCMNC: '310260', appVer: 10.3.3, lang: en, ntype: 3, os: android,
userId: 405368740}
body_type: 0
id: 10002
loco_command: CHECKIN
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,6 @@
body_length: 0
body_payload: !!binary |
body_type: 0
id: 0
loco_command: ''
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,8 @@
body_length: 30
body_payload:
mi: [405368327]
mu: false
body_type: 0
id: 10013
loco_command: GETLPK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,11 @@
body_length: 520
body_payload:
pi:
- {cs: '', ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAykBFu1jEsa4PW2keOTSAELXE/VCJqGqiYmc9J0NiYAGFZO5R1vcziBg957PJAGL6U3Ut8Y+iNpDyEk8310pswQVZL1r/AJEJL/WPUgyVT0xk40VC72xYGasi/Cao7Cq3ZJo+rk3tCQx7RCGA0GtyosoEvj0yCNI4/NH9TJhkaKXmFgWwp9d42m75TmGHFFbvEkPyFXtcwmNhJH3cgVHAMlMCaspedPHlK8FAdl0jt20VqaScN4VSx7E//9VX2tcMpM/9R80QX/42lD/62r2eC8tO+9jGuJWl0SKOidDXGF4061SleosWZMy2TyS5sk+/Bb777I9GSoJ0bge5wXyaGwIDAQAB,
pt: 3124392943946588704, sk: 0PahpeVCuIzcuIYql9HbFGc4J7Tl9CNTsRqj4ByvvCY=, u: 405368327}
status: 0
body_type: 0
id: 10013
loco_command: GETLPK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,6 @@
body_length: 21
body_payload: {chatId: 4884554736017431}
body_type: 0
id: 10007
loco_command: GETMEM
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,19 @@
body_length: 715
body_payload:
members:
- {accountId: 262855419, fullProfileImageUrl: '', linkedServices: '', nickName: furztrocken,
originalProfileImageUrl: '', profileImageUrl: '', statusMessage: '', type: -999999,
userId: 405368740, ut: 0}
- {accountId: 0, fullProfileImageUrl:
https://p.kakaocdn.net/th/talkp/wkvq5HO4yw/K2H6hBZUBidOkF4i5yu1p0/pu5dpg_640x640_s.jpg,
linkedServices: '', nickName: KakaoTalk, originalProfileImageUrl:
https://p.kakaocdn.net/th/talkp/wkvq5HO4yw/K2H6hBZUBidOkF4i5yu1p0/pu5dpg_640x640_s.jpg,
profileImageUrl:
https://p.kakaocdn.net/th/talkp/wkvq5HO4yw/K2H6hBZUBidOkF4i5yu1p0/pu5dpg_110x110_c.jpg,
statusMessage: KakaoTeam, type: -999999, userId: 69758567, ut: 1}
status: 0
token: 1693552382
body_type: 0
id: 10007
loco_command: GETMEM
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,8 @@
body_length: 45
body_payload:
mi: [405368327]
pt: [3124319739752240031]
body_type: 0
id: 10014
loco_command: GETPK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,14 @@
body_length: 1014
body_payload:
pi:
- {cs: '', ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo1v7+3uOUiAJboG0rVrcoKDi31CuGWPS5h0aKCOwFxY+Epd7MLsCar1FY7tpaz4E0eDse3J60FfRmohDky30f4jVpjTVF4U18VRJY6ex8yAR80/ZLVPbzcOnEwWOYsD+6WzY7UipoQn6osx+0rsTy86WndlSouKXm3cJmFFoIXFupTXMlvU44gQOhXlYOXs+jNnL7eL+6pJS76/mYXoLX1vEtCi3HfdXm3jw5aQMIjCCIRNE375xZz8ZwVyFXMu3A780uWbLPPs/5uPyYZnBCFdunqq/mWDjMeYnia2ncUyN7Il18EGQ8dxQqA26bEZ8A5DV5PEzzUDRIPkxWg2pGwIDAQAB,
pt: 3124319739752240031, sk: x6yH7enPDewXgW+pI4gUTO1n9Yw2M6hTI9jQgl8goLU=, u: 405368327}
- {cs: '', ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAykBFu1jEsa4PW2keOTSAELXE/VCJqGqiYmc9J0NiYAGFZO5R1vcziBg957PJAGL6U3Ut8Y+iNpDyEk8310pswQVZL1r/AJEJL/WPUgyVT0xk40VC72xYGasi/Cao7Cq3ZJo+rk3tCQx7RCGA0GtyosoEvj0yCNI4/NH9TJhkaKXmFgWwp9d42m75TmGHFFbvEkPyFXtcwmNhJH3cgVHAMlMCaspedPHlK8FAdl0jt20VqaScN4VSx7E//9VX2tcMpM/9R80QX/42lD/62r2eC8tO+9jGuJWl0SKOidDXGF4061SleosWZMy2TyS5sk+/Bb777I9GSoJ0bge5wXyaGwIDAQAB,
pt: 3124392943946588704, sk: 0PahpeVCuIzcuIYql9HbFGc4J7Tl9CNTsRqj4ByvvCY=, u: 405368327}
status: 0
body_type: 0
id: 10014
loco_command: GETPK
status_code: 0

View File

@ -0,0 +1,7 @@
body_length: 70
body_payload:
ts: [2, 3, 11, 12, 4, 9, 10, 15]
body_type: 0
id: 10005
loco_command: GETTOKEN
status_code: 0

View File

@ -0,0 +1,9 @@
body_length: 179
body_payload:
os: [0, 0, 0, 1, 0, 0, 0, 0]
status: 0
ts: [2, 3, 11, 12, 4, 9, 10, 15]
body_type: 0
id: 10005
loco_command: GETTOKEN
status_code: 0

View File

@ -0,0 +1,22 @@
body_length: 346
body_payload:
MCCMNC: '310260'
appVer: 10.3.3
bg: false
chatIds: []
duuid: 295c990ec4b3470b9df03827b4a9e38b5caf17cfc010bb18abab9aee622ec5f8
lang: en
lastTokenId: 0
lbk: 0
maxIds: []
ntype: 3
oauthToken: 55027f93d571437fb5c602a526a77ee300000016935523756660010yGWgXyzccO
os: android
prtVer: '1'
revision: 0
rp: !!binary |
AAD//wAA
body_type: 0
id: 10003
loco_command: LOGINLIST
status_code: 0

View File

@ -0,0 +1,22 @@
body_length: 346
body_payload:
MCCMNC: '310260'
appVer: 10.3.3
bg: false
chatIds: []
duuid: 295c990ec4b3470b9df03827b4a9e38b5caf17cfc010bb18abab9aee622ec5f8
lang: en
lastTokenId: 3125722688938653164
lbk: 1693552381
maxIds: []
ntype: 3
oauthToken: 55027f93d571437fb5c602a526a77ee300000016935523756660010yGWgXyzccO
os: android
prtVer: '1'
revision: 28
rp: !!binary |
AQD//wEA
body_type: 0
id: 10011
loco_command: LOGINLIST
status_code: 0

View File

@ -0,0 +1,49 @@
body_length: 1499
body_payload:
chatDatas:
- a: 2
c: 4884554736017431
i: [69758567]
k: [KakaoTalk]
l: {attachment: "{\"P\":{\"TP\":\"Feed\",\"ME\":\"KakaoTalk Login Attempt\",\"\
SID\":\"plusfriend_tms\",\"DID\":\"https://auth.kakao.com/fa/main.html?close_on_back=true&close_on_completion=true&page=block_try_talk_login&token=%2FdGRqWvV%2F5kbRw%2B%2FD1MEE8DtZEr7AEABKCrv3piI8us%3D\"\
,\"SDID\":\"69758567\",\"FW\":false,\"KV\":true,\"AD\":false,\"A\":{\"version\"\
:1,\"code\":\"34O1972BXONLsjAcpwrH1ivompzIKPpkfJP8Chtqu7k=\",\"createdAt\"\
:1693552120617}},\"C\":{\"TI\":{\"FT\":true,\"TD\":{\"T\":\"KakaoTalk Login
Attempt\",\"D\":\"KakaoTalk Login Attempt\\n\\n-Date : Fri Sep 1 16:08 (Korea
Standard Time/UTC+9)\\n-Device : SDK_GPHONE_ARM64\\n-IP : 83.171.160.13\\
n\\nIf you don't recognize this activity, you may temporarily lock your account
to protect it.\\n\\n\"}},\"BUL\":[{\"BU\":{\"T\":\"Lock My Account\",\"HL\"\
:null},\"L\":{\"LMO\":\"https://auth.kakao.com/fa/main.html?close_on_back=true&close_on_completion=true&page=block_try_talk_login&token=%2FdGRqWvV%2F5kbRw%2B%2FD1MEE8DtZEr7AEABKCrv3piI8us%3D\"\
}}],\"BUT\":1}}", authorId: 69758567, chatId: 4884554736017431, logId: 3125720503930142720,
message: KakaoTalk Login Attempt, msgId: 1693552192251, prevId: 3124400535045228544,
referer: 0, sendAt: 1693552121, type: 71}
ll: 3125720503930142720
m: null
ml: 3123783401472000000
mmr: 0
n: 2
o: 0
p: true
s: 3122239915491457024
t: PlusChat
delChatIds: [4503599627370497]
eof: true
kc: []
lastTokenId: 3125740458250115451
lbk: 1693552381
ltk: 0
mcmRevision: 0
minLogId: 3123783401472000000
pkToken: 3125722692958571562
revision: 28
revisionInfo: '[]'
rp: !!binary |
AQABAAEA
sb: 1
status: 0
userId: 405368740
body_type: 0
id: 10011
loco_command: LOGINLIST
status_code: 0

View File

@ -0,0 +1,34 @@
body_length: 1249
body_payload:
c: 9388354540351878
nc: true
pi:
- {cs: '', ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyfkeppzP/qOIUXRqzHt+KjE/sz5tMCwf3Y7Xz+SoDU2kYVTjZS1NWtNMT4gFhiVVsX+uwdwEU0ijgg07zX9GM45HZJoj+Wrb58pNHBUqfksR/oXcX5jBASDh3Oks7Naw2FLdtFdqh1uISzYKA7Ubo0C8ep4N7PVYJdJvsa83nFYbfVi7WTCZJqixla4of+yVaj+XNq/+n8hew8pJEW2hx1szJjqfZSskTTUwASiWBTSdHktnv6y7N8Ls32buAfZu+Oqzw5DRJrWL8iLLx9hkM1T5dPTrc2RcabuG/YiamPaVN9P1iGz2HM9b0fUBFvH8e8REaujlOQVr3cyl/rezdQIDAQAB,
pt: 3122418946040168677, sk: odgQ7ds/Pz9AlC7kNSVCLFHZAvRCMUVPzc3R3FZlqAI=, u: 405368327}
r:
activeMemberIds: [405368740, 405368327]
chatId: 9388354540351878
lastLogId: 0
lastMessage: null
lastUpdatedAt: null
members:
- {accountId: 262855419, countryIso: DE, fullProfileImageUrl: '', linkedServices: '',
nickName: furztrocken, originalProfileImageUrl: '', profileImageUrl: '', statusMessage: '',
suspended: false, type: -999999, userId: 405368740}
- {accountId: 256190398, countryIso: DE, fullProfileImageUrl: '', linkedServices: '',
nickName: peterplan, originalProfileImageUrl: '', profileImageUrl: '', statusMessage: '',
suspended: false, type: -999999, userId: 405368327}
metaRevisions: null
newMessageCount: -1
o: 1693159158
pct: null
pushAlert: null
type: SDirectChat
watermarks: [3122424091315798016, 3122424091315798016]
sc: 3122424099724080067
status: 0
body_type: 0
id: 10291
loco_command: SCREATE
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,7 @@
body_length: 25
body_payload:
mi: [405368327]
body_type: 0
id: 10015
loco_command: SCREATE
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,34 @@
body_length: 1249
body_payload:
c: 9388759392670092
nc: true
pi:
- {cs: '', ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAykBFu1jEsa4PW2keOTSAELXE/VCJqGqiYmc9J0NiYAGFZO5R1vcziBg957PJAGL6U3Ut8Y+iNpDyEk8310pswQVZL1r/AJEJL/WPUgyVT0xk40VC72xYGasi/Cao7Cq3ZJo+rk3tCQx7RCGA0GtyosoEvj0yCNI4/NH9TJhkaKXmFgWwp9d42m75TmGHFFbvEkPyFXtcwmNhJH3cgVHAMlMCaspedPHlK8FAdl0jt20VqaScN4VSx7E//9VX2tcMpM/9R80QX/42lD/62r2eC8tO+9jGuJWl0SKOidDXGF4061SleosWZMy2TyS5sk+/Bb777I9GSoJ0bge5wXyaGwIDAQAB,
pt: 3124392943946588704, sk: 0PahpeVCuIzcuIYql9HbFGc4J7Tl9CNTsRqj4ByvvCY=, u: 405368327}
r:
activeMemberIds: [405368740, 405368327]
chatId: 9388759392670092
lastLogId: 0
lastMessage: null
lastUpdatedAt: null
members:
- {accountId: 262855419, countryIso: DE, fullProfileImageUrl: '', linkedServices: '',
nickName: furztrocken, originalProfileImageUrl: '', profileImageUrl: '', statusMessage: '',
suspended: false, type: -999999, userId: 405368740}
- {accountId: 256190398, countryIso: DE, fullProfileImageUrl: '', linkedServices: '',
nickName: peterplan, originalProfileImageUrl: '', profileImageUrl: '', statusMessage: '',
suspended: false, type: -999999, userId: 405368327}
metaRevisions: null
newMessageCount: -1
o: 1693554522
pct: null
pushAlert: null
type: SDirectChat
watermarks: [3125740641498169344, 3125740641498169344]
sc: 3125740649914852441
status: 0
body_type: 0
id: 10015
loco_command: SCREATE
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,13 @@
body_length: 1006
body_payload: {cs:
GT8Z+D5U4FNWyD3EDrJw+udvhP4F27EgP6D7Cx7x4Qqxr9f4ghnHFNURIyZfWtMMfY/9HuNrn1YjAhrcVayoAQ==,
ek:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsfQxCfx1vkzioz8UtBR/YfWaUGHKZUuXyg1Bhbi8fAtUORvX4tDOc5wb+zYfq/Vb3kywuJsnQo8RHQ6pBTcxHNc7Vcl1RDAynnysFdJNqjXgKRN/egcPQXYb0Hi3r1VI4bWH8TGEJm8AEKzq5PtSo46X1SR/e6wOa3IxRv2hFTKT7zdp7ThwuhpVx9GxuqyEcKSHHTTk+z5V10JuO9EKZR8ybuDv9FyxIVR5BVO+RSC4dCpjSZf1h/j6frft4/TfYkr1KlycqWW04fFiEUmADWAsV7BMB+kEofxIQUpCVO8X7Eo3lrKA3neetLZ7rX/e5RS4LbrkGK4AzcNBsSLKawIDAQAB,
sd:
0ed8pkaGnT1Iy+xFMz0wO0zsqwlb/PkMWA8AyNO0gC1bqLDifdj3KFDtwPksXd6sGo5JyoZKFnR6ffnmCGNUBg==,
sk: ZZ5eu1z1LSETep51/j2F31uRpqYh7cJISSs0SHhcpfI=, sr:
Cz42sP8mM8FFReM9J7c/BqXjo7FiJcDkLwoQ9I9F9gIrzIUoxohmz8L2pCqB2Hcb4sTG/xkAHnvgMn3Xvou/PhDBh7X0e4ew4oU9rGP+MAkOLL2UqXJy+oI+N/Tw25J1yddZkNrFrC2+HtVyLJjsWgenoKDVKOk/qJo1TBYVLaWiIuQz560hzhv7t+z0807Pj0NihvegLx5EE0B9pGa4jJQL7jtYWPEa4/PxeeE5OIbWes71RqD6PzEecIj9r/DZ8xYoaHwqodQbcmv972CWNh3MJPZhJxuRquxTI1BhF9t0/TVMPp4GzR/s+AM8341lwDRoIdC9ANNk/xMs/0Y6Pg==}
body_type: 0
id: 10004
loco_command: SETPK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,6 @@
body_length: 33
body_payload: {pt: 3125722692958571562, r: true, status: 0}
body_type: 0
id: 10004
loco_command: SETPK
status_code: 0

View File

@ -0,0 +1,16 @@
body_length: 911
body_payload:
c: 9388354540351878
mi: [405368327, 405368740]
mp: [3122418946040168677, 3122241999402188784]
pt: 3122241999402188784
s:
QjlDPq44qpmfBcO6+B4H99S6kpwV+Ih7KmoYCd7Y7nXLpWrGG34IYEVgg05RAxA3quwsNskiodMtePciZQ+RAw==
sc: 3122424099724080067
sk: [
XEnm14ddEydSisfjnb8LUO5vUmBd8EGWss6D0XACcgFKhOQ4370KQy+jDWszAjnJYeToKkBlPbToGjRk6efA4QtBqQeXCRoEpH+Z3bwtFjxcLwGRK22L2qOlxF8fjaJUswBkonLv9M2DeyZp7So2EsLQELrdwgggmry1uxnZqblXOG+6vnq3sYsR2ef7L45Ui2gaIUobEq4HgJJQrE8zp61muexPOMv3Nbj1pRduStBhy9MQ3ZZEuNPSg/6/4lpww8blIDT0HJxrOmXMt+rboaq3hSUfTR/fMIA/Xsxk7PM+nRtDhIsAib8EO5Uwl2L+fWv7QO8DQKM/5ivfgp9fXw==,
Gxh/DpE4+OozxtQmEbmc3Io/Gq+Ynoqpf4IxhSKYdINdePYR0pgggMRUSgJDUe9AkBd5ZiaconSC3CPA9uHdTSvzmHSvHWZJY6po6SbnPnTrSljdQmb6wcVVKKzPXMokp2p4AghGO+U/fIB5O9c0JDnkqgHgkGjsXbgXCZhaaNZpYAypjL8GZwFqnLBKKjJnWsWISD5LUO/78rD++uOvUCg5r+1cxkLH6+BNiU8pGuuCNMnwuowWwG4a8Q0lJjOSKJkV7wtaGEcYmQ0GDYi6n618N168v9VQvLT7P0Mdxaxvl3/KnkupD0IzZENF0odsWMLyNUcSIMfhrM0J7q4A3A==]
body_type: 0
id: 10293
loco_command: SETSK
status_code: 0

View File

@ -0,0 +1,16 @@
body_length: 911
body_payload:
c: 9388354540351878
mi: [405368327, 405368740]
mp: [3122418946040168677, 3122241999402188784]
pt: 3122241999402188784
s:
QjlDPq44qpmfBcO6+B4H99S6kpwV+Ih7KmoYCd7Y7nXLpWrGG34IYEVgg05RAxA3quwsNskiodMtePciZQ+RAw==
sc: 3122424099724080067
sk: [
rmf4zi9VAlvp8YpAECfArw2AdQOg4srpQqNr33TQG2O121NBuZMQV5mrj2ZzIgK3gbPcY8RG7mkt2QNxpe/f9cvJ4BapVMvzmzd/F9TqMhQCpR1c2xNa9zIs7+V7uzTNaRp5mLTMfhb1nvIf5DroHJk+ODyXGH+FTDCrpj1sVpW/p2sJvDuGXRWKYQUCFcXf3/6XdJe9uRaKgPvrfVaW1u4IewhtyvzWZamG0yu6zui3xidQ4eLkZN7L6OJ12tyoeUCVSTB3082BM9Kl4jRg49T1l7EMp3eC/Y6Co+H692//As4+WYbpxZaPn3EzvWnKi7Bd/aWiwKaQBA9eNtxGVQ==,
Gxh/DpE4+OozxtQmEbmc3Io/Gq+Ynoqpf4IxhSKYdINdePYR0pgggMRUSgJDUe9AkBd5ZiaconSC3CPA9uHdTSvzmHSvHWZJY6po6SbnPnTrSljdQmb6wcVVKKzPXMokp2p4AghGO+U/fIB5O9c0JDnkqgHgkGjsXbgXCZhaaNZpYAypjL8GZwFqnLBKKjJnWsWISD5LUO/78rD++uOvUCg5r+1cxkLH6+BNiU8pGuuCNMnwuowWwG4a8Q0lJjOSKJkV7wtaGEcYmQ0GDYi6n618N168v9VQvLT7P0Mdxaxvl3/KnkupD0IzZENF0odsWMLyNUcSIMfhrM0J7q4A3A==]
body_type: 0
id: 10293
loco_command: SETSK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,16 @@
body_length: 911
body_payload:
c: 9388759392670092
mi: [405368327, 405368740]
mp: [3124392943946588704, 3125722692958571562]
pt: 3125722692958571562
s:
rIX8Be5HIKVLNxIUVvCvW0Lt3EZb7NATRksklDRZicAUbJLNfsCaN7wNtSw9dr4g+A1+04lUOqGSpcPSxRWECQ==
sc: 3125740649914852441
sk: [
ozfnEbdrd0618APqMVe26HG6rcbdULhgUSLt46QE9kzuyIPHxYjH2so0fqjkwt3AYGCENeYuPNxFo3NgGFtDNGMxaMcbbidRd/qpwhX6F6Y5gdf1FSGrhn5l5zTEcx6CRhvyz89WlxV/2lFfujaM2qy3tpSTL1NcUqOW2GWyNpLrFSMSIPOd1O4Ad/+1iHiN9ngRVjZWj2XPoXiaiPHh2RE74k9+n5u+2eVqnMKt5lYpX2K6RUNIr5rPnh0JzNruIA0CLbNTpakkIu0BBKkkAy0JHb9ccDWntCAzfxh3KF9lLy2xX9YxViAh1rkcl2Fysh2SAj69pXlZWdb4LRR6Sg==,
LbGCBNct8F2hv6JkGH+VvCPYCgVjaBs8SCHPqtjd4QJsrlA20rZng81hSL5FhcY+BO8bCzfPzWzK9iPLexDA4BT0TLls8Lt7awP7sz0hK62/HDHDit5ln911+x57Y361eQ2lcJqeOF3Qsa58jyAPfEiiNe6unchcWjZv8Ir5HKos7uEKCCynxmwu9i2Cl91ZVNUeIp7DOchZbg5/XS9tbyxUzf4cRVXmRXlQRePqXPuMy1ClmYX3cectY2waPanfDQxtLtHfESIEgkonyvdvndVRIERNI3ZOiKphHkRGiEJwYJ440j6n2pTvchRkmu4VlrziBxcJiYJvodQveWuHJg==]
body_type: 0
id: 10017
loco_command: SETSK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,6 @@
body_length: 17
body_payload: {status: 0}
body_type: 0
id: 10017
loco_command: SETSK
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,9 @@
body_length: 196
body_payload: {c: 9388759392670092, e: g8M=, m: rNu7YQ==, mid: 1337486070, pt: 3125722692958571562,
s:
2/V7NhvGlBOJJdnqT9rWB3oTVmNVJeC8k3dKe72Vax2DMneXc43fUmM6xSJme4Kp4WyL1wcjIovZ4t1IbaNhCg==,
sc: 3125740649914852441, st: 3125740649914852441, t: 268435457}
body_type: 0
id: 10018
loco_command: SWRITE
status_code: 0

View File

@ -0,0 +1,7 @@
body_length: 73
body_payload: {c: 9388759392670092, l: 3125740656103546881, m: 1337486070, prevId: 0,
s: 1693554522, status: 0}
body_type: 0
id: 10018
loco_command: SWRITE
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,6 @@
body_length: 56
body_payload: {chatId: 9388759392670092, cnt: 1, cur: 0, max: 3125740656103546881}
body_type: 0
id: 10019
loco_command: SYNCMSG
status_code: 0

Binary file not shown.

View File

@ -0,0 +1,15 @@
body_length: 402
body_payload:
chatLogs:
- {attachment: g8M=, authorId: 405368740, chatId: 9388759392670092, logId: 3125740656103546881,
message: rNu7YQ==, msgId: 1337486070, prevId: 0, sInfo: '{"s":"2/V7NhvGlBOJJdnqT9rWB3oTVmNVJeC8k3dKe72Vax2DMneXc43fUmM6xSJme4Kp4WyL1wcjIovZ4t1IbaNhCg==","st":3125740649914852441,"pt":3125722692958571562}',
sendAt: 1693554523, type: 268435457}
isOK: false
jsi: 3125740641498169344
lastTokenId: 3125740663907061601
minLogId: 3123783401472000000
status: 0
body_type: 0
id: 10019
loco_command: SYNCMSG
status_code: 0

View File

@ -0,0 +1,219 @@
import base64
from pathlib import Path
from typing import Final
import pytest
import ruamel.yaml
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from lib.crypto_utils import get_rsa_public_key_pem, rsa_decrypt, rsa_encrypt
from lib.loco_parser import LocoEncryptedPacket, LocoPacket, LocoParser
yaml = ruamel.yaml.YAML(typ="safe", pure=True)
_LOCO_ENYCRYPTED_PACKETS_RAW: Final = [
"blsync_packet_client.raw",
"chatonroom_packet_client.raw",
"chatonroom_packet_server.raw",
"checkin_packet_client.raw",
"empty_loco_packet.raw",
"getlpk_packet_client.raw",
"getlpk_packet_server.raw",
"getmem_packet_client.raw",
"getmem_packet_server.raw",
"getpk_packet_client.raw",
"getpk_packet_server.raw",
"gettoken_packet_client.raw",
"gettoken_packet_server.raw",
"loginlist_packet_client.raw",
"loginlist_packet_client_0.raw",
"screate_packet_client.raw",
"screate_packet_server.raw",
"setpk_packet_client.raw",
"setpk_packet_server.raw",
"setsk_packet_client_0.raw",
"setsk_packet_server.raw",
"swrite_packet_client.raw",
"syncmsg_packet_client.raw",
"syncmsg_packet_server.raw",
]
_LOCO_PACKETS_YAML: Final = [
"blsync_packet_client.yaml",
"chatonroom_packet_client.yaml",
"chatonroom_packet_server.yaml",
"checkin_packet_client.yaml",
"empty_loco_packet.yaml",
"getlpk_packet_client.yaml",
"getlpk_packet_server.yaml",
"getmem_packet_client.yaml",
"getmem_packet_server.yaml",
"getpk_packet_client.yaml",
"getpk_packet_server.yaml",
"gettoken_packet_client.yaml",
"gettoken_packet_server.yaml",
"loginlist_packet_client.yaml",
"loginlist_packet_client_0.yaml",
"screate_packet_client.yaml",
"screate_packet_server.yaml",
"setpk_packet_client.yaml",
"setpk_packet_server.yaml",
"setsk_packet_client_0.yaml",
"setsk_packet_server.yaml",
"swrite_packet_client.yaml",
"syncmsg_packet_client.yaml",
"syncmsg_packet_server.yaml",
]
_IV: Final = 16 * b"\x00"
_KAKAOTALK_RSA_PUBLIC_KEY: Final = b"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9itiCdmMHYWJXq4GE0Xm\ncYy2/ifVv7lYZgPkqw2hjhhhPRYBGchuWUrWynqK0lQODvRIOyM3Q9khv8CPKss2\nipkBbQ4HHRSmpR346TbMQrTUjUCDSSfyY8Awy+DjGzWfn46uY0sHutP6wbGNhlmq\nc8mLP1mjAePYXE3QL1o1oWxhMqyRNY/RSrYMnqowt4u1/Fb3TVQ99uq6q7GkSWJC\nW+ALzx8eTHqnDUl7VqIS0EfNrHsExaR8m5HubWjfg8ZGX4+NNd9kNEINXTVfAcGH\nZ6XuMT1bdeW/F3IbAslbfH7Uj3LRTQhZ8iDzG19DIQy73s/IajPmQllFJaDdIr/w\nFQIDAQAB"
_SHARED_SECRET: Final = b"SHARED_SECRET"
def get_rsa_2048_key_pair():
key_pair_pem = b"-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2K2IJ2YwdhYle\nrgYTReZxjLb+J9W/uVhmA+SrDaGOGGE9FgEZyG5ZStbKeorSVA4O9Eg7IzdD2SG/\nwI8qyzaKmQFtDgcdFKalHfjpNsxCtNSNQINJJ/JjwDDL4OMbNZ+fjq5jSwe60/rB\nsY2GWapzyYs/WaMB49hcTdAvWjWhbGEyrJE1j9FKtgyeqjC3i7X8VvdNVD326rqr\nsaRJYkJb4AvPHx5MeqcNSXtWohLQR82sewTFpHybke5taN+DxkZfj40132Q0Qg1d\nNV8BwYdnpe4xPVt15b8XchsCyVt8ftSPctFNCFnyIPMbX0MhDLvez8hqM+ZCWUUl\noN0iv/AVAgMBAAECggEAMUOqWZVHZKsSPDfwcE/3V7cU8hUPwlA54CScUR0nvTOk\n1iA+tSW267i99oSCnqgCrjx17hvUlgfwqJrFLAfCEQeg0O3TP58f4IB4jVeRljHx\nLZmBDJVpfUv7l/mYCZx4JurbfHSKBfohPz0kuQPdyFFHxDRQmnK6HHLYHHndrMGK\nzmuH+DigjPy2WIJvuWnMQE6kMnIdncHu6PpuZb8syryYQSWEgXUeUL96CHdhNwNk\nayXWRli6uqVM9yBYPUHU11V7LrZYoFp3T1P81Gd+SVSUfMumS37l18q7fZXbrRr8\nsRWes75cwulp5KZsmsQVBaMbl4Dm3iClDJ5nSqpPIQKBgQD/FnftIGnKuiSX382J\nJdGHzR2XkYHiiL/zZEkLAT+5NjJRS6UNeK5o/M1L6boPycvytzJmH0jV0sC3X4SY\n7XOGXnmJmnzG2zxDrdge+j+KGJ3i0eTdQBE8+kC1NUCZHSEYRN4MZEzHfAHop5NF\nIaHBbDnqHOudomrb4DrIow6/5QKBgQD3DL/1jK4qIrryWuPzN7cpWft6vwHG7t+q\nnf9a9tjZ5gec/I6TvbM0Qj4ok005NjwUI1BhR2OGoSd/Axd59Xx4P+Q4mNPiysRi\n+ItmQlnV3U6l1m2A2iznF1/2127pQT7NUfaDoX9MNSOzLCCGBWqSktP+FhLD8csU\nHWLNelyMcQKBgA1LxoR9pAYFHdMsvzHe3sUNU/WKiBKeviKZn5ULQ58LzCOgpcHG\nAJFIXAsQ67nW8uJ72gyopMtAaPsl52txNQxT8FHT050p4EJG1XUH5jf0gIZKGnvN\n0xgykxze4bcZZZg2Pry2nanoNNFDqtF3p07FrV8ekslspdVAItBCb4phAoGAO9Ta\nqJ1pkMrYe9mHW2Ai++DPBus7gvJXOPsK3Pzrh9ot/dcssJtAy2c/ppQGH9UCt93V\nmbmwYOqmphwZk2/gtT7EBvD8X/C7nzyShjGLkEAIzCEiZBJyzYTbuOxz8AndK9yt\n1zNFoS89dic5uTuWk+j7bo3p/YqRpE15oEoCIAECgYEA6Sj9AJKKdtdhY1xRTJvh\n6r85iW24EVN1K4eZqNLKiu6l7N1zofxfwXlZPOwE5YYN965xVKGHocwL0dk3Js5C\nw5+hHfxWLomnz+c2tv7kkTJTZzKfSR/6gzsdR4kX9hS2bntQdH137RpobvdGcJGe\nh5FwC5Myfu2oxAqtvX6ii9g=\n-----END PRIVATE KEY-----\n"
return serialization.load_pem_private_key(key_pair_pem, password=None)
@pytest.fixture
def parser():
return LocoParser()
@pytest.fixture(params=_LOCO_PACKETS_YAML)
def loco_packet_packet(request):
with open(Path(request.param), encoding="utf-8") as packet_yaml:
loco_packet_dict = yaml.load(packet_yaml)
return LocoPacket(
loco_packet_dict.get("id"),
loco_packet_dict.get("status_code"),
loco_packet_dict.get("loco_command"),
loco_packet_dict.get("body_type"),
loco_packet_dict.get("body_length"),
loco_packet_dict.get("body_payload"),
)
@pytest.fixture
def loco_encrypted_packet():
return LocoEncryptedPacket(length=0, iv=_IV, payload=b"")
@pytest.fixture(params=zip(_LOCO_ENYCRYPTED_PACKETS_RAW, _LOCO_PACKETS_YAML))
def loco_zip(request):
return request.param
def test_parse(parser, loco_zip):
encrypted_loco_packet_path, loco_packet_yaml_path = loco_zip
with open(encrypted_loco_packet_path, "rb") as packet_raw, open(
loco_packet_yaml_path, encoding="utf-8"
) as packet_yaml:
encrypted_loco_packet = packet_raw.read()
loco_packet_dict = yaml.load(packet_yaml)
parser.parse(encrypted_loco_packet)
packet = LocoPacket(
loco_packet_dict.get("id"),
loco_packet_dict.get("status_code"),
loco_packet_dict.get("loco_command"),
loco_packet_dict.get("body_type"),
loco_packet_dict.get("body_length"),
loco_packet_dict.get("body_payload"),
)
assert parser.loco_packet.get_packet_as_dict() == packet.get_packet_as_dict()
def test_inject_public_key(parser, loco_encrypted_packet):
rsa_key_pair = get_rsa_2048_key_pair()
with open(Path("encrypted_screate_packet_with_mitm_key.raw"), "rb") as packet_raw:
encrypted_screate_packet_with_mitm_key = packet_raw.read()
with open(Path("screate_loco_packet.yaml"), encoding="utf-8") as packet_yaml:
screate_dict = yaml.load(packet_yaml)
original_public_key = screate_dict.get("body_payload").get("pi")[0].get("ek")
assert original_public_key
screate_packet = LocoPacket(
screate_dict.get("id"),
screate_dict.get("status_code"),
screate_dict.get("loco_command"),
screate_dict.get("body_type"),
screate_dict.get("body_length"),
screate_dict.get("body_payload"),
)
parser.loco_packet = screate_packet
assert parser.loco_packet
parser.loco_encrypted_packet = loco_encrypted_packet
assert parser.loco_encrypted_packet
assert parser.inject_public_key(rsa_key_pair) == (
original_public_key.encode(),
encrypted_screate_packet_with_mitm_key,
)
def test_get_shared_secret(parser):
rsa_key_pair = get_rsa_2048_key_pair()
with open(
Path("setsk_loco_packet_sk_enc_with_mitm_key.yaml"), encoding="utf-8"
) as packet_yaml:
setsk_dict = yaml.load(packet_yaml)
encrypted_shared_secret = setsk_dict.get("body_payload").get("sk")[0]
decrypted_shared_secret = rsa_decrypt(
base64.b64decode(encrypted_shared_secret), rsa_key_pair
)
assert decrypted_shared_secret == _SHARED_SECRET
setsk_packet = LocoPacket(
setsk_dict.get("id"),
setsk_dict.get("status_code"),
setsk_dict.get("loco_command"),
setsk_dict.get("body_type"),
setsk_dict.get("body_length"),
setsk_dict.get("body_payload"),
)
parser.loco_packet = setsk_packet
assert parser.loco_packet
assert parser.get_shared_secret(rsa_key_pair) == decrypted_shared_secret
def test_encrypt_shared_secret(parser, loco_encrypted_packet):
with open(Path("encrypted_setsk_packet.raw"), "rb") as packet_raw:
encrypted_setsk_packet = packet_raw.read()
with open(
Path("setsk_loco_packet_sk_enc_with_mitm_key.yaml"), encoding="utf-8"
) as packet_yaml:
setsk_dict = yaml.load(packet_yaml)
setsk_packet = LocoPacket(
setsk_dict.get("id"),
setsk_dict.get("status_code"),
setsk_dict.get("loco_command"),
setsk_dict.get("body_type"),
setsk_dict.get("body_length"),
setsk_dict.get("body_payload"),
)
parser.loco_packet = setsk_packet
assert parser.loco_packet
parser.loco_encrypted_packet = loco_encrypted_packet
assert parser.loco_encrypted_packet
assert (
parser.encrypt_shared_secret(_SHARED_SECRET, _KAKAOTALK_RSA_PUBLIC_KEY)
== encrypted_setsk_packet
)