一句话:提出首个通用桌面 GUI 模糊测试器,通过 GUI 交互解释器把随机输入翻译为 GUI 操作来发现 bug。
桌面应用是当今最大的软件生态之一,但其图形用户界面(GUI)代码长期缺乏有效测试:AFL++、libFuzzer 等桌面模糊测试器只能处理文件或缓冲区式输入,而 Android Monkey、iOS XCMonkey 等移动端 GUI 模糊器又依赖平台专属 SDK,均无法直接用于桌面 GUI。本文提出 GUIFuzz++,这是首个面向桌面 GUI 软件的通用模糊测试器。其核心是一种新颖的 GUI Interaction Interpreter:作为中间层,把模糊器生成的随机输入翻译成点击、滚动、按键、窗口导航等具体 GUI 操作,从而使 AFL++ 这类非 GUI 模糊器能被轻松移植到 GUI 测试中。该方法支持 QT、GTK、Xorg 等主流 GUI 框架,并利用普遍存在的软件无障碍(Accessibility)技术设计了一系列增强机制,显著提升 GUI 模糊测试的精度与 bug 发现能力。作者在 AFL++ 之上实现原型,并在 12 个真实 GUI 应用上开展大规模消融评估,共发现 23 个此前未知的 GUI 相关缺陷,其中 14 个已被开发者确认或修复。
Desktop applications represent one of today’s largest software ecosystems, accounting for over 96% of workplace computing and supporting essential operations across critical sectors such as healthcare, commerce, industry, and government. Though modern software is increasingly being vetted through fuzzing—an automated testing technique for large-scale bug discovery—a major component of desktop applications remains universally under-vetted: the Graphical User Interface (GUI). Existing desktop-based fuzzers like AFL++ and libFuzzer are limited to non-GUI interfaces (e.g., file- or buffer-based inputs), rendering them wholly incompatible with GUIs. Conversely, mobile app GUI fuzzers like Android’s Monkey and iOS’s XCMonkey rely on platform-specific SDKs and event-handling, rendering them fundamentally unportable to the broader, more complex landscape of desktop software. For these reasons, desktop GUI code remains largely under-tested, burdening users with numerous GUI-induced errors that should, in principle, be just as discoverable as any other well-fuzzed class of software bugs.This paper introduces GUIFuzz++: the first general-purpose fuzzer for desktop GUI software. Unlike desktop fuzzers that randomly mutate file- or buffer-based inputs, GUIFuzz++ exclusively targets GUI interactions—clicks, scrolls, key presses, window navigation, and more—to uncover complex event sequences triggering GUI-induced program errors. Central to our approach is a novel GUI Interaction Interpreter: a middle-layer translating fuzzer-generated random inputs into distinct GUI operations, enabling successful non-GUI fuzzers like AFL++ to be easily ported to testing GUIs. Beyond supporting today’s most popular GUI development frameworks like QT, GTK, and Xorg, we introduce a suite of enhancements capitalizing on ubiquitous Software Accessibility Technologies, significantly boosting GUI fuzzing precision as well as GUI bug-finding effectiveness.We integrate GUIFuzz++ as a prototype atop state-of-the-art GUI-agnostic fuzzer AFL++, and perform a large-scale ablation study of its fundamental components and enhancements. In an evaluation across 12 popular, real-world GUI applications, GUI-FUZZ++ uncovers 23 previously-unknown GUI-induced bugs— with 14 thus far confirmed or fixed by developers.
DOI 原文 ·
@inproceedings{paperbot9316,
title = {GUIFuzz++: Unleashing Grey-box Fuzzing on Desktop Graphical User Interfacing Applications},
author = {Dillon Otto and Tanner Rowlett and Stefan Nagy},
booktitle = {ASE},
year = {2025},
doi = {10.1109/ase63991.2025.00098}
}