WikiFlip
June 15, 2026 ยท View on GitHub
WikiFlip es una aplicacion FAP para Flipper Zero que implementa un diccionario offline de ciberseguridad. La version 1.1 usa datos estaticos en C para compilar sin microSD, parsers externos ni conectividad.
Contenido
WikiFlip incluye 100 terminos distribuidos asi:
Protocolos 12
OWASP Top 10:2025 10
NIST 10
CVE 12
BlueTeam 12
RedTeam 12
Threat Intelligence 10
HardwareHacking 12
ISO 10
La categoria OWASP contiene el Top 10:2025 completo:
A01:2025 - Broken Access Control
A02:2025 - Security Misconfiguration
A03:2025 - Software Supply Chain Failures
A04:2025 - Cryptographic Failures
A05:2025 - Injection
A06:2025 - Insecure Design
A07:2025 - Authentication Failures
A08:2025 - Software or Data Integrity Failures
A09:2025 - Security Logging and Alerting Failures
A10:2025 - Mishandling of Exceptional Conditions
Arquitectura
WikiFlipApp
Gui*
ViewDispatcher*
Submenu* categories_menu
Submenu* terms_menu
Widget* definition_widget
FuriString* definition_buffer
WikiFlipCategory* current_category
La GUI usa ViewDispatcher con tres vistas:
WikiFlipViewCategories -> Submenu principal de categorias
WikiFlipViewTerms -> Submenu de terminos por categoria
WikiFlipViewDefinition -> Widget con scroll vertical
Las definiciones largas se muestran con widget_add_text_scroll_element(). El scroll se controla con D-pad Up/Down de forma nativa.
Mapa de navegacion
Abrir app
-> Categorias
OK: abrir terminos de categoria
Back: salir
-> Terminos
OK: abrir definicion
Back: volver a categorias
-> Definicion
Up/Down: scroll vertical
Back: volver a terminos
Como anadir terminos
- Abrir
wikiflip.c. - Ubicar el array de la categoria:
static const WikiFlipTerm wikiflip_redteam_terms[] = {
{
.title = "C2",
.definition = "Definicion...",
},
};
- Agregar una entrada:
{
.title = "Nuevo Termino",
.definition =
"Definicion tecnica larga. Puede usar saltos de linea con \\n\\n "
"y literales concatenados para mantener el codigo legible.",
},
WIKIFLIP_ARRAY_SIZE() calcula el contador en compilacion.
Como anadir categorias
- Crear un array:
static const WikiFlipTerm wikiflip_forense_terms[] = {
{
.title = "Timeline",
.definition = "Secuencia temporal de eventos para analisis forense.",
},
};
- Registrar la categoria en
wikiflip_categories[]:
{
.name = "Forense",
.terms = wikiflip_forense_terms,
.term_count = WIKIFLIP_ARRAY_SIZE(wikiflip_forense_terms),
},
Compilacion con uFBT
Desde la raiz del proyecto:
ufbt
Salida esperada:
dist/wikiflip.fap
Para instalar y lanzar en un Flipper conectado por USB:
ufbt launch
Compilacion dentro de firmware
Copiar el proyecto dentro de applications_user del firmware oficial, Momentum u otro fork compatible con FBT:
Copy-Item -Recurse "C:\Users\R0G3R\Documents\Tools\Flipper Zero\WikiFlip" "C:\ruta\firmware\applications_user\WikiFlip"
Compilar:
.\fbt.cmd build APPSRC=applications_user\WikiFlip
Lanzar:
.\fbt.cmd launch APPSRC=applications_user\WikiFlip
Build directo por App ID:
.\fbt.cmd fap_wikiflip
Icono
El icono FAP esta en:
images/wikiflip_10px.png
Es un PNG 10x10 px, 1-bit, con silueta de libro y letras WF.
Publicacion en Flipper Lab
Flipper Lab no recibe el binario manualmente para publicarlo en el catalogo. La publicacion se hace mediante pull request al repositorio oficial flipperdevices/flipper-application-catalog, apuntando a un repositorio GitHub publico que contenga esta app.
Guia local:
docs/flipper_lab_submission.md
Plantilla de manifest de catalogo:
docs/manifest.yml.example
Requisitos importantes:
Repositorio GitHub publico
Licencia open source
application.fam con appid, version, categoria e icono
README.md
docs/changelog.md
screenshots reales tomadas con qFlipper
manifest.yml en applications/Tools/wikiflip/ dentro del catalogo oficial
Ciclo de vida de memoria
Inicializacion:
malloc(WikiFlipApp)
furi_record_open(RECORD_GUI)
view_dispatcher_alloc()
submenu_alloc()
widget_alloc()
furi_string_alloc()
view_dispatcher_add_view()
view_dispatcher_attach_to_gui()
Liberacion:
view_dispatcher_remove_view()
widget_free()
submenu_free()
view_dispatcher_free()
furi_string_free()
furi_record_close(RECORD_GUI)
free(WikiFlipApp)
Este orden evita que el dispatcher mantenga referencias a vistas ya liberadas.