diff --git a/content/files/_index.md b/content/files/_index.md
index 14182c0..20185c7 100644
--- a/content/files/_index.md
+++ b/content/files/_index.md
@@ -7,7 +7,7 @@ weight: 10
Afin de pouvoir être importé automatiquement sur la plate-forme, vos scénarios
doivent respecter une certaine arborescence que voici :
-
+```
.
├── AUTHORS.txt
├── overview.txt
@@ -32,7 +32,7 @@ doivent respecter une certaine arborescence que voici :
├── CHID-Titre du défi/
│ └── ...
└── ...
-
+```
{{% notice info %}}
N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans
@@ -54,15 +54,14 @@ contenu des fichiers :
Dans les noms de dossiers, `CHID` correspond à un identifiant permettant de référencer votre défi (pour déclarer une dépendance sur celui-ci par exemple).
L'import s'effectuant selon l'ordre alphabétique, vous devriez utiliser le numéro d'ordre de l'exercice comme identifiant :
-
+```
.
├── 1-Titre du premier défi/
│ └── ...
├── 2-Titre du deuxième défi/
│ └── ...
└── ...
-
-
+```
Dans cet exemple, si l'ordre était déterminé uniquement par l'ordre alphabétique des noms de dossiers, le **d**euxième serait devant le **p**remier (`d}}).
### `statement.txt`
-contenant le scénario du challenge, tel qu'il sera affiché sur le site, à destination des participants
-Une présentation rapide du défi (~1-2 phrases), compréhensible par un décideur,
-petit schéma à l'appui si besoin.
+L'énoncé du défi, tel qu'il sera affiché sur le site, à destination des participants.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
@@ -197,10 +194,10 @@ Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition
des participants.
Chaque fichier doit avoir une entrée correspondante dans le fichier
-`DIGESTS.txt` ; plus d'infos sur la page [`DIGESTS.txt`]({{}}).
-- Pas plus 4GB à télécharger **par challenge** (ie. tous les fichiers de ce challenge)
+- Pas plus 4GB à télécharger **par défi** (ie. tous les fichiers de ce défi) : 4GB, c'est 5 minutes 20 de téléchargement, c'est vraiment beaucoup lorsqu'on est impatient de faire le défi.
- Archives `.tar.bz2`, `.tar.gz`, `.tar.xz` ou `.zip` lorsque nécessaire. **PAS** de `.rar`, ...
- Compresser (sans tarball, juste via **gzip**[^gz]) les fichiers lorsque c'est utile (memory dump, images BMP, disques, fichiers textes, ...)
- Utiliser `$(split -b 240M -d BIG_FILE BIG_FILE.)` pour uploader les gros fichiers sur owncloud.
@@ -227,6 +224,6 @@ titre, ...
### `ressources/`
Rangez dans ce dossier toutes les ressources et scripts que vous avez réalisés
-pour le challenge : pour sa construction ou sa résolution, les schémas du SI au
-premier challenge concerné, éventuellement un `README.txt` avec les liens des
+pour le défi : pour sa construction ou sa résolution, les schémas du SI au
+premier défi concerné, éventuellement un `README.txt` avec les liens des
outils externes.
diff --git a/content/files/challenge.md b/content/files/challenge.md
index 60724bb..beb3f0c 100644
--- a/content/files/challenge.md
+++ b/content/files/challenge.md
@@ -4,44 +4,47 @@ title: challenge.txt
weight: 20
---
-+ `challenge.txt` définitions des paramètres de votre challenge (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)) :
- - `gain = 42` : nombre de points que rapporte cet exercice ;
- - `tags = ["Android", "RAT", "ROM"]` : mots-clefs de l'exercice ;
- - `[[depend]]` : dépendance à un autre exercice :
- * `id = CHID` : identifiant du challenge ;
- * `theme = "NomDuTheme"` : (facultatif) nom du 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 challenge :
- * `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 de l'exercice, 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 ;
- * `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 case de ce drapeau ;
- * `help = "Indication"` : (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ;
- * `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"`,
- + `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 challenge) 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 ;
+Le fichier `challenge.txt` définit les paramètres de votre défi (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)) :
+
+- `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 case 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 paragrpahe placée 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" >}}).
@@ -55,13 +58,12 @@ id = 2
[[flag]]
label = "Date d'exfiltration"
-help= "Format : yyyy-mm"
+help= "yyyy-mm"
raw = '2015-12'
[[flag]]
label = "IPv6 d'exfiltration"
raw = 'fe80::319c:1002:7c60:68fa'
-casesensitive = false
[[flag]]
type = "mcq"
diff --git a/content/files/digests.md b/content/files/digests.md
index fac1c6b..55e248c 100644
--- a/content/files/digests.md
+++ b/content/files/digests.md
@@ -8,7 +8,7 @@ Le fichier `DIGESTS.txt` se trouve dans le répertoire `files/` ou `hints/` d'un
défi. Il contient les condensats des fichiers se trouvant dans le dossier
respectif.
-Il génére avec la commande :
+On le génére avec la commande suivante :
```sh
b2sum * > DIGESTS.txt
diff --git a/content/intro/_index.md b/content/intro/_index.md
index cdbf85c..9fd8331 100644
--- a/content/intro/_index.md
+++ b/content/intro/_index.md
@@ -7,4 +7,4 @@ weight: 5
{{% notice note %}}Ébauche à compléter
{{% /notice %}}
-Revoir la [présentation](/fic/presentation.pdf).
+Revoir la [présentation](/fic/intro/presentation.pdf).
diff --git a/static/img/fic.png b/static/img/fic.png
index b44e051..848424e 100644
Binary files a/static/img/fic.png and b/static/img/fic.png differ
diff --git a/static/intro/presentation.pdf b/static/intro/presentation.pdf
index 034c94c..9b7fce5 100644
Binary files a/static/intro/presentation.pdf and b/static/intro/presentation.pdf differ
diff --git a/themes/hugo-theme-learn b/themes/hugo-theme-learn
index 18212e6..b5c759a 160000
--- a/themes/hugo-theme-learn
+++ b/themes/hugo-theme-learn
@@ -1 +1 @@
-Subproject commit 18212e67599813e4f97ecc66ebf3f8b32f54a0b5
+Subproject commit b5c759a3c7ba7a7303a538f7d1982ec578812684