本帖最后由 CSF666 于 2023-1-12 15:19 编辑
本插件仅供学习交流使用,下载后请在24小时内删除!由使用本插件产生的危害和问题,作者概不负责!请不要损害简幻欢的利益,下载后务必在24小时内删除!!!!! 网盘下载密码:csf 转载已授权!为避免利益纠纷隐藏我的mine BBS用户名 众所周知,简幻欢是国内最大免费开服平台。但是为了保护主机安全等,简幻欢对开服做出了诸多限制,例如:隐藏部分文件、没人时强制关服(危害服务器存档)等。
这导致我们在上面开服非常的不便。故开发了此插件 本插件实现的功能如下: 模块 | 依赖 | 延长没人就关服的时间 | FakePlayer | 单端口端口转发,实现反向代理(类似于CDN) | Frp | 强制修改server.properties配置文件 | 内置 | 自动配置Frp为反向代理 | 内置 | 执行后台命令 | 内置 | 循环执行游戏指令或命令 | 内置 | 开服前删除/复制文件 | 内置 |
本插件实现的功能违反了简幻欢的各种规定,因此有几率导致服务器被强制暂停甚至被清除服务器数据。所以请遵守开头的规则。 目前由本插件驱动的服务器已正常运行1小时之久(对照如何使用第五步的例图可知道服务器启动时间) 然后就被强制关闭了(但是依旧是很大的提高!) 注意!使用本插件的前提是你必须学会JSON语法,如果你不会,可以去菜鸟教程快速学习 为了方便描述,本贴规定根目录为你打开文件管理器的第一个页面 如何使用 1.下载csf.dll,data.7z和jre.7z。网盘密码是csf 2.将他们上传到plugins目录下 3.开服,执行csfinit,等待控制台输出CrackSimpfun Init!,就进入下一步 4.按照下面的配置文件板块修改配置文件,之后重启服务器,如果你看到插件加载失败,错误代码1114,则表明你的配置文件写错了 5.如果你开启了假人,看到有五个假人在开服完成后加入服务器,且服务器端口为19132,则代表启动成功 在控制台执行cmd之后即可进入cmd命令执行模式,再次输入cmd即可退出该模式。在该模式下,可以执行cmd命令,为了保证输出结果的可读性,输出的结果将保存到根目录下的cmd.txt 配置 描述 | 目录 | CrackSimpfun | plugins/csf/config.json | Frpc | plugins/csf/csfc.ini | Frps | plugins/csf/csfs.ini | FakePlayer | plugins/fp/config/config.yaml |
CrackSimpfun的主配置文件,如果你不需要Frp或假人服务,将exec_background_cmd中的对应项目删除即可,不希望修改端口可以删除server_properties中的对应项目 - {
- "delete_files": [ //删除文件
- "C:\\container\\plugins\\csf\\csfs.log", //删除Frps日志,目录要加反斜杠
- "C:\\container\\plugins\\csf\\csfc.log" //删除Frpc日志,目录要加反斜杠
- ],
- "copy_files": { //复制文件
- "C:\\container\\plugins\\csf\\csf.dll": "C:\\container\\plugins\\plugin.dll" //复制文件,目录要加反斜杠
- },
- "server_properties": [ //修改server.properties配置文件
- {
- "server-port": "19132" //防止占用唯一的公网端口
- },
- {
- "player-idle-timeout": "0" //防止假人被踢
- },
- {
- "online-mode": "false" //允许假人加入
- }
- ],
- "exec_background_cmd": [ //执行后台命令
- {
- "0": "cmd.exe /c C:\\container\\plugins\\fp\\bin\\FakePlayer.bat" //启动假人
- },
- {
- "0": "C:\\container\\plugins\\csf\\csfs.exe -c C:\\container\\plugins\\csf\\csfs.ini" //启动Frps
- },
- {
- "1000": "C:\\container\\plugins\\csf\\csfc.exe -c C:\\container\\plugins\\csf\\csfc.ini" //延迟1000毫秒启动Frpc
- }
- ],
- "modify_configs": true, //是否自动配置Frp端口及FakePlayer配置
- "run_loop_interval": 180, //循环间隔,此处为180秒
- "run_loop": [
- {
- "system": "cmd.exe /c echo Running AutoCompaction..." //前台命令
- },
- {
- "console": "list" //游戏命令list
- }
- ]
- }
复制代码面板主机信息一览(已优化可读性) 由下图可知,简幻欢提供的平台并不是Wine,而是使用Win Server 2019加Docker容器。这允许我们进行更多操作,包括运行大型程序(如Java),以及运行各种能够在命令行运行的软件。甚至是启动虚拟机 简幻欢限制面板使用的手段 1.使用链接文件夹和文件对部分文件进行隔离,防止用户对服务端等核心文件进行修改,仅对用户暴露部分文件夹。根据对其目录的探索,可以得知面板暴露给用户的目录为C:\container\,而BDS服务端位于C:\bds\。在服务器目录使用dir命令产生的输出,其中标为JUNCTION和SYMLINK的部分为已链接的目录/文件 - Volume in drive C has no label.
- Volume Serial Number is AE10-7026
- Directory of C:\bds
- 01/10/2023 07:34 PM <DIR> .
- 01/10/2023 07:34 PM <DIR> ..
- 01/10/2023 07:34 PM <SYMLINK> allowlist.json [C:/container/allowlist.json]
- 11/16/2022 07:39 AM 41,913,296 bedrock_server.exe
- 11/16/2022 07:37 AM 207,917,056 bedrock_server.pdb
- 11/16/2022 06:50 AM 25,018 bedrock_server_how_to.html
- 12/10/2022 08:20 PM 44,243,200 bedrock_server_mod.exe
- 12/11/2022 12:23 PM <DIR> behavior_packs
- 01/10/2023 07:34 PM <JUNCTION> config [C:\container\config]
- 12/11/2022 12:23 PM <DIR> definitions
- 12/10/2022 08:20 PM <DIR> development_behavior_packs
- 12/10/2022 08:20 PM <DIR> development_resource_packs
- 12/10/2022 08:20 PM <DIR> development_skin_packs
- 12/11/2022 12:22 PM <DIR> lib
- 12/10/2022 10:43 AM 10,187,264 LiteLoader.dll
- 12/10/2022 11:05 AM 597,504 LLPeEditor.exe
- 12/10/2022 10:36 AM 347,648 LLPreLoader.dll
- 01/10/2023 07:34 PM <JUNCTION> logs [C:\container\logs]
- 01/10/2023 07:34 PM <SYMLINK> permissions.json [C:/container/permissions.json]
- 01/10/2023 07:34 PM <JUNCTION> plugins [C:\container\plugins]
- 11/16/2022 06:50 AM 592 release-notes.txt
- 12/11/2022 12:22 PM <DIR> resource_packs
- 01/10/2023 07:34 PM <SYMLINK> server.properties [C:/container/server.properties]
- 01/10/2023 07:35 PM 4,973 valid_known_packs.json
- 01/10/2023 07:34 PM <JUNCTION> worlds [C:\container\worlds]
- 12/10/2022 08:20 PM <DIR> world_templates
- 12 File(s) 305,236,551 bytes
- 14 Dir(s) 21,096,980,480 bytes free
复制代码打开文件管理器的第一页面: 2.禁止修改启动参数(面板服务商常用) 3.在容器启动时强制替换文件,包括server.properties,Simpfun.dll等文件,防止用户修改服务器端口或删除用于上报服务器状态的插件 4.在服务器没人的时候自动关服,这是最麻烦的一点。没人进入服务器的情况下:在白天,一般开服不到十分钟就会自动关服。晚上,半小时之内也会关服。经过分析,简幻欢使用的关服方法为直接强制结束进程,存在潜在的数据丢失风险,这种对用户数据不重视的态度是应当被谴责的。在DllMain中使用ul_reason_for_call进行关服检测,正常输入stop关服,插件会立刻输出消息,不过由于在服务器运行过程中会多次触发DLL_PROCESS_DETACH事件,所以将服务器端口改回简幻欢提供的默认端口,然后在本地使用motd工具,每秒发包一次,进行存活性探测。如果motd发生超时的时候插件刚好输出了消息,则说明服务器是正常关闭的,反之则是非正常关闭。利用该方法以增强结论可信度 - BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
- switch (ul_reason_for_call) {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- std:: cout << "DLL_PROCESS_DETACH event has been triggered!" << std::endl;
- break;
- }
- return TRUE;
- }
复制代码关于Simpfun.dll 由于作者精力不多,不想深挖该插件的功能,故使用假人进行延长开服时间(BDS内置的simulatedPlayer应该也能达到目的) 复制文件处的示例本来是要替换简幻欢自带的Simpfun.dll插件,使其无法工作的,但是后来经过检查,发现该插件使用了WS2_32.dll(如下图),故判断该插件是用于检测服务器状态,并与面板通信,达到根据在线状态关闭服务器的功能。 检索并整理了该插件中使用的ANSI字符串,发现其调用了两个BDS的API: - 偏移 大小 类型 字符串
- 00006954 3f A ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ
- 00009e44 45 A ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z
- 00042920 42 A ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ
- 003f0bc8 4a A ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z
- 004033fe 42 A ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z
- 0040a216 5c A ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z
- 00412034 3d A ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ
- 00417550 5b A ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z
- 0042c03c 3c A ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ
- 00450ae8 41 A ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ
- 00479bf2 45 A ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z
- 0047a81a 3d A ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ
- 004922f8 4a A ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z
- 004c98e0 39 A ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ
- 004a75ec 53 A ?_copy@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV12@@Z
- 0009d34a 26 A ?set_new_handler@std@@YAP6AXXZP6AXXZ@Z
- # 疑似定时任务
- 0040595e 54 A ?nextTick@Schedule@@YA?AVScheduleTask@@V?$function@$$A6AXXZ@std@@PEAUHINSTANCE__@@@Z
- # BDS函数
- # 检查配置文件:是否使用Xbox验证
- 000683be 35 A ?useOnlineAuthentication@PropertiesSettings@@QEBA_NXZ
- # BDS 1.19.51.01 中的符号: ?useOnlineAuthentication@PropertiesSettings@@QEBA_NXZ
- # 遍历每一个玩家
- 0040e024 44 A ?forEachPlayer@Level@@QEAAXV?$function@$$A6A_NAEAVPlayer@@@Z@std@@@Z
- # BDS 1.19.51.01 中的符号: ?forEachPlayer@Level@@UEBAXV?$function@$$A6A_NAEBVPlayer@@@Z@std@@@Z
复制代码如果仔细观察,可以发现插件中使用的遍历玩家的符号与当前最新版本BDS(1.19.51.01)之中的不符,而经过查询时间戳可以知道该插件的生成日期。经查维基百科,可以知道该插件是在1.19.50.02和1.19.51.01发布之间编译的 猜测:也许该插件并没有正常检测玩家数量 重申 本插件仅供学习交流使用,下载后请在24小时内删除!由使用本插件产生的危害和问题,作者概不负责!请不要损害简幻欢的利益!!!! |