EXHENTAI 的鉴权

[//]: #(Author : Yogaskung)

[//]: #(Licensed under the Creative Commons Attribution Share Alike 4.0.)


大佬,我怎么进不了里站啊

EXHENTAI 的鉴权

本文会介绍 exhentai.org 的鉴权过程

https://exhentai.org/

如果浏览器中并没有存储 exhentai.org 域的任何 cookie,对此 URL 的访问会收到 302 ,并转到

https://forums.e-hentai.org/remoteapi.php?ex={BASE64_ENCODED_1}

在本例中,此 URL 为

https://forums.e-hentai.org/remoteapi.php?ex=MTYwNzc4MzMxNS0xMzQ4NmQ5YmQ5

其中 BASE64_ENCODED_1 解码为 1607783315-13486d9bd9

使用 此脚本 [fars.ee] ,收到的 BASE_ENCODED_1 解码后如下

1
2
3
4
5
6
7
8
9
10
11
1607782418-64f0c6df6cn
1607782420-0d363dd11bn
1607782422-06becf1aaen
1607782425-0581991b1an
1607782427-e6faec8003n
1607782429-0655c8f640n
1607782431-3becbbc4d0n
1607782433-840ca02d53n
1607782435-53f0a33f24n
1607782438-57914e462en
1607782440-a6056d1795n

第一部分是 UNIX 时间戳,后一部分看起来是某种校验码

https://forums.e-hentai.org/remoteapi.php?ex={BASE64_ENCODED\_1}

此处分为 2 种情况

  1. 对此 URL 发起请求时未登录,即不带任何在 forums.e-hentai.org 或者 .e-hentai.org 的 cookie
    请看下文「未登录」部分

  2. 对此 URL 发起请求时 forums.e-hentai.org 已登陆,即浏览器中有 ipb_member_idipb_pass_hash cookie
    请继续读这一节

本人账号测试时对此 URL 发起请求浏览器发的 cookie 为

ipb_pass_hashipb_session_id 已经替换为随机的 md5sum )
ipb_member_id 已经替换为随机的 7 位数字 )
ipb_topicsread 用 URLencode 解码结果类似 a:1:{i:243xxx;i:1607xxxxxx;}

1
2
3
4
5
ipb_session_id=69c098ff0097872ff67b9e0f7ac73741;
ipb_topicsread=a%3A1%3A%7Bi%3A243999%3Bi%3A1607999999%3B%7D;
ipb_member_id=1145140;
ipb_pass_hash=002d8ff55cb7ab94776198ed5d759986;
ipb_coppa=0

收到的回复是 200 ,并转到

https://exhentai.org/?poni={BASE64_ENCODED_2}

在本例中,此 URL 为 https://exhentai.org/?poni=MzI1ODEzNC1jM2Fj9999ZmNkMzVlZDA2YWE5MmQzYTI59999MGRjZC0xNjA3Nzg0NjA1LTAxY2I3MTY29999YmRjNWQ1Z99999JjNmRmNGY3MjdiYTBlOGN9999=
(部分字段替换为 9999 )

BASE64_ENCODED_2 解码为
1145140-002d8ff55cb7ab94776198ed5d759986-1607784605-01cb7166ea6bdc5d5d793bc6df4f727ba0e8ce0c

此处第一部分为 ipb_member_id 其后是 ipb_pass_hash ,之后一部分为时间戳,最后的看起来是某种校验码

https://exhentai.org/?poni={BASE64_ENCODED\_2}

对此 URL 的请求会收到 302,并转到 https://exhentai.org ,同时将对 .e-hentai.org 的两个 cookie,以及一个名为 yay 的 cookie,存入 exhentai.org

https://exhentai.org/

此时浏览器携两个 exhentai.org 的 cookie

ipb_member_id ipb_pass_hashyay

对此 URL 的回复是设定名为 igneous 的 cookie

igneousmystery 或者 9 位 的 字母/数字 字符串

浏览器携带 igneous:mystery cookie 访问 exhentai.org 的除 exhentai.org/favicon.ico 任何页面都会收到空回复,看起来就是白屏

https://exhentai.org/favicon.ico: favicon.ico

这是 igneous 回复的统计情况: https://rentry.co/extest

「有权限」即为能收到不是 mystery 的 igneous

未登录

重复上文:

此处分为 2 种情况

  1. 对此 URL 发起请求时未登录,即不带任何在 forums.e-hentai.org 或者 .e-hentai.org 的 cookie

  2. 对此 URL 发起请求时 forums.e-hentai.org 已登陆,即浏览器中有 ipb_member_idipb_pass_hash 等 cookie

如果对 https://forums.e-hentai.org/remoteapi.php?ex={BASE64_ENCODED\_1} 的请求没有携带任何 cookie, 会收到 302,并转到

https://exhentai.org/?poni=no

然后再次 302 转到 https://forums.e-hentai.org/remoteapi.php?ex={BASE64_ENCODED\_1}

然后再次收到 302 转到

https://exhentai.org/?poni=no

以上重复多次最后停止。

其他

  1. exhentai.org 域的所有资源,包括图片和 js 都需要有 cookie 随同请求发送,否则会返回 403.

如何拿到 Sad Panda 图片

exhentai.org 在关站风波之后不再返回 Sad Panda 图片,而是空内容。有一些页面是例外:
比如私人 torrent 的 URL,用无效的 cookie 还可以收到 sadpanda.jpg

1
2
3
4
curl -vL \
-o ./sadpanda.jpg \
'https://exhentai.org/torrent/1813477/4eb41d0bed9898fc2792b009c404a22de9e8495f.torrent' \
-H "cookie: ipb_member_id=114514"

回复的 Header 中有这么一行
Content-Disposition: inline; filename="sadpanda.jpg"

此文件 (体积 9615Byte) 已经上传到 Internet Archive

你可以「右键-另存为」下面这张,注意校验值

1
2
sha256sum sadpanda.jpg
a279e4ccd74cffbf20baa41459a17916333c5dd55d23a518e7f10ae1c288644f sadpanda.jpg

https://ia601407.us.archive.org/33/items/sadpanda_202101/sadpanda.jpg:


Apr 11 更新: 现在已经无法用 torrent url 获取 sadpanda.jpg