
이 왁물원 즉시 신고 앱에 관한 분석임.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
async function sendReport(e, t, n, r) {
const o = await userProfilePromise;
if (!o) return -1;
const s = new Date().getTime(),
a = { type: e, id: t, reasonType: n, reason: r, memberKey: o };
return (
await fetch("https://wakzoo-report.minibox.workers.dev/report", {
method: "POST",
headers: {
"Content-Type": "application/json",
Hash: sha256(JSON.stringify(a) + s),
Timestamp: s,
},
body: JSON.stringify(a),
})
).ok
? 1
: 0;
}
Colored by Color Scripter
cs
wakzoo-report.minibox.workers.dev/report에 POST 요청으로
type, id, reasonType, reason, memeberKey 값을 보냄.
e = type이랑 t = id는 게시판 Type 및 게시글 ID고
reasonType = n은
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
((window.reportData = {
reasons: {
article: [
"욕설/비속어",
"비방",
"광고",
"댓글 논쟁 및 다툼",
"왁물원 외 커뮤 언급",
"팬아트 규정 위반",
"기타",
],
comment: ["욕설/비속어", "비방", "광고", "왁물원 외 커뮤 언급", "기타"],
profile: ["부적절한 프로필"],
},
params: new URLSearchParams(window.location.search),
get type() {
return this.params.get("type") || "article";
},
get author() {
return this.params.get("author") || "";
},
get content() {
return this.params.get("content") || "";
},
get level() {
return this.params.get("level") || "";
},
})
Colored by Color Scripter
cs
위의 {article: string[], comment: string[], profile: string[] } 구조체.
여기까지는 문제가 없는데 대망의 memberKey = o 부분을 보자.
위의 sendReport의 o = memberKey 값은 getProfile 함수를 참조하는데
1
2
3
4
5
6
7
8
9
10
11
12
13
async function getProfile() {
try {
const e = await fetch(
"https://apis.naver.com/cafe-web/cafe-cafemain-api/v1.0/cafes/27842958/my",
{ credentials: "include" },
),
t = await e.json(),
n = t?.result?.memberKey;
return n;
} catch (e) {
return ;
}
}
Colored by Color Scripter
cs
이 getProfile은 위의 apis.naver.com 함수를 통해서 호출하는데
https://developers.naver.com/docs/common/openapiguide/apilist.md#%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EB%B0%A9%EC%8B%9D-%EC%98%A4%ED%94%88-api
당연히 네이버가 제공하는 공식 오픈 API가 아니라 사용자의 아이디 인증 값을 무단으로 들고 네이버가 제공하지 않는 API를 강제로 호출해서 값을 받아옴.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"result": {
"memberKey": "식별 유저 키",
"nickname": "----",
"profileImageUrl": "https://skip/icon21.png",
"joinedAt": 17000000000,
"memberLevel": {
"level": 1,
"levelName": "새싹멤버",
"levelIconId": 5,
"config": {
"needArticleCount": 0,
"needCommentCount": 0,
"needVisitCount": 0,
"needWeeksAfterJoinCount": 0,
"levelUpPolicy": "MANUAL"
}
},
"memberStat": {
"articleCount": -1,
"commentCount": -1,
"replyCount": -1,
"visitCount": -1
}
}
}
Colored by Color Scripter
cs
그리고 이 API 호출 값은 위와 같은 JSON 형식으로 출력이 되는데
이 왁물원 즉시 신고 앱은 보낸 사람의 인증된 식별자를 네이버가 허락하지 않은 API를 가지고 무단으로 보내는 거임.

그리고 이 분은

이런 거랑

https://minibox.xyz/
https://github.com/minibox24
https://github.com/wakscord
https://github.com/wakscord/afreeca/blob/main/pyproject.toml
왁스코드 팀 멤버기도 함.

Minibox님. 같은 개발자로서 아무리 왁물원 내부에서 쓰는 거라고는 하지만
그.... 같은 왁물원 회원님들의 개인 정보는 제대로 관리하셔야 되는 거 아니에요????
약관에도 금지로 못박혀있다던데 네이버도 참전하나
호오....네이버 카페에서 일어난 일을 기존에 가지고 있던 개인정보를 통해 자체 API로 조치한다는 건가?
또 죠졌구나 끼얏호우
내가보기엔 네이버에서 원래 안주는정보를 강제로 탈취해서 쓰는거 같아보이는데?
내가 제대로 이해했나 모르겠네.
ㅋㅋㅋㅋ개인용으로 쓰는거야 안들키면 장땡인건데
미친짓을 다보겠네 ㅋㅋ ㅋㅋㅋㅋㅋ
기업이 ↗으로 보이나보나
약관에도 금지로 못박혀있다던데 네이버도 참전하나
네이버는 카페 내에서 음원 무단반포한거 때문에 진작 참전중이었어
또 죠졌구나 끼얏호우
호오....네이버 카페에서 일어난 일을 기존에 가지고 있던 개인정보를 통해 자체 API로 조치한다는 건가?
내가 제대로 이해했나 모르겠네.
내가보기엔 네이버에서 원래 안주는정보를 강제로 탈취해서 쓰는거 같아보이는데?
커스텀 확장을 만들어서 왁물원의 안 좋은 글(이라고 가정합시다)을 제보하는 앱임.
단순히 HTML DOM을 파싱해서 유저의 닉네임 정도만 보내면 나도 그려려니 하는데
네이버가 내부적으로 쓰는 API를 가지고 공개되면 안되는 개인 식별자 정보(위의 memberKey)를 수집해서 통째로 자기 서버에 보냄.
그러면 네이버 정보망에서 데이터를 갈취하는 구조임?
허...네이버 내부 데이터를 갈취한거라고 봐도 되겠네?
뭔 배짱이야....
그 식별정보를 통으로 수집해다 보내는게 가능하단건 네이버의 문제도 생각해볼수 있는거임?
아님 어쩔 수 없는 부분인거야??
근데 이런거 나오면 누가 신고하긴 하겠지?
ㅋㅋㅋㅋ개인용으로 쓰는거야 안들키면 장땡인건데
미친짓을 다보겠네 ㅋㅋ ㅋㅋㅋㅋㅋ
기업이 ↗으로 보이나보나