├── 2 ├── help.css ├── help.html ├── help2.html ├── help3.html ├── help_development.html ├── help_donation.html ├── help_feature.html ├── help_first.html ├── help_kaicho.html ├── help_menu.html ├── help_other.html ├── help_port.html ├── help_start.html ├── help_update.html ├── mutagen_board.html ├── mutagen_first.html ├── mutagen_help.html ├── mutagen_kashin.html ├── mutagen_language.html ├── mutagen_open.html ├── pd_board.html ├── pd_connection.html ├── pd_gather.html └── pd_interface.html ├── .gitattributes ├── .gitignore ├── README.md ├── board.css ├── kashin.css ├── language.txt ├── license.txt └── view.css /.gitattributes: -------------------------------------------------------------------------------- 1 | # CSS 样式文件 2 | *.css text working-tree-encoding=UTF-8 eol=CRLF 3 | 4 | # HTML 文件 5 | *.html text working-tree-encoding=UTF-8 eol=CRLF 6 | 7 | # JS 文件 8 | #*.js text working-tree-encoding=UTF-8 eol=CRLF 9 | 10 | # UTF-16 文本文件(不常见,用 binary 处理以防止损坏) 11 | language.txt binary 12 | 13 | # 图片(设置为二进制) 14 | *.png binary 15 | *.jpg binary 16 | *.jpeg binary 17 | *.gif binary 18 | 19 | *.md text 20 | 21 | .gitignore text eol=lf 22 | .gitattributes text eol=lf 23 | 24 | * text=auto 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 0/ 2 | 1/ 3 | board.js 4 | help.js 5 | image/ 6 | index.html 7 | kashin.js 8 | view.html 9 | view.js 10 | 11 | -------------------------------------------------------------------------------- /2/help.css: -------------------------------------------------------------------------------- 1 | /*全体*/ 2 | body { 3 | font-size:smaller; 4 | line-height:1.5em; 5 | margin: 1em; 6 | padding: 1em; 7 | font-family: 'Segoe UI', 'Microsoft YaHei', 'Noto Sans SC', sans-serif; 8 | color:#444; 9 | background-color:#e1e1e1; 10 | } 11 | body.helpmenu { 12 | border:1px solid #444; 13 | } 14 | /*html,body{ 15 | scrollbar-base-color: #fff; 16 | scrollbar-track-color: #fff; 17 | scrollbar-face-color: #fff; 18 | scrollbar-shadow-color: #288; 19 | scrollbar-darkshadow-color: #aaa; 20 | scrollbar-highlight-color: #fff; 21 | scrollbar-3dlight-color: #aaa; 22 | }*/ 23 | 24 | p { 25 | margin-left: 10px; 26 | text-indent:0pt; 27 | } 28 | div.version{ 29 | margin: 1.5em 0em 0.5em 0em; 30 | } 31 | span.vtitle{ 32 | font-weight: bold; 33 | font-size: large; 34 | } 35 | span.vdate{ 36 | } 37 | 38 | table.stable { 39 | text-align: left; 40 | border:1px solid #444; 41 | border-collapse: collapse; 42 | max-width: 70em; 43 | } 44 | table.stable th { 45 | min-width: 8em; 46 | } 47 | table.stable th, td { 48 | padding: 2px 6px; 49 | border: 1px solid #aaa; 50 | } 51 | 52 | ul.vlist{ 53 | margin: 0em 0em 1.5em 2em; 54 | } 55 | ul.slist{padding-left:2em;list-style-type: none;} 56 | ul.slist span.stab{float:left;width:10em;position:relative;font-weight:bold;} 57 | 58 | /*li {margin-left: -15px;}*/ 59 | 60 | a:link { color: #0000f0; text-decoration: none } 61 | a:visited { color: #0000f0; text-decoration: none } 62 | a:active { color: #0000f0; text-decoration: none } 63 | a:hover { color: #b000f0; text-decoration: none } 64 | 65 | .quote {color:#080;} 66 | .emphasis{color:#f00;} 67 | 68 | .menu { 69 | background-color:#FFFFFF; 70 | top:0px; 71 | left:0px; 72 | position:absolute; 73 | border:1px solid black; 74 | visibility:hidden; 75 | } 76 | .menu2 { 77 | } 78 | /*メニュー選択の色*/ 79 | .menu3 { 80 | color:#ABFFAC; 81 | } 82 | 83 | .treeview{ 84 | margin: 0; 85 | padding: 0; 86 | } 87 | 88 | .treeview ul{ /*CSS for Simple Tree Menu*/ 89 | margin: 0; 90 | padding: 0; 91 | } 92 | 93 | .treeview li{ /*Style for LI elements in general (excludes an LI that contains sub lists)*/ 94 | background: url(/image/list.gif) no-repeat left center; 95 | list-style-type: none; 96 | padding-left: 20px; 97 | margin-bottom: 3px; 98 | } 99 | 100 | .treeview li.submenu{ /* Style for LI that contains sub lists (other ULs). */ 101 | background: url(closed.gif) no-repeat left 1px; 102 | cursor: hand !important; 103 | cursor: pointer !important; 104 | } 105 | .treeview li.submenu ul{ /*Style for ULs that are children of LIs (submenu) */ 106 | display: none; /*Hide them by default. Don't delete. */ 107 | } 108 | .treeview .submenu ul li{ /*Style for LIs of ULs that are children of LIs (submenu) */ 109 | cursor: auto; 110 | } 111 | 112 | .treeview li.submenu2{ /* Style for LI that contains sub lists (other ULs). */ 113 | background: url(closed.gif) no-repeat left 1px; 114 | } 115 | .treeview li.submenu2 ul{ /*Style for ULs that are children of LIs (submenu) */ 116 | display: none; /*Hide them by default. Don't delete. */ 117 | } 118 | .treeview .submenu2 ul li{ /*Style for LIs of ULs that are children of LIs (submenu) */ 119 | cursor: auto; 120 | } -------------------------------------------------------------------------------- /2/help.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | perfect dark help 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /2/help2.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | perfect dark help 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /2/help3.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | perfect dark help 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /2/help_development.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 | 16 |

☆关于开发

17 | 感谢您使用 perfect dark。
18 | 关于更新,由于各种原因,无法频繁更新。本人会尽力,但请大家谅解。
19 | 虽然目前在效率方面还不如已有的P2P软件,但我们将持续改进,争取超越它们。
20 | 希望各位用户能够长期支持和关注 perfect dark 的发展。
21 | 此外,我也尽可能阅读互联网上的使用报告。感谢大家提供了宝贵的建议和意见。
22 |

23 | 24 |

☆请求

25 | 请尽可能按照以下模板详细、准确地提交Bug报告或功能建议。
26 | 目前不接受通过2ch等论坛提交的Bug报告或建议。
27 | 请搜索“perfect dark 开发板”,并在 perfect dark 的开发论坛中提交相关内容。
28 |

29 | 30 |

★Bug报告模板 (ノ∀`)
31 | --------------------------------------------------
32 | 【PD版本号】 ver.
33 | 【操作系统】Windows
34 | 【内存容量】 MB
35 | 【备注】
36 | --------------------------------------------------
37 | 【Bug症状】
38 | 【Bug重现方法】
39 | --------------------------------------------------
40 | 建议您使用最新版本。
41 | 无法重现的Bug基本无法修复。
42 | 报告Bug时,请同时说明不依赖于特定环境的重现方法。

43 |

44 | 45 |

★新功能建议模板 (´・ω・‘)
46 | --------------------------------------------------
47 | 【希望增加的功能】
48 | 【优点】
49 | 【缺点】
50 | --------------------------------------------------
51 | 请务必填写功能的优点和缺点。
52 |

53 | 54 |

55 | 我们一直收到各种Bug报告,但如果无法重现,或者仅出现在特定环境中,
56 | 我们只能凭想象来处理,因此Bug修复会变得非常困难。
57 | 也曾有过尝试修复Bug但最终不得不放弃的情况。
58 |

59 | 60 |

61 | 我们非常欢迎大家提交Bug报告,但在报告时,
62 | 请尽可能提供不依赖环境的重现方法,以及尽量详细的信息。
63 |

64 | 65 |

66 | 另外,也有极少数的Bug报告,可能是因破解造成的异常。
67 | 为了确认是否为正常运行状态下出现的Bug,我们需要时间来判别。
68 | 如果您有余力,请协助我们验证和重现Bug,这将带来极大帮助。 69 |

70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /2/help_donation.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 | 16 |

捐赠

17 | perfect dark的开发目标是「最大限度地追求匿名和效率,对数据进行共享」。
18 | 从perfect dark的构想阶段直到现在,这一目标一直未改变。
19 | 一直以来,我以个人意志进行着开发,我会继续开发,直到达成这一目标为止。 20 |

21 |

22 | 实验性地,我请求各位对perfect dark进行捐赠。
23 | 认同perfect dark价值的各位、赞同开发目标的各位、以及愿意赞助开发的各位,请向以下比特币地址转帐。感谢进行赞助的各位。 24 |

25 |

比特币

26 |

地址:
27 | 1AkmSan2Vat6cKEmAmihkHrEBvuszArzZF

28 | 29 |

QR码:
30 | 31 |

32 | 33 |

34 | 关于捐赠的比特币的用途,我不会将比特币用于本人自身。
35 | 比特币交易特别公开,如果在交易所兑换成日元,或者在实际的店铺使用,都会特定到具体的个人。
36 | 捐赠的目的,有以下几点: 37 |

38 |

42 |

43 | 等等。 44 |

45 | 46 | 47 | -------------------------------------------------------------------------------- /2/help_feature.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |

次世代P2P软件 perfect dark

18 | 19 |

☆关于匿名性

20 | perfect dark 尤其注重确保匿名性。
21 | 部分情况下,为了获取 perfect dark 的唯一编号,软件会使用电脑的一些信息,但这并不会导致个人信息泄露或身份被识别的风险。
22 | 匿名性不会因此而降低。
23 |
24 | 若您希望更详细地了解 perfect dark 的技术细节,请下载以下文档:
25 | 文件 perfect dark public documents.zip perfect dark 文档 version 1.000 @会长=Mk-0H07yLdYZNIDtmPevs0l4FP0 9,121 c8a023fbe3c3d9222aca4a5a21af73ce84fecafdbb96d18fc57da7345a72a8b2

26 | 27 |

☆特征

28 | - 通过公钥加密和数据中继技术,实现了高度的隐私保护。
29 | - 支持使用“关键词树”进行搜索,还可以使用正则表达式、文件大小、日期时间等条件进行精确筛选。
30 | - 支持自动更新,更新通过使用公钥加密的电子签名方式确保文件的可信性。如您对自动更新有所顾虑,可在设置中禁用该功能。
31 | - 包含被称为“讨论板”的留言功能。
32 | - 目标是全面超越现有的 P2P 软件。尽管仍有很多功能尚未实现,请期待今后的改进与扩展。

33 | 34 |

☆忽略功能

35 | 搜索画面的“忽略功能”用于屏蔽那些“只是为了在搜索中出现而制作的无用文件”。
36 | 对于明显名称不正当的文件,可使用忽略功能屏蔽,而其他正常文件请通过搜索筛选功能来查找。
37 | 如果对正常文件使用忽略功能,有可能导致看不到您真正需要的文件。

38 | 39 |

☆评价功能

40 | 可在“下载完成列表”中对已下载的文件进行评价。
41 | 注意:若您要从完成列表中删除文件,必须先对该文件进行评价。
42 | 评价分为以下三种类型:
43 | 优良:对高质量、令人满意的文件给予此评价。
44 | 无害:普通文件。
45 | 有害:对无效数据、感染病毒的文件、与名称不符的文件给予此评价。
46 | 还可以添加带有评论的评价。
47 |
48 | 通过使用忽略功能和评价功能,可以在网络中抑制有害文件的传播。
49 | 请您合理、积极地使用忽略与评价功能。

50 | 51 |

☆文件说明

52 | "perfect dark.brain" :包含下载信息等重要数据的文件。
53 | "perfect dark.exe" :程序主执行文件。
54 | "perfect dark.sekai" :保存已连接客户端的 IP 地址与端口。
55 | "perfect dark.settings" :保存 perfect dark 的各种设置数据。
56 | "download" 文件夹 :存放下载文件的目录。
57 | "unity" 文件夹 :缓存文件目录,缓存数量上限可在设置中调整。
58 | "mutagen" 文件夹 :自定义文件目录。您可以在设置中创建自定义文件,并通过编辑它们实现各种自定义设置。
59 | "backup" 文件夹 :备份 perfect dark 重要文件的目录。
60 |
61 | "readme.txt" :帮助文件,启动 perfect dark 后自动生成。
62 | "history.txt" :记录最新动态和更新历史。
63 | "license.txt" :perfect dark 的许可协议文件。请在使用本软件前务必阅读并同意。

64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /2/help_first.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |

次世代P2P软件 perfect dark

18 |
19 |
20 |

☆开始

21 |

perfect dark 是P2P文件共享软件。
22 | 如果进行了不当的操作,可能会侵犯著作权法或违反其他法律。
23 | 使用时请注意。
24 | 此外,请仔细阅读下面的许可协议,在同意的前提下使用本软件。

25 | 26 |

perfect dark 正在开发中,各位用户的协助对于今后的发展至关重要。
27 | 根据先例,文件共享软件的开发者一般不会公开身份。
28 | 虽然这有点难以理解,希望各位用户在以下方面协助我。 29 |

30 | 1. 如果发现了Bug、或者有建议和意见,请通知我。
31 | 2. 请协助发布 perfect dark 的可执行文件。
32 | 3. 请协助设置提供分享 perfect dark 初始节点的场所。
33 | 4. 撰写和翻译帮助文件。参见mutagen
34 |

35 |

本文件简单介绍了 perfect dark ,如果想知道更多情报,
36 | 志愿者们撰写了一些帮助文件。
37 | 请先阅读 ☆使用方法 一节,在连接到 perfect dark 网络之后,下载以下文件。
38 |
39 | 文件 perfect_dark_Help_20070425.zip perfect dark ヘルプ @MC68030=E1qHd1AIM6ajf5mRfI7esZiYN02 480,202 bd06833419a7a72b618790a60cb09c0268a2fff2a39c394dfd2d4f08b4da89ee
40 | 文件 PD help ver.22.txt perfect dark ヘルプ @ヘルプマン=JACpfmCkRNPHbJ8tvSghQAXX4rf 126,067 5b4f3c33c144d9400a7a30ac06aba1e0fe1eab0067b8255370eb3092f6a09c20
41 | 42 |
43 | 最后的字符串是文件的 ID ,添加 ID 后,就能简单地下载文件。
44 | 感谢制作帮助文件的各位,制作了这样出色的帮助文件。
45 | 我想借此机会感谢你们。

46 | 47 |

☆推荐环境

48 | - 本软件在 Windows XP SP2 操作系统中测试正常工作。Windows2000 好像也能正常运行,但是有可能要进行系统更新。
49 | - 要使 perfect dark 正常工作,必须安装 Internet Explorer 6 或更高版本。
50 | - perfect dark 的内存使用量很大,建议使用 512MB 内存或更多内存。
51 | - 使用的硬盘文件系统应为 NTFS。FAT 文件系统无法处理大于4GB的文件,因此无法下载大型文件。
52 |

53 | 54 |

☆许可协议

55 | 本软件目前为开发版本,可能会有预料之外的缺陷。
56 | 禁止在以营利为目的出版物或该出版物的附录中发布或公开本软件或与本软件有关的信息。
57 | 禁止对本软件进行逆向工程、反汇编和反编译。此外,禁止对本软件的网络进行解析。
58 | 对于因使用本软件造成的任何问题,作者不承担任何责任。一切责任由用户承担。
59 | 仅限本软件连接到本软件的网络。禁止使用其他软件以攻击、收集信息为目的连接到本软件的网络,禁止使用其他软件以其他任何目的连接到本软件的网络。
60 | 禁止使用本软件作出违反著作权法或其他法律的行为。
61 | 本许可协议如有更改,恕不另行通知。
62 |

63 | 64 | 65 | -------------------------------------------------------------------------------- /2/help_kaicho.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 | 16 |

关于 perfect dark.vision

17 | 管理视图设置(设置→视图)的文件。您可以发布此文件以公开自己配置的视图。
18 | 如果我发现良好的视图,会考虑采用。
19 | 当然,perfect dark.vision 不包含除视图设置以外的信息。 20 |

21 | 22 |

关于搜索项数量

23 | 我以前也说过同样的话,我不积极增加搜索项上限的原因是
24 | 1.增加搜索负担。
25 | 2.增加带宽负担。
26 | 3.这没有意义。
27 | 如果增加上限,即使仅仅是为了防止重复搜索而与其它节点交换相互持有的搜索项信息,都会消耗特别大的带宽。
28 | 综合考虑了优点和缺点,我将搜索的上限定为1000。
29 | 此外,同时列出数千个搜索项是不现实的,希望你通过同时使用多个关键字来缩小搜索范围。 30 |

31 | 32 |

关于更新

33 | 如果在更新软件后无法连接,在大多数情况下,原因都出在防火墙。
34 | 如果更新后无法连接,请尝试重新打开端口或重启电脑。 35 |

36 | 37 | 38 | -------------------------------------------------------------------------------- /2/help_menu.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |

help

17 | 18 | 53 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /2/help_other.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 | 16 |

☆注意事项

17 | - 缓存文件夹的大小限制最低为 40GB,虽然非常大,但我们认为这对所有用户来说都是必不可少的。敬请谅解。另外,请尽量避免删除缓存。
18 | - 由于使用了高度加密技术,有可能对CPU造成较高的负担。
19 | - 使用 perfect dark 时,请务必使用杀毒软件。特别是在处理可执行文件和压缩文件时请格外小心。
20 |

21 | 22 |

☆用户需要承担的事项

23 | perfect dark 不只是传统P2P软件那样的简单文件交换,而是旨在实现信息的整合共享。
24 | 其理念是:网络中存在的所有信息都由各个 perfect dark 实例共同支撑。
25 | 为实现这一目标,采用了 dkt + dht + du 的机制,也因此每个 perfect dark 用户端会承担一定程度的负担。
26 |

27 | 28 |

在 dht + du 模式下,为了构建 perfect dark 网络,会自动进行下载与上传。
29 | 并且与自己所负责的哈希值相关的数据会被自动收集并保存。
30 | 因此,用户需承担自动下载/上传过程中所消耗的带宽,以及 unity(缓存)所占用的存储空间。
31 | 如果频繁删除 unity(缓存),将对 perfect dark 网络造成损害,恳请尽量避免此类操作。
32 |

33 | 34 |

为了防止立即删除 unity(缓存)的行为,perfect dark 的运行机制如下:
35 | 当 dht+du 部分的 unity 缓存小于 2000MB 时:自动下载优先占用带宽。
36 | 大于等于 2000MB 时:手动下载优先占用带宽。
37 | 换句话说,缓存保留量越多,手动下载就越容易。
38 | 当缓存达到足够量后,自动下载将会停止。
39 |

40 | 41 |

这是一项对构建 perfect dark 网络来说不可或缺的处理流程,
42 | 而且既然选择加入 perfect dark 网络,就必须接受这一点。
43 | 我们知道这会给用户带来一定负担,但仍恳请各位理解与配合。

44 | 45 |
46 | perfect dark,次世代 p2p -> n2 软件
47 | 诞生于混沌与宇宙之中。
48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /2/help_port.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 | 16 |

打开端口

17 |

18 | perfect dark 是一种 P2P 软件,通过互联网发送和接收数据。
19 | 必须执行打开端口的操作,以便可以从外部接收数据。
20 |

21 |

22 | 打开端口,则需要配置网络(路由器等)和软件(防火墙)。
23 | 具体步骤因环境而异,请参阅路由器/防火墙的说明书和搜索到的网上的打开端口的操作说明。
24 |

25 | 26 |

注意

27 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /2/help_start.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 | 16 |

☆使用方法

17 | 1. 请打开 "perfect dark.exe"。一开始会出现设置向导画面,请一项一项地进行设置。
18 | 2. 请打开设置的端口号。根据具体环境的不同,有可能需要对路由器、防火墙和杀毒软件进行设置。
19 | 3. 请添加要连接的 IP 地址/端口(初始节点)。有两种方法:直接输入IP和输入加密字符串。无论哪种方法,都必须先要在网上获取到初始节点。
20 | 4. 当连接成功后,软件会显示 "perfect dark is online"。
21 | 5. 在 "搜索" 选项卡,可以输入关键字进行搜索,也能以树状的形式搜索关键字。此外,可以使用滤镜对搜索到的文件进行过滤。
22 | 6. 如果要上传文件,请在 "信息" 选项卡按上传按钮。可以输入要上传的文件名和与要上传文件相关的关键字。
23 | 7. 如果要下载文件,请在 "搜索" 选项卡右键单击要下载的文件,或者双击要下载的文件。

24 |

☆关于网络连接的类型

25 | 请在设置画面设置您使用的网络连接的类型。
26 | 如果设置的网络连接类型与您实际使用的网络连接类型不同,下载和上传的效率会大幅地下降,
27 | 请设置为正确的类型。
28 | 带宽限制的设置与网络连接类型的设置并不冲突。

29 | 30 |

☆如果无法连接网络

31 | 可能有种种原因,请检查以下项目。
32 | 1. perfect dark 的版本过旧,导致无法连接网络。请使用最新版的perfect dark。
33 | 2. 请检查是否已经打开端口。外部端口和内部端口都必须打开。
34 | 如果不知道如何打开端口,请在网络上进行搜索。
35 | 3. 请在信息界面进行 IP 地址/端口号 的添加。尽可能获取最新的初始节点。
36 | 4. 可能是防火墙或者杀毒软件的查杀网络蠕虫功能开启所导致的。
37 |
38 | 在自动更新后无法连接网络时,大概率是防火墙或者杀毒软件的误判。
39 | 请调整防火墙或者杀毒软件的相关设置,或者暂时禁用它们。

40 | 41 | -------------------------------------------------------------------------------- /2/help_update.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P perfect dark

15 | 16 | 纯数字版本为正式版,带字母版本为测试版。
17 | 如有故障报告或改进建议请告知。
18 | 若测试版运行正常,将进行自动更新。 19 | 20 |
version 1.29 2024/10/03
21 |

22 | 时光飞逝如白驹过隙。
23 | 我们仍在全力冲刺目标,但理想巅峰仍遥不可及。
24 |
25 | 我将PD视作攀登附近山峰。
26 | 通过充分准备和设计,我们曾一举登顶。
27 |
28 | 但如今的目标,犹如单次远征征服珠峰。
29 | 我们研发攀登装备、规划路线、模拟训练、遭遇瓶颈、放弃旧方法、开辟新路径。
30 | 开发过程复杂且分多阶段推进。
31 |
32 | 甚至不确定路线是否正确或能否登顶。
33 | 但我们别无选择,只能步步为营,坚信终将抵达。
34 |

35 | 36 |
version 1.28 2024/06/30
37 |

PD-> 38 |

39 | 40 |
version 1.27 2023/09/28
41 |

下一代应用的基础设计已逐渐清晰。
42 | 虽仍处早期开发阶段,正式发布可能还需数年,但我们正在全力推进。 43 |

44 | 45 |
version 1.26 2023/03/25
46 | 50 | 51 |
version 1.25 2022/11/05
52 | 56 | 57 |
version 1.24 2021/05/05
58 | 61 | 62 |
version 1.23 2015/12/03
63 | 69 | 70 |
version 1.22 2014/09/28
71 | 75 | 76 |
version 1.21 2014/09/20
77 | 80 | 81 |
version 1.20 "scatter and gather" 2014/09/11
82 | 86 | 87 |
version 1.19 2014/08/01
88 | 94 | 95 |
96 | version 1.18 2014/03/30 97 |
98 | 101 | 102 |
103 | version 1.17 2014/02/12 104 |
105 | 109 | 110 |
111 | version 1.16 "wrath" 2014/01/13 112 |
113 | 118 | 119 |

version 1.15

123 | 124 |

version 1.14

129 | 130 |

version 1.13

135 | 136 |

version 1.12

140 | 141 |

version 1.11

145 | 146 |

version 1.10b

155 | 156 |

version 1.10 "invictus, weh."

157 | 新增显示预估节点数和unity数量。
158 |

159 | 160 |

version 1.09

161 | 改进含符号名称的排序规则。
162 | 实现讨论板/文件视图的XML保存功能,支持拖放XML文件直接查看。
163 | (因JavaScript变更,旧版mutagen文件可能异常。请删除mutagen文件夹后重建。)
164 |

165 | 166 |

version 1.08 "from this bird cage"

167 | 改进含数字名称的排序(如"诗歌12"和"诗歌7"将正确排序)。
168 | 启用ClearType显示。
169 | 修复搜索标签"有害"过滤器失效的问题。
170 | 修复IE9环境下讨论板消息部分缺失的缺陷。
171 | 调整讨论板消息编号的显示颜色。 172 |

173 | 174 |

version 1.07 "unbreakable"

175 | 修复显示标签执行"全部清除"时崩溃的缺陷。
176 | 变更显示自定义方式。请通过设置→显示设置调整。
177 | 修复讨论板高级搜索计数小于10时失效的问题。
178 | 实现自动删除功能(上传文件充分传播后自动删除)。请在设置→其他中启用。
179 | 取消2天后强制上传的限制。
180 | 在线状态阻止系统进入睡眠模式。
181 | 历史记录右键菜单新增"全部清除"选项。 182 |

183 | 184 |

version 1.06

185 | 修复流量统计中下载数值显示异常的缺陷
186 | 感谢@无名氏=70H0PXqUR+5wBrjaxe1Bsk5PFEf的反馈
187 | 优化讨论板显示逻辑。
188 | 修复下载/完成/讨论板列表Ctrl+C复制失效的问题。
189 | 修复部分讨论板无法显示的缺陷。
190 | 感谢@nebula=kShY3QFGbcpWFnDNsdkN8Dz5hU2的协助。 191 |

192 | 193 |

version 1.05

194 | 调整信息界面布局。
195 | 新增帮助文档。
196 | 支持无unique标识的讨论板(1.04前版本不兼容)。
197 | 修复讨论板楼层模式下"显示回复"功能异常的问题。
198 | 为关联回复添加颜色标记。
199 | 鼠标悬停ID(楼层号)可弹出回复内容。
200 | (需将board.js中的option_anchor_check设为2启用)
201 | 整合@TEMP=F0gBOF3suUwZUQcZ201zziIBF2b的讨论板改进方案。特此致谢。 202 |

203 | 204 | 205 | -------------------------------------------------------------------------------- /2/mutagen_board.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 |
16 |

<board.html , board.js>

17 |

在显示讨论板的时候,会用到以上文件。
18 | 基本的工作原理与 kashin.html 和 kashin.js 相同。
19 | 今后我会写一些使用说明。 20 |

21 | 22 | 23 | -------------------------------------------------------------------------------- /2/mutagen_first.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 |
16 |

<概要>

17 |

mutagen 是 perfect dark 的自定义机制。
18 | 通过编辑 mutagen 文件夹中的文件,可以对 perfect dark 进行各种自定义设置。 19 |

20 |

perfect dark 启动时会检查 mutagen 文件夹中的文件,
21 | 如果文件存在,则使用该文件;如果不存在,则使用默认文件。 22 |

23 |

要编辑 mutagen 文件夹中的文件,请先打开“设置画面”中的“其他”选项,
24 | 点击“导出文件”按钮以保存文件。
25 | 此操作会在 mutagen 文件夹中生成文件,编辑生成的文件即可对 perfect dark 进行自定义。 26 |

27 |

通过导入已公开的外部文件,也可以轻松共享自定义内容。
28 | 如果希望重置自定义设置,只需删除 mutagen 文件夹即可。 29 |

30 | 31 |

<关于旧文件的注意事项>

32 |

perfect dark 如果检测到 mutagen 文件夹中存在文件,会优先使用这些文件。
33 | 因此,即使 perfect dark 内部拥有最新版本的文件(尤其是 kashin.html、kashin.js、board.html、board.js),
34 | 也有可能会继续使用 mutagen 文件夹中的旧文件。 35 |

36 |

为了始终使用最新版本的文件,建议仅保留 mutagen 文件夹中所需的文件,删除不需要的文件。 37 |

38 | 39 |

<关于风险>

40 |

进行自定义可能会导致 perfect dark 无法正常运行,或产生异常行为。 41 |

42 |

虽然我们在实现时对自定义文件的安全性进行了谨慎处理,但仍可能存在意料之外的安全漏洞。
43 | 导入外部自定义文件时请特别注意。 44 |

45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /2/mutagen_help.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 |
16 |

<帮助文件>

17 |

通过编辑 mutagen 文件夹的文件,可以对帮助文件进行自定义。
18 | 现在,帮助文件只包含了最低限度的内容,目前征集志愿者们的修订。
19 | 您如果将自己创建的帮助文件共享出来,我会考虑将其融合到 perfect dark 本体中。 20 |

21 |

您如果导出mutagen文件夹,将生成以下文件和文件夹。

22 |

23 | "help.js" : 帮助文件所使用的JavaScript文件。
24 | "0"文件夹 : 容纳英语版帮助文件的文件夹。
25 | "1"文件夹 : 容纳日语版帮助文件的文件夹。
26 |

27 |

当打开帮助文件后,各个语言的 "help.html" 将会载入。
28 | 此外,当更新 perfect dark 后,打开 "help2.html" 将显示更新历史。 29 |

30 | 31 | 32 | -------------------------------------------------------------------------------- /2/mutagen_kashin.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 |
16 |

<kashin.html , kashin.js>

17 |

perfect dark 提供了用于http服务器功能的接口。
18 | 当用于显示文件时,http服务器使用 kashin.html 和 kashin.js 两个文件。 19 |

20 |

当显示文件时,perfect dark 首先打开
21 | http://127.0.0.1:port/ID
22 | (port 为接口端口号,ID 为文件专有的字符串
23 | 载入 kashin.html 和 kashin.js。
24 | kashin.html 和 kashin.js 获取 http://127.0.0.1:port/ID.xml 的内容,解析XML文件并显示。
25 | 当使用外部浏览器浏览时,可获取到地址。 26 |

27 |

通过浏览 kashin.html 和 kashin.js 的内容,能理解详细的工作原理。
28 | 通过编辑这些文件,能自定义一些内容。 29 |

30 |

此外,perfect dark 中包含了名为 Prototype 的 JavaScript 库。
31 | 在html文件中,通过加载 "prototype.js" ,可以使用这个库。 32 |

33 | 34 | 35 | -------------------------------------------------------------------------------- /2/mutagen_language.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 |
16 |

<language.txt>

17 |

language.txt 是 perfect dark 的语言文件。通过编辑这个文件,你可以更改大部分在 perfect dark 中显示的文本。
18 | 此文本文件的格式为 UTF-16LE(带BOM)。请使用支持编辑 Unicode 文本的编辑器对其进行编辑,并将其保存为 UTF-16LE(带BOM)格式。
19 | language.txt 文件具有如下格式: 20 |

21 |

id "10" /* comment */
22 | " information "
23 | " 信息 " 24 |

25 |

其中,以 id 开头的行表示一段文本的 ID,跟着的2行分别是英语文本和日语文本。
26 | 如果要将 perfect dark 翻译为英语和日语之外的语言,你可以直接编辑其中的文本,建议你先如下编辑(新增一行德语文本) 27 |

28 |

id "10"
29 | " information "
30 | " 信息 "
31 | " informationen " 32 |

33 |

之后在设置对话框中,将语言更改为 "其他语言"。 34 |

35 |

不必更改 language.txt 中的所有项。
36 | 你可以更改你要更改的项,不需要更改的项可以删除。 37 |

38 | 39 | 40 | -------------------------------------------------------------------------------- /2/mutagen_open.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

次世代P2P软件 perfect dark

15 |
16 |

<自定义文件的分享>

17 |

希望您尽可能公开您创建的自定义文件,以便更多的人可以共享到这些文件。 18 |

19 |

当前用于接口的文件(kashin.html, kashin.js , board.html , board.js)仅实现了所需的最少功能。
20 | 关于这些功能,我想与志愿者们合作。
21 | 我只实现了最少的功能,您可以编辑它,自由扩展它。
22 | 您如果发布出来,我会考虑将其集成到 perfect dark 本体中。 23 |

24 | 25 | 26 | -------------------------------------------------------------------------------- /2/pd_board.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

揭示板

15 | 16 |

过去揭示板发布(消息)的问题

17 |

18 | 在以前的实现中,一旦消息被发布,就会向连接的周围节点扩散。
19 | 不仅是直接连接的节点,还会扩散到这些节点进一步连接的其他节点。因此,初始消息的扩散被识别出来,也就是说发送者被识别的风险,被认为是相当低的。
20 | 扩散的消息会被发送到 dht+du 的揭示板管理节点,完成发布。
21 | 消息是加密的,只有到达揭示板管理员手中后才会被解密。
22 |

23 | 攻击者若想破坏消息发布者的匿名性(识别身份),需要进行以下步骤: 24 |

    25 |
  1. 频繁连接发布者,捕捉由发布者扩散的消息。
  2. 26 |
  3. 为了解密消息,预先获取揭示板的信息。
  4. 27 |
  5. 使用揭示板的信息解密消息。
  6. 28 |

29 | 虽然需要执行上述步骤,但第①步中的消息是通过多级中继扩散的,因此识别初始发送者是困难的。 30 |

31 | 基于上述原因,认为消息发布者的匿名性是相当高的。
32 | 然而,通过长时间监视特定的发布者(例如我),以一定概率识别发布者也是可能的。
33 |

34 | 例如: 35 |

    36 |
  1. 持续监控网络。
  2. 37 |
  3. 检测到我的消息扩散。此时连接的节点会成为候选节点。
  4. 38 |
  5. 对候选节点进行长期、集中连接与监控。
  6. 39 |
  7. 再次检测到我的消息扩散时,该节点是我的节点的概率逐渐提高。
  8. 40 |
  9. 持续进行此过程。
  10. 41 |
42 |

43 | 通过上述处理,从理论上说,可以识别我的节点。
44 | 因此,目前的实现中,通过使用 Tor 连接进行消息扩散来进行改进。
45 |

46 | 47 |

当前的揭示板发布(消息)

48 |

49 | 基于前述揭示板发布的问题,目前的实现使用以下流程发布消息: 50 |

    51 |
  1. 发布者提交消息后,使用揭示板信息对消息进行加密。
  2. 52 |
  3. 通过 Tor 连接扩散消息。
  4. 53 |
  5. 接收到消息的节点将消息发送到 dht+du 的揭示板管理节点。
  6. 54 |
  7. 揭示板管理节点解密消息并更新揭示板。
  8. 55 |
  9. 发布者确认消息已出现在揭示板上。若已出现则结束;若未出现则重新执行①。如果发布者未注册下载该揭示板,将无法确认消息,直接结束而不做确认。
  10. 56 |

57 |

在 Tor 连接中,虽然接收者的匿名性没有保障,但发布者的匿名性得以保留。
58 | 也就是说,接收消息的一方无法得知消息的发送者。
59 | 即使攻击者试图识别发布者,只要不破坏 Tor 连接的匿名性,就无法识别。
60 | 第⑤步的处理与普通揭示板的下载注册相同,因此也无法从中识别发布者。

61 |

62 | 此外,在旧版本中,曾发生过明明发布了消息却不知所踪的情况。
63 | 在当前版本中,由于在第⑤步进行了确认,因此只要注册了揭示板的下载,就不会发生消息未发布的情况。

64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /2/pd_connection.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

连接

15 | 16 |

Tor连接

17 |

18 | 在 perfect dark 网络中,使用了 Tor(准确来说是洋葱路由)算法的连接被称为 Tor 连接。
19 | 与一般的 Tor 并不兼容。这只是 perfect dark 中实现的一种连接方式。 20 |

21 | 首先,perfect dark 的每个节点都拥有用于 Tor 连接的公钥加密密钥对(私钥/公钥)。
22 | 私钥/公钥在经过一定时间(1-2小时)或者 IP 地址发生变化时,会自动更新为新的密钥。
23 | perfect dark 的每个节点会为连接目的,保留一定数量(当前实现约为 4000 个节点)的其他节点信息(IP地址和公钥)。
24 | Tor连接利用 IP 地址和公钥(以下称为目录列表)与其他节点建立连接。 25 |

26 | Tor连接是一种利用公钥加密的多级中继方式,用于保持发送者的匿名性。接收者的匿名性不被保证。
27 | 在这里,多级中继中,发送者称为 originator,中继节点依次称为 relay 1、relay 2,如此类推,直到 relay n-1。
28 | 连接路径如下所示:

29 | originator - relay 1 - relay 2 - relay 3 --- relay n-1

30 | 当 originator(发送者)向 relay 1 发送数据时,数据会依次通过 relay 1 到 relay 2,relay 2 到 relay 3 中继,最终由 relay n-1 接收。relay n-1 是最终接收数据的一方,但它无法知道数据来自哪里。 31 |

32 | 接下来将详细说明连接的实际处理。
33 | 首先,originator 会从目录列表中随机选择一个节点作为 relay 1。生成一个新的密钥对,称为 key o1。relay 1 的密钥对为 key r1。
34 | 然后,originator 连接到 relay 1,并发送自己的公钥。relay 1 接收到 originator 的公钥后,结合自己的私钥生成一个共享密钥。同时,originator 利用 relay 1 的公钥与自己的私钥也生成相同的共享密钥。
35 | 通过这个过程,originator 和 relay 1 之间的通信将使用该共享密钥进行加密。加密后的数据表示为 encrypted(key o1, key r1, data)。关键在于,这种基于公钥加密的通信,仅对这两个节点可见(前提是双方都不是攻击者)。
36 |

37 | 接下来,为进行第二级中继,originator 从目录列表中随机选择一个节点作为 relay 2。生成新的密钥对 key o2,relay 2 的密钥对为 key r2。
38 | originator 要求 relay 1 连接到 relay 2。当 relay 1 与 relay 2 连接后,originator 通过 relay 1 向 relay 2 发送新的公钥。
39 | relay 2 接收到公钥后,与自己的私钥生成共享密钥。originator 也使用 relay 2 的公钥和自身私钥生成相同的共享密钥。
40 | 此后,originator 和 relay 2 之间的通信将被该共享密钥加密。加密数据记作 encrypted(key o2, key r2, data)。 41 |

42 | 如果 originator 向 relay 2 发送数据,会事先进行双重加密,格式如下:
43 | encrypted(key o1, key r1, encrypted(key o2, key r2, data))
44 | 该数据只能由 originator 解密,relay 1 和 relay 2 无法单独解密。
45 | 当该数据从 originator 发送给 relay 1 后,relay 1 解密得到:
46 | encrypted(key o2, key r2, data)
47 | relay 1 无法理解该数据内容,因此仅作为中继转发给 relay 2。relay 2 接收并解密后才能读取数据。
48 | relay 2 无法得知数据来源,无法判断是来自 relay 1 还是其他中继。
49 | 即使 relay 1 是攻击者,由于 originator - relay 2 的通信使用 key o2/r2 加密,因此无法读取通信内容。
50 | 如果 relay 2 是攻击者,虽然可以读取内容,但无法识别 originator 的身份。 51 |

52 | 如上所述,从 originator 向 relay 方向发送数据时,采用“多重加密后逐级解密”的方式。
53 | 而从 relay 向 originator 发送数据时,采用“逐级加密后统一解密”的方式。
54 | 例如,从 relay 2 向 originator 发送数据时,relay 2 向 relay 1 发送:
55 | encrypted(key o2, key r2, data)
56 | 由于 relay 1 无法解密,因此会再进行加密转发给 originator:
57 | encrypted(key o1, key r1, encrypted(key o2, key r2, data))
58 | originator 拥有全部密钥,因此可以解密全部内容并获得原始数据。
59 |

60 | 同样的过程不断重复,可以建立 relay 3、relay 4……relay n-1 等多级中继。 61 |

62 | 中继数量可以自由设定,但目前的实现中为 n=4,即:
63 | originator - relay 1 - relay 2 - relay 3(=接收者)
64 | 即发送者和接收者之间有两个中继节点。 65 |

66 | 如果攻击者想要识别 originator 并获取通信内容,则必须满足以下任一条件: 67 |

68 |

    69 |
  1. originator 随机选择的 relay 1/2/3 全部是攻击者。
  2. 70 |
  3. 攻击者成为 relay 1,并破解公钥加密。
  4. 71 |
72 |

73 | 以上条件目前被认为非常难以实现。公钥加密采用 ECDH 160 位,共享密钥加密采用 AES 128 位。 74 |

75 | 76 |

总结

77 |

78 |

83 |

84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /2/pd_gather.html: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

群集 (Gather)

15 | 16 |

概要

17 |

18 | 群集是一个可编辑的文件列表。本身不保存文件的实际数据,但会保存文件的信息(名称、评分等)。
19 | 群集和文件、板块一样,在 perfect dark 网络上进行共享。
20 | 注册下载群集后,可以自动或手动下载群集中所包含的文件。 21 |

22 | 23 |

下载

24 |

25 | 要下载群集,请在搜索标签中搜索群集并注册下载。操作步骤与下载文件或板块相同。 26 |

27 | 注册下载群集后,群集的信息将显示在群集标签页中。标签页左侧是已注册的群集列表,右侧是群集中包含的文件列表。
28 | 初始状态下不会显示文件,因为尚未获取群集信息。连接网络一段时间后,将自动获取群集信息并显示文件。 29 |

30 | 群集的下载方式有“手动”和“自动”两种。
31 | 默认设置为“手动下载”。 32 |

33 | 在“手动下载”模式下,虽然会获取群集中的文件信息,但不会下载文件本身。
34 | 要下载文件,请在群集标签的右侧选择文件,并通过右键菜单选择“下载”。
35 | 不久后,文件将被注册为下载任务。如果 unity 的空间不足,则会处于等待状态。 36 |

37 | 在“自动下载”模式下,会自动下载群集中注册的文件。
38 | 若有不想下载的文件,可在群集标签页右侧选择文件,右键菜单中选择“不下载”。 39 |

40 | 若要更改下载方式,请在群集标签左侧选择群集,然后通过右键菜单进行更改。
41 | 群集的优点在于可以动态获取文件集合。
42 | 当管理员(持有管理签名者)向群集中添加或删除文件时,将通过网络反映到群集中,自动执行文件的下载或取消下载。 43 |

44 | 45 |

上传

46 |

47 | 要创建群集,请在上传标签页中点击“上传群集”按钮,并输入名称和关键词。
48 | 创建群集时需要指定签名。创建时使用的签名被称为管理签名,持有管理签名的人可以自由编辑群集,添加或删除文件。
49 | 未持有管理签名的人无法编辑群集。 50 |

51 | 52 |

管理

53 |

54 | 创建群集时使用的签名称为管理签名。持有该签名即可成为群集的管理员,可自由编辑群集并添加或删除文件。 55 |

56 | 上传群集后,在上传处理完成后会自动注册为下载任务。
57 | 若未上传,可在持有管理签名的状态下搜索并下载群集后,对其进行编辑。
58 | 无论哪种情况,群集都会显示在群集标签左侧。状态为“管理”的群集即表示你是该群集的管理员。
59 |

60 | 要向群集中添加文件,请在群集标签中选择一个群集,然后在其他窗格中选择文件,右键点击并选择“添加到群集”。 61 |

62 | 要从群集中删除文件,请在群集标签中选择群集,在右侧文件列表中选择要删除的文件,然后右键点击选择“从群集中删除”。 63 |

64 | 65 |

评价

66 |

67 | 群集可以像文件一样进行评价。
68 | 要进行评价,请在群集标签左侧选择群集,然后通过右键菜单进行评价。
69 | 评价较差的群集将会从网络中自动删除。 70 |

71 | 72 |

匿名性

73 |

74 | 为了保持匿名性,群集在设计时非常注重隐私保护。 75 |

76 |
上传时的匿名性
77 |

78 | 上传群集时,群集通过 Tor 连接发送到 DHT 节点。之后由 DHT 节点持有群集。
79 | 由于 Tor 连接保障了发送者的匿名性,因此无法得知是谁上传的群集。 80 |

81 |
管理员(持有管理签名者)的匿名性
82 |

83 | 群集管理员通过注册下载群集的方式来进行编辑。
84 | 编辑群集时,管理员本地的数据会被更新,并随后发送到 DHT 节点。 85 |

86 | 可能存在一种针对群集管理员的攻击方式,即频繁获取群集信息。
87 | 例如,恶意节点频繁访问群集管理员,并频繁获取群集信息。
88 | 大多数情况下群集信息不会变化,但如果在群集刚被编辑时获取,就可能获取到最新的信息。
89 | 刚更新的群集信息只存在于管理节点中。即使发送给 DHT 节点,也会有一定的时间延迟。
90 | 因此,持有最新群集信息的节点很可能就是群集管理员。 91 |

92 | 作为防御措施,若自己是群集管理员,将对群集信息进行保密。 93 |

98 | 通过上述处理,可以保护群集信息不被攻击者获取。 99 |

100 | 群集的更新信息通过 Tor 连接发送至 DHT 节点。
101 | 由于 Tor 连接保障发送者的匿名性,因此无法知道是谁发送了信息。 102 |

103 | 综上所述, 104 |

105 |

    106 |
  1. 将群集的保存交由 DHT 节点管理
  2. 107 |
  3. 通过 Tor 连接发送接收群集信息
  4. 108 |
109 |

110 | 这两点确保了匿名性的维持。 111 |

112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /2/pd_interface.html: -------------------------------------------------------------------------------- 1 |  2 | 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 | 29 | 30 | 31 | 32 |
带宽限制显示在设置→带宽限制中配置的带宽限制值。
上传·下载速度显示当前上传和下载速度。系统会自动调整至带宽限制值以下。
总上传·下载量perfect dark累计上传和下载的数据总量。
unity数量perfect dark以unity为单位管理所有数据。显示当前unity总数/上限。
unity内存unity占用的内存量/上限。
unity大小unity总量/上限。
上传已上传并处于上传管理状态的数据总量。随着数据扩散会自动删除,因此总量会逐渐减少。
连接成功·失败连接成功和失败的次数。
估算节点当前perfect dark网络中存在的节点数(估算值)。由于P2P原理限制,无法计算精确数字,但会显示大致数值。所有节点都显示相同数字。
估算unity当前perfect dark网络中存在的数据总量。括号内为数据总数。与估算节点类似,均为概算值。

33 | 34 | 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # perfect dark 1.29 简体中文化 2 | 3 | ## 目录 4 | 5 | - [简介](#简介) 6 | - [下载](#下载) 7 | - [安装](#安装) 8 | - [卸载](#卸载) 9 | - [TODO](#TODO) 10 | 11 | ## 简介 12 | 13 | 本项目提供 [perfect dark](https://zh.wikipedia.org/zh-cn/Perfect_Dark) 的简体中文翻译包。 14 | 15 | ## 下载 16 | 17 | 1. 访问 [GitHub 项目主页](https://github.com/mike2718/mutagen) 18 | 2. 点击 `Code` → `Download ZIP` 下载 [mutagen-main.zip](https://github.com/mike2718/mutagen/archive/refs/heads/main.zip) 压缩包 19 | 20 | ## 安装 21 | 22 | 1. **备份原翻译文件**(如已安装其他语言)。 23 | 2. 启动 `perfect dark.exe`,依次进入 `Settings` → `Other`,在 `mutagen (customize)` 选项下点击 `Write files`,然后退出程序。 24 | 3. 解压 `mutagen-main.zip` 压缩包,将得到的 `mutagen-main` 文件夹中的所有文件复制到 `perfect dark.exe` 目录下的 `mutagen` 文件夹中,并替换所有同名文件。 25 | 4. 重新启动 `perfect dark.exe`,依次进入 `Settings` → `General`,在 `Language` 选项下选择 **Simplified Chinese**。 26 | 27 | ## 卸载 28 | 29 | 1. 退出 `perfect dark.exe` 30 | 2. 删除 `mutagen` 文件夹 31 | 32 | ## TODO 33 | 34 | - [x] 翻译帮助文档 HTML(目标:100%) 35 | - [x] 按作者推荐格式调整 `language.txt` 36 | - [x] 根据 [简体中文本地化风格指南](https://download.microsoft.com/download/1/5/9/159cb91c-b61b-4385-97ca-80ccc7ff1fa0/zho-chn-StyleGuide.pdf) 优化翻译 37 | - [x] 更新界面翻译文本到 version 1.29 38 | -------------------------------------------------------------------------------- /board.css: -------------------------------------------------------------------------------- 1 | /*全体*/ 2 | body { 3 | font-size:smaller; 4 | margin: 20px; 5 | font-family: 'Segoe UI', 'Microsoft YaHei', 'Noto Sans SC', sans-serif; 6 | color:#444; 7 | background-color:#e1e1e1; 8 | } 9 | html,body{ 10 | scrollbar-base-color: #fff; 11 | scrollbar-track-color: #fff; 12 | scrollbar-face-color: #fff; 13 | scrollbar-shadow-color: #288; 14 | scrollbar-darkshadow-color: #aaa; 15 | scrollbar-highlight-color: #fff; 16 | scrollbar-3dlight-color: #aaa; 17 | } 18 | 19 | .outofdate { 20 | background-color:#fcc; 21 | } 22 | 23 | a:link { 24 | color:#0000ff; 25 | } 26 | a:visited { 27 | color:#0000ff; 28 | } 29 | 30 | /*ボードの情報*/ 31 | .info { 32 | padding: 10px; 33 | border:1px solid #8c8; 34 | background-color:#efe; 35 | } 36 | /*ナビゲート*/ 37 | .navi { 38 | font-weight:bold; 39 | padding: 5px; 40 | border:1px solid #f88; 41 | background-color:#fee; 42 | } 43 | /*メッセージ*/ 44 | .message{ 45 | } 46 | /*レス*/ 47 | .res{ 48 | margin: 10px 0px; 49 | background-color:#efefef; 50 | border:1px solid #888; 51 | word-wrap: break-word; 52 | } 53 | /*通常ヘッダー*/ 54 | .resheader{ 55 | margin: 5px; 56 | padding: 5px; 57 | background-color:#eef; 58 | border:1px solid #88f; 59 | } 60 | /*新レスのヘッダー*/ 61 | .resheader2{ 62 | margin: 5px; 63 | padding: 5px; 64 | background-color:#fee; 65 | border:1px solid #f88; 66 | } 67 | .resmain{ 68 | padding: 8px; 69 | } 70 | .resquot{ 71 | color:#080; 72 | } 73 | .resfooter{ 74 | padding: 2px; 75 | text-align: right; 76 | } 77 | 78 | /*サインが選択されていないときの警告文*/ 79 | .error p{ 80 | font-weight:bold; 81 | padding: 2px; 82 | color:red; 83 | background-color:#ff0; 84 | border:1px solid #f00; 85 | } 86 | /*書き込み*/ 87 | .post { 88 | padding: 10px; 89 | background-color:#cef; 90 | border:1px solid #48f; 91 | } 92 | 93 | /* */ 94 | .number { 95 | } 96 | .id { 97 | color:#008020; 98 | font-weight:bold; 99 | } 100 | .id a:link{color:#008020;} 101 | .id a:visited{color:#008020;} 102 | .id2 { 103 | color:#0000ff; 104 | font-weight:bold; 105 | } 106 | .id2 a:link{color:#0000ff;} 107 | .id2 a:visited{color:#0000ff;} 108 | .name { 109 | color:#008; 110 | font-weight:bold; 111 | } 112 | .sign { 113 | color:#080; 114 | font-weight:bold; 115 | } 116 | .sign a{text-decoration : none;} 117 | .sign a:link{color:#080;} 118 | .sign a:visited{color:#080;} 119 | .title { 120 | font-weight:bold; 121 | } 122 | .title2 { 123 | color:red 124 | } 125 | .date { 126 | } 127 | .state { 128 | font-weight:bold; 129 | color:red; 130 | } 131 | .menu { 132 | background-color:#FFFFFF; 133 | top:0px; 134 | left:0px; 135 | position:absolute; 136 | border:1px solid black; 137 | visibility:hidden; 138 | } 139 | .menu2 { 140 | } 141 | /*メニュー選択の色*/ 142 | .menu3 { 143 | color:#ABFFAC; 144 | } 145 | .popup { 146 | position:absolute; 147 | visibility:hidden; 148 | overflow: auto; 149 | padding: 1px; 150 | border-width:1px 2px 2px 1px; 151 | border-style:solid; 152 | border-color:#888; 153 | background-color:#e1e1e1; 154 | scrollbar-base-color: #fff; 155 | scrollbar-track-color: #fff; 156 | scrollbar-face-color: #fff; 157 | scrollbar-shadow-color: #288; 158 | scrollbar-darkshadow-color: #aaa; 159 | scrollbar-highlight-color: #fff; 160 | scrollbar-3dlight-color: #aaa; 161 | } 162 | 163 | .button1 { 164 | background: -moz-linear-gradient(top, #fff, #F1F1F1 1%, #F1F1F1 50%, #DFDFDF 99%, #ccc); 165 | background: -webkit-gradient(linear, left top, left bottom, from(#fff), color-stop(0.01, #F1F1F1), color-stop(0.5, #F1F1F1), color-stop(0.99, #DFDFDF), to(#ccc)); 166 | } -------------------------------------------------------------------------------- /kashin.css: -------------------------------------------------------------------------------- 1 | /*全体*/ 2 | body { 3 | font-size:smaller; 4 | margin: 20px; 5 | font-family: 'Segoe UI', 'Microsoft YaHei', 'Noto Sans SC', sans-serif; 6 | color:#444; 7 | background-color:#e1e1e1; 8 | } 9 | /*ステータス*/ 10 | .status { 11 | padding: 10px; 12 | border:1px solid #8c8; 13 | background-color:#efe; 14 | } 15 | /*評価*/ 16 | .review { 17 | margin: 10px 0px; 18 | background-color:#eee; 19 | border:1px solid #888; 20 | } 21 | /*評価ヘッダ*/ 22 | .reviewheader { 23 | margin: 5px; 24 | padding: 5px; 25 | background-color:#eef; 26 | border:1px solid #88f; 27 | } 28 | .reviewmain{ 29 | word-break: break-all; 30 | padding: 10px; 31 | } 32 | .good { 33 | font-weight:bold; 34 | color:#080; 35 | } 36 | .normal { 37 | font-weight:bold; 38 | color:#444; 39 | } 40 | .bad { 41 | font-weight:bold; 42 | color:#800; 43 | } 44 | .invalid { 45 | font-weight:bold; 46 | color:#444; 47 | } 48 | 49 | 50 | .button1 { 51 | background: -moz-linear-gradient(top, #fff, #F1F1F1 1%, #F1F1F1 50%, #DFDFDF 99%, #ccc); 52 | background: -webkit-gradient(linear, left top, left bottom, from(#fff), color-stop(0.01, #F1F1F1), color-stop(0.5, #F1F1F1), color-stop(0.99, #DFDFDF), to(#ccc)); 53 | } 54 | -------------------------------------------------------------------------------- /language.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mike2718/mutagen/b00654634e4e9df967e7c10eddd3857f977b5fa1/language.txt -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | perfect dark END-USER SOFTWARE LICENSE AGREEMENT 2 | 3 | No Reverse Engineering. Customer may not reverse engineer, decompile, or disassemble the SOFTWARE, nor attempt in any other manner to obtain the source code. 4 | -------------------------------------------------------------------------------- /view.css: -------------------------------------------------------------------------------- 1 | /*全体*/ 2 | body { 3 | font-size:smaller; 4 | margin: 20px; 5 | font-family: 'Segoe UI', 'Microsoft YaHei', 'Noto Sans SC', sans-serif; 6 | color:#444; 7 | background-color:#e1e1e1; 8 | } --------------------------------------------------------------------------------