help/content/files/challenge.md
Pierre-Olivier Mercier bb27b82594
All checks were successful
continuous-integration/drone/push Build is passing
Update content for 2022
2021-05-08 22:59:01 +02:00

6.0 KiB

date title weight
2019-04-04T15:59:52+02:00 challenge.txt 20

Le fichier challenge.txt définit les paramètres de votre défi (au format toml) :

  • gain = 42 : nombre de points que rapporte ce défi ;
  • tags = ["Android", "RAT", "ROM"] : mots-clefs du défi ;
  • [[depend]] : dépendance à un autre défi :
    • id = CHID : identifiant du défi ;
    • theme = "NomDuTheme" : (facultatif) nom du scénario/thème dans lequel aller chercher l'identifiant (par défaut, on prend le thème courant) ;
  • [[flag]] : chaîne de validation pour résoudre le défi :
    • type = "key" : (facultatif, par défaut "key") type de flag :
      • key : [drapeau classique]({{< relref "/responses/simple.md" >}}),
      • vector : [liste de drapeaux]({{< relref "/responses/vector.md" >}}),
      • mcq : [question à choix multiple]({{< relref "/responses/mcq.md" >}}) (cases à cocher) avec ou sans [justification]({{< relref "/responses/mcq_justified.md" >}}),
      • ucq : [liste de choix]({{< relref "/responses/ucq.md" >}}) ;
    • id = 42 : (facultatif) identifiant du flag au sein du défi, pour définir des dépendances ;
    • label = "Intitulé" : (facultatif, par défaut : Flag) intitulé du drapeau ;
    • raw = 'MieH2athxuPhai6u' ou raw = ['part1', 'part2'] : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut showlines) ;
    • showlines = false : (facultatif, par défaut : false) lorsque le drapeau est un tableau et que showlines est vrai, le nombre d'éléments du tableau sera donné au participant, sinon il devra déterminer lui-même le nombre d'éléments à trouver (pour l'instant cette option est limitée à un tableau de 9 éléments maximum, c'est normal si ça bug au delà, demandez-moi si vous avez besoin de plus) ;
    • ordered = false : (facultatif, par défaut : false) ignore l'ordre dans lequels les éléments du tableau sont passés ;
    • validator_regexp = "^(?:sudo +)?(.*)$" : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que ?: au début d'un groupe ne le capturera pas) ;
    • casesensitive = true : (facultatif, par défaut : false) prend en compte la casse de ce drapeau ;
    • placeholder = "dd/mm/yyyy" : (facultatif) chaîne de caractères initiale placée dans le champ du formulaire, idéale pour donner une indication de format ;
    • help = "Complément" : (facultatif) petit paragraphe placé sous le champ du formulaire, idéal pour donner une indication complémentaire ;
    • choices_cost = 42 : (facultatif) coût pour afficher les choix : avant l'affichage, se comporte comme un drapeau key classique (à 0, les choix sont affichés directement)
    • noshuffle = true : (facultatif, par défaut false) conserve l'ordre des propositions, au lieu de les mélanger ;
    • [[flag.unlock_file]] : bloque l'accès à un fichier tant que le flag n'est pas obtenu :
      • filename = "toto.txt" : nom du fichier tel qu'il apparaît dans le dossier files ;
    • [[flag.need_flag]] : liste des flags devant être validés avant de débloquer celui-ci :
      • id = 23 : identifiant du flag tel qu'il a été défini plus tôt dans le fichier ;
    • [[flag.choice]] : représente un choix, répétez autant de fois qu'il y a de choix (pour les mcq et ucq) :
      • label = "Intitulé de la réponse" (facultatif, par défaut raw),
      • value = true (facultatif, par défaut false, sauf si raw est précisé) : valeur attendue pour ce choix,
      • raw = "Justification" (nécessaire pour un [QCM justifié]({{< relref "/responses/mcq_justified.md" >}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées),
      • help = "Flag correspondant" : (facultatif) indication affichée dans le champ de texte des QCM justifiés,
      • ... toutes les autres propriétés applicables à un flag simple peuvent être utilisées : ordered, validator_regexp, casesensitive, ... ;
  • [[hint]] : paramètres pour un indice :
    • filename = "toto.txt" : (mutuellement exclusif avec content) nom du fichier tel qu'il apparaît dans le dossier hints ;
    • content = "Contenu de l'indice" : (mutuellement exclusif avec filename) contenu de l'indice affiché, en markdown ;
    • cost = 10 : (facultatif, par défaut 1/4 des gains du défi) coût de l'indice ;
    • title = "Foo Bar" : (facultatif, par défaut "Astuce $id") titre de l'astuce dans l'interface ;
    • [[hint.need_flag]] : liste des flags devant être validés pour débloquer cet indice :
      • id = 23 : identifiant du flag ;

Voir aussi [la section sur les flags]({{< relref "/responses" >}}).

Exemple

gain = 42

[[depend]]
id = 2

[[flag]]
label = "Date d'exfiltration"
help= "yyyy-mm"
raw = '2015-12'

[[flag]]
label = "IPv6 d'exfiltration"
raw = 'fe80::319c:1002:7c60:68fa'

[[flag]]
type = "mcq"
label = "Conditions générales de validation de challenge"
raw = 'conscent'

  [[flag.choice]]
  label = "J'accepte les conditions"
  value = 'conscent'

[[flag]]
type = "ucq"
label = "Quelle est la couleur du cheval blanc d'Henri IV ?"
raw = 'blanc'
choices_cost = 21

  [[flag.choice]]
  value = 'Noir'

  [[flag.choice]]
  label = 'Roux'
  value = 'Alezan'

  [[flag.choice]]
  label = 'Brun'
  value = 'Alezan'

  [[flag.choice]]
  label = "Crème"
  value = 'Blanc'

[[flag]]
type = "mcq"
label = "Quels sont les films réalisés par C. Nolan ?"

  [[flag.choice]]
  label = "Memento"
  value = true

  [[flag.choice]]
  label = "Inception"
  value = true

  [[flag.choice]]
  label = "Transcendance"

[[hint]]
filename = 'enocean-specs.pdf'
title = "Spécifications du protocole utilisé"

[[hint]]
content = """
Le TOML c'est magique.
Je peux avoir des chaînes de caractères sur plusieurs lignes !
"""
title = "L'astuce du siècle"
cost = 30