Jellyfin 如何搭建 AFL++ 与 SharpFuzz 环境并运行模糊测试用例?

发布时间:2026/9/9 22:20:37

Jellyfin 如何搭建 AFL++ 与 SharpFuzz 环境并运行模糊测试用例? Jellyfin 如何搭建 AFL 与 SharpFuzz 环境并运行模糊测试用例【免费下载链接】jellyfinThe Free Software Media System - Server Backend API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfinJellyfin 仓库的fuzz/目录下内置了两个基于 SharpFuzz 的模糊测试工程用来对Jellyfin.Api与Emby.Server.Implementations中的特定函数做 AFL 驱动的模糊测试。本文按 fuzz/README.md 的流程说明如何安装 AFL 与 SharpFuzz 工具、选择仓库已有的模糊测试用例并实际运行以及如何判断运行是否按预期进行。仓库中已有哪些模糊测试用例两个 fuzz 工程各提供一组入口用例名在 Program.cs 与 Program.cs 的switch分支中定义fuzz.sh的第一个参数就是这些用例名工程目录可用用例名被测对象fuzz/Jellyfin.Api.FuzzUrlDecodeQueryFeatureUrlDecodeQueryFeature 中间件fuzz/Emby.Server.Implementations.FuzzPathExtensions.TryReplaceSubPathPathExtensions.TryReplaceSubPathfuzz/Emby.Server.Implementations.FuzzSqliteItemRepository.ItemImageInfoFromValueStringSqliteItemRepository.ItemImageInfoFromValueString每个用例在对应工程的Testcases/用例名/下带有种子输入文件如 test1.txt例如UrlDecodeQueryFeature的种子是一段 URL 编码字符串a%3D1%26b%3D2%26c%3D3。环境前提两个 fuzz 工程均面向net10.0见 Jellyfin.Api.Fuzz.csproj且 global.json 固定要求 .NET SDK10.0.0rollForward: latestMinor因此运行环境需要 .NET 10 SDK。仓库通过 Directory.Packages.props 统一管理SharpFuzz包版本2.3.0构建 fuzz 工程时会自动还原。AFL 需要从源码编译安装使用make与 root 权限sudo。第一步安装 AFL按 fuzz/README.md 的 Setup 说明执行git clone https://github.com/AFLplusplus/AFLplusplus cd AFLplusplus make all sudo make install注意sudo make install会以管理员权限把 AFL 安装到系统目录含afl-fuzz等命令这是一次影响系统环境的操作如果当前账号没有 sudo 权限需要先向环境管理员申请或改用具备权限的机器。第二步安装 SharpFuzz.CommandLine 全局工具dotnet tool install --global SharpFuzz.CommandLine这个全局工具提供sharpfuzz命令fuzz 脚本用它对目标程序集做插桩。第三步进入目标 fuzz 工程目录并运行脚本fuzz/README.md 说明在对应工程的目录中运行fuzz.sh并传入要执行的模糊测试用例名。以Jellyfin.Api.Fuzz的UrlDecodeQueryFeature为例从仓库根目录切入后执行cd fuzz/Jellyfin.Api.Fuzz sh fuzz.sh UrlDecodeQueryFeature其他用例同理在 fuzz/Emby.Server.Implementations.Fuzz 目录下运行sh fuzz.sh PathExtensions.TryReplaceSubPath # 或 sh fuzz.sh SqliteItemRepository.ItemImageInfoFromValueString用例名必须与Program.cs中switch分支的字符串完全一致传入未知名称时进程会抛出ArgumentException: Unknown fuzzing function: 你传入的名称。脚本内部做了哪些事以 fuzz/Jellyfin.Api.Fuzz/fuzz.sh 为例脚本内容很短执行顺序为dotnet build -c Release ../../Jellyfin.Api/Jellyfin.Api.csproj --output bin sharpfuzz bin/Jellyfin.Api.dll cp bin/Jellyfin.Api.dll . dotnet build mkdir -p Findings AFL_SKIP_BIN_CHECK1 afl-fuzz -i Testcases/$1 -o Findings/$1 -t 5000 ./bin/Debug/net10.0/Jellyfin.Api.Fuzz $1第一行Release 构建被测工程Jellyfin.Api输出到脚本同级的bin目录。第二行用sharpfuzz对bin/Jellyfin.Api.dll插桩生成可供 AFL 在进程外调用的版本。第三行把插桩后的Jellyfin.Api.dll复制回工程目录。这一步是必要的因为 Jellyfin.Api.Fuzz.csproj 通过HintPathJellyfin.Api.dll/HintPath本地引用工程目录下的Jellyfin.Api.dll复制后 fuzz 工程才会链接到插桩版本。第四行构建 fuzz 工程本身Debug。最后一行启动afl-fuzz种子输入目录为Testcases/用例名结果输出到Findings/用例名-t 5000是脚本为单次执行设置的超时参数AFL_SKIP_BIN_CHECK1是脚本设置的 AFL 环境变量用于跳过其对二进制的检查。Emby.Server.Implementations.Fuzz的 fuzz.sh 结构完全相同只是构建对象换成了Emby.Server.Implementations工程、harness 路径换成了./bin/Debug/net10.0/Emby.Server.Implementations.Fuzz。脚本开头有set -e任何一步失败例如sharpfuzz未安装、目标工程构建失败都会立即中止所以“脚本一路跑完并进入afl-fuzz前台运行”本身就说明前几步成功。如何判断运行结果afl-fuzz在前台持续运行把发现的用例写入Findings/用例名/目录脚本不会自动生成该目录之外的其他产物。传错用例名时进程会直接抛出上面提到的ArgumentException这是脚本流程中最快的失败信号。种子输入需要符合各用例期望的格式PathExtensions.TryReplaceSubPath的输入按:切分且必须恰好得到 3 段见 Program.cs 中data.Split(:)的判断不满足时该输入会被跳过仓库自带的种子 test1.txt 中夹带了原作者的本地路径/home/bond/dev/jellyfin/只作为种子示例存在。边界与限制仓库当前只提供上表列出的三个用例harness 中没有的函数无法直接模糊测试需要自行在对应工程的Program.cs中新增分支。运行依赖 .NET 10 SDKglobal.json在低版本 SDK 上构建会直接失败。本文只覆盖fuzz/README.md给出的安装与运行流程未涉及如何向 AFL 添加自定义编译器选项或使用托管版 AFL 编译器仓库文档中没有对应说明。【免费下载链接】jellyfinThe Free Software Media System - Server Backend API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/9 22:15:35

Edge浏览器变干净指南:告别信息流弹窗,优化内存与性能

说 Edge 能变得很干净,很多人第一反应是不信。毕竟默认状态下的 Edge 实在有点“爱凑热闹”:打开新标签页就是整屏信息流,右下角偶尔冒出购物比价提示,侧边栏还总想给你塞点东西。但把设置项逐个翻一遍、把启动项和扩展列表清一遍…

2026/9/9 22:15:35

运动学模型与LQR路径跟踪:从原理推导到仿真调参实战

做自动驾驶横向控制这几年,我最大的体会是:很多人一上来就上动力学模型、上MPC,结果连最基本的运动学LQR都没调明白。不是说高级方法不好,而是运动学模型加LQR这套组合,在低速、结构化道路场景下,性价比高得…

2026/9/9 23:10:49

图片无损放大哪个方法好?四个实用方法来帮你

在日常工作和学习生活中,相信很多人都遇到过这样的尴尬场景:好不容易找到一张满意的素材图,结果分辨率过低,一放大就全是马赛克。无论是做PPT汇报、设计海报,还是处理老旧照片,怎么把图片放大四倍保持清晰度…

2026/9/9 23:10:49

矩阵方法:从SVD到PCA,数据分析与信号处理的共同语言

在数据分析和信号处理的学习路径里,矩阵方法(Matrix Methods)是一个绕不开的核心主题。麻省理工学院的 18.065 课程 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning 正是围绕这个主题展开的系统课程,…

2026/9/9 23:10:49

用Python实现剪映关键帧批量处理:桌面版源码解析

简介:面向视频剪辑与Python开发者的剪映关键帧自动化工具源码包,用于解决人工逐帧筛选效率低、剪辑节奏把控难的问题。工具基于Python实现视频关键帧的识别与智能筛选,可按用户设定条件自动挑选最佳剪辑点,并开放参数调整接口&…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/9 0:00:48

MHS模型硬件标准:让大模型像调用软件一样控制物理设备

让Claude真正看着显微镜说“这个细胞形态不太对”,或者让大模型自己调一版机械臂的运动轨迹,这事儿听上去已经很接近科幻片了。但你真上手试一次就会发现,模型不缺智商,缺的是一个能插进显微镜、机械臂、激光控制器里的“通用插座…

2026/9/9 0:00:48

AI五大核心方向详解:从机器学习到大模型,零基础转行选哪条?

会有人告诉我,他想转行学AI,但打开招聘网站一看直接傻眼:机器学习、深度学习、自然语言处理、计算机视觉、大模型应用……满屏都是这些词,好像每个都会一点,又好像每个都离自己很远。还有人上来就问“学Python还是学Ja…

2026/9/9 0:00:49

从50行最小循环到生产级AI引擎:工程化改造全解析

直接说干货。这一章我写的不是那种"hello world跑通某个模型"的教程,而是把AI引擎当做一个真正要上线、要被人调用、要扛流量的系统来聊。从最初只有50行的最小循环,到能够承载生产流量的AI引擎,中间差的不是代码量,而是…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码