<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Cours TLS-SEC et Cryptis</title>
    <link>https://tls-sec.skyblue.team/</link>
    <description>Recent content on Cours TLS-SEC et Cryptis</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>fr-FR</language>
    <atom:link href="https://tls-sec.skyblue.team/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Corrections des TP</title>
      <link>https://tls-sec.skyblue.team/corrections.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/corrections.html</guid>
      <description>&lt;h2 id=&#34;tp-reverse&#34;&gt;TP Reverse&lt;/h2&gt;
&lt;p&gt;Vous trouverez une correction du TP PipeServer contenant une base de donnée IDA et un fichier Python permettant d&amp;rsquo;exécuter l&amp;rsquo;exploit ici: &lt;a href=&#34;https://tls-sec.skyblue.team/documents/reverse/correction_tp_pipeserver.zip&#34;&gt;correction_tp_pipeserver.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour trouver l&amp;rsquo;adresse de la structure &lt;code&gt;EXCEPTION_REGISTRATION_RECORD&lt;/code&gt;, débuggez PipeServer avec IDA en mettant un breakpoint dans la fonction responsable de vérifier le nom d&amp;rsquo;utilisateur et le mot de passe. Une fois votre EIP dedans, ouvrez le menu &amp;ldquo;Debugger&amp;rdquo; &amp;gt; &amp;ldquo;Debugger windows&amp;rdquo; &amp;gt; &amp;ldquo;SEH List&amp;rdquo;. L&amp;rsquo;adresse dans la pile du SEH record vous est indiquée. Comparez-la à celle de &amp;ldquo;Str1&amp;rdquo; pour savoir quelle taille doit faire votre buffer afin de pouvoir l&amp;rsquo;écraser.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="tp-reverse">TP Reverse</h2>
<p>Vous trouverez une correction du TP PipeServer contenant une base de donnée IDA et un fichier Python permettant d&rsquo;exécuter l&rsquo;exploit ici: <a href="/documents/reverse/correction_tp_pipeserver.zip">correction_tp_pipeserver.zip</a></p>
<p>Pour trouver l&rsquo;adresse de la structure <code>EXCEPTION_REGISTRATION_RECORD</code>, débuggez PipeServer avec IDA en mettant un breakpoint dans la fonction responsable de vérifier le nom d&rsquo;utilisateur et le mot de passe. Une fois votre EIP dedans, ouvrez le menu &ldquo;Debugger&rdquo; &gt; &ldquo;Debugger windows&rdquo; &gt; &ldquo;SEH List&rdquo;. L&rsquo;adresse dans la pile du SEH record vous est indiquée. Comparez-la à celle de &ldquo;Str1&rdquo; pour savoir quelle taille doit faire votre buffer afin de pouvoir l&rsquo;écraser.</p>
<h2 id="tp-forensique">TP Forensique</h2>
<p>Vous pourrez trouver une correction du TP de forensique ici: <a href="/documents/forensics/correction_tp_forensics.pdf">correction_tp_forensics.pdf</a></p>
<p>Cette correction ne va pas jusqu&rsquo;à l&rsquo;analyse de <code>x86.exe</code>, vous pouvez la trouver ici: <a href="/documents/forensics/x86_exe.pdf">x86_exe.pdf</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Machines virtuelles</title>
      <link>https://tls-sec.skyblue.team/vm.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/vm.html</guid>
      <description>&lt;p&gt;Afin de pouvoir suivre les TP le plus simplement possible, nous vous proposons des machines virtuelles qui contiennent tous les outils nécessaires. Ces machines sont au format &lt;a href=&#34;https://en.wikipedia.org/wiki/Open_Virtualization_Format&#34;&gt;OVA&lt;/a&gt;, qui est &lt;em&gt;normalement&lt;/em&gt; standard.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Lien&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Machine de reverse engineering (Windows 10)&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://tls-sec.skyblue.team/documents/vm/VM%20Reverse%202026.ova&#34;&gt;VM Reverse 2026.ova&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Machine de forensique (Ubuntu)&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://tls-sec.skyblue.team/documents/vm/vm-forensics.ova&#34;&gt;vm-forensics.ova&lt;/a&gt;&lt;br&gt;&lt;strong&gt;Nom d&amp;rsquo;utilisateur:&lt;/strong&gt; &lt;code&gt;forensics&lt;/code&gt;&lt;br&gt;&lt;strong&gt;Mot de passe:&lt;/strong&gt; &lt;code&gt;forensics&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</description>
      <content:encoded><![CDATA[<p>Afin de pouvoir suivre les TP le plus simplement possible, nous vous proposons des machines virtuelles qui contiennent tous les outils nécessaires. Ces machines sont au format <a href="https://en.wikipedia.org/wiki/Open_Virtualization_Format">OVA</a>, qui est <em>normalement</em> standard.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">Description</th>
          <th style="text-align: center">Lien</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">Machine de reverse engineering (Windows 10)</td>
          <td style="text-align: center"><a href="/documents/vm/VM%20Reverse%202026.ova">VM Reverse 2026.ova</a></td>
      </tr>
      <tr>
          <td style="text-align: left">Machine de forensique (Ubuntu)</td>
          <td style="text-align: center"><a href="/documents/vm/vm-forensics.ova">vm-forensics.ova</a><br><strong>Nom d&rsquo;utilisateur:</strong> <code>forensics</code><br><strong>Mot de passe:</strong> <code>forensics</code></td>
      </tr>
  </tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Mini-TP reverse</title>
      <link>https://tls-sec.skyblue.team/mini.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/mini.html</guid>
      <description>&lt;p&gt;Archive contenant les programmes à explorer avec &lt;a href=&#34;https://github.com/horsicq/DIE-engine/releases&#34;&gt;Detect-it-Easy&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://tls-sec.skyblue.team/documents/reverse/mini.zip&#34;&gt;mini.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;p&gt;Lien vers Godbolt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://godbolt.org/z/qhxbMMse7&#34;&gt;https://godbolt.org/z/qhxbMMse7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<p>Archive contenant les programmes à explorer avec <a href="https://github.com/horsicq/DIE-engine/releases">Detect-it-Easy</a></p>
<ul>
<li><a href="/documents/reverse/mini.zip">mini.zip</a></li>
</ul>
<hr/>
<p>Lien vers Godbolt:</p>
<ul>
<li><a href="https://godbolt.org/z/qhxbMMse7">https://godbolt.org/z/qhxbMMse7</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>PDF des slides du cours</title>
      <link>https://tls-sec.skyblue.team/cours.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/cours.html</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Slides du cours de reverse: &lt;a href=&#34;https://tls-sec.skyblue.team/documents/reverse/cours-reverse-tlssec.pdf&#34;&gt;cours-reverse.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Slides du cours de forensique: &lt;a href=&#34;https://tls-sec.skyblue.team/documents/forensics/cours-forensics.pdf&#34;&gt;cours-forensics.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<ul>
<li>Slides du cours de reverse: <a href="/documents/reverse/cours-reverse-tlssec.pdf">cours-reverse.pdf</a></li>
<li>Slides du cours de forensique: <a href="/documents/forensics/cours-forensics.pdf">cours-forensics.pdf</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>TP - Analyse forensique</title>
      <link>https://tls-sec.skyblue.team/tp-forensics.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/tp-forensics.html</guid>
      <description>&lt;h2 id=&#34;mini-tp---découvrir-les-artefact-forensique-windows&#34;&gt;Mini-TP - découvrir les artefact forensique Windows&lt;/h2&gt;
&lt;details&gt;
    &lt;summary&gt;Les temps MACB, et le Body file&lt;/summary&gt;
&lt;p&gt;Téléchargez &lt;a href=&#34;https://tls-sec.skyblue.team/documents/forensics/01 - mactime.zip&#34;&gt;01 - mactime.zip&lt;/a&gt; et dézippez-le. Votre machine SIFT devrait déjà contenir les outils nécessaires à l&amp;rsquo;analyse du fichier TXT contenu dans le ZIP.&lt;/p&gt;
&lt;p&gt;Afin de formater le fichier au format Body en quelque chose de plus lisible, nous allons utiliser &lt;code&gt;mactime&lt;/code&gt;. Lisez sa page de manuel afin de vous familiariser avec.&lt;/p&gt;
&lt;p&gt;Répondez aux questions suivantes:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="mini-tp---découvrir-les-artefact-forensique-windows">Mini-TP - découvrir les artefact forensique Windows</h2>
<details>
    <summary>Les temps MACB, et le Body file</summary>
<p>Téléchargez <a href="/documents/forensics/01 - mactime.zip">01 - mactime.zip</a> et dézippez-le. Votre machine SIFT devrait déjà contenir les outils nécessaires à l&rsquo;analyse du fichier TXT contenu dans le ZIP.</p>
<p>Afin de formater le fichier au format Body en quelque chose de plus lisible, nous allons utiliser <code>mactime</code>. Lisez sa page de manuel afin de vous familiariser avec.</p>
<p>Répondez aux questions suivantes:</p>
<ul>
<li>Quand le fichier suivant a-t-il été créé ? : <code>C:\Users\Gérard\Documents\emacs-22.3\README.W32</code> (le temps &ldquo;B&rdquo;)</li>
<li>D&rsquo;où provient-il ? (Qu&rsquo;est-ce qu&rsquo;il fait ici ?)</li>
<li>Quelle est la date de dernière modification de son contenu ? (le temps &ldquo;M&rdquo;)</li>
<li>Identifiez-vous un problème dans ces deux dates ? Comment l&rsquo;expliquer ?</li>
</ul>
</details>
<details>
    <summary>Les journaux d'événements Windows</summary>
Téléchargez <a href="/documents/forensics/02 - evtx.zip">02 - evtx.zip</a> et dézippez-le.
<p>Nous allons utiliser <code>evtxexport</code> pour transformer le fichier EVTX en un fichier XML lisible par un humain. Lancez la commande suivante afin de procéder à l&rsquo;export:</p>






<pre tabindex="0"><code>$ evtxexport -f xml sysmon.evtx</code></pre>
<p>Répondez aux questions suivantes:</p>
<ul>
<li>Quel est le nom de la machine depuis laquelle ce fichier EVTX a été extrait ?</li>
<li>Observez les différents événements, et le cours. Quel est l&rsquo;EventID qui correspond à la création d&rsquo;un processus ?</li>
<li>Quel fichier est identifié par le hash <code>29EFD64DD3C7FE1E2B022B7AD73A1BA5</code> ? Quelle était la ligne de commande utilisée pour le lancer ?</li>
</ul>
</details>
<details>
<summary>Extraction d'informations depuis des ruches de registre</summary>
<p>Téléchargez <a href="/documents/forensics/03 - registry.zip">03 - registry.zip</a> et dézippez-le. Installez <code>regripper</code> depuis APT, ou <code>regrippy</code> depuis PyPI.</p>
<p>Lisez la documentation de regripper ou <a href="https://airbus-cert.github.io/regrippy/">regrippy</a>.</p>
<p>Répondez aux questions suivantes:</p>
<ul>
<li>Listez les programmes lancés automatiquement lors de la connexion de Gérard.</li>
<li>Lequel vous paraît suspect ?</li>
</ul>
</details>
<h2 id="tp---réponse-à-incident-analyse-dune-machine-compromise-par-un-groupe-apt">TP - Réponse à incident, analyse d&rsquo;une machine compromise par un groupe APT</h2>

<p>Mise en situation: vous venez de recevoir un mail d&rsquo;alerte du Security Operations Center.</p>
<blockquote>
<p>Les équipes réseaux nous ont informé avoir vu passer du trafic suspect qui semblerait provenir d&rsquo;un ordinateur portable d&rsquo;un de nos employés. Les paquets sont à destination de l&rsquo;IP <strong>63.32.214.139</strong>, qui est bien connue, et est associé à Equation Group. Nous avons effectué une capture de la machine en suivant la procédure, vous trouverez les fichiers en pièce jointe.</p></blockquote>
<p>L&rsquo;archive contenant les fichiers importants de la machine, un Body file du disque dur, et une capture mémoire, peut se télécharger ici: <a href="/documents/forensics/tp-forensics.zip">tp-forensics.zip</a> (2.6 GiB)</p>
<p>Nous utiliserons Volatility afin d&rsquo;analyser le dump de mémoire: voici <a href="https://blog.onfvp.com/post/volatility-cheatsheet/">une cheatsheet</a> contenant les plugins les plus utilisés. Pour analyser les fichiers extraits depuis la machine, référez-vous <a href="/cours-forensics.pdf">aux slides du cours</a>.</p>
<p>L&rsquo;analyse de cet incident est relativement longue: prenez des notes sur ce que vous observez afin de pouvoir y revenir. Elle est plutôt guidée par rapport à une vraie réponse sur incident: l&rsquo;idée est de guider votre analyse vers les bons indices afin que vous puissiez arriver au bout aujourd&rsquo;hui. <strong>N&rsquo;hésitez pas à demander de l&rsquo;aide !</strong></p>
<details>
<summary>Etape 1: identification du point d'entrée</summary>
<ul>
<li>Quel début de piste pouvez-vous identifier dans le message du SOC ?</li>
<li>Comment pouvez-vous identifier les processus liés à cet IoC ?</li>
<li>Listez les processus liés à cet IoC. Vous devriez en trouver 2.</li>
<li><em>Réponse (surlignez):</em> <span style="color: var(--accent-bg);">x86.exe et WINWORD.exe</span></li>
</ul>
</details>
<details>
<summary>Etape 2: analyse de maldoc</summary>
<ul>
<li>Récupérez la ligne de commande complète utilisée pour lancer Word</li>
<li>Grâce à cette ligne de commande, identifiez le fichier ouvert dans Word</li>
<li>Identifiez quand il a été créé</li>
<li>Récupérez-le (depuis la mémoire)</li>
<li>Analysez-le, en utilisant <a href="https://github.com/decalage2/oletools/wiki/olevba"><code>olevba</code></a> pour lister les macros. Lisez ensuite <a href="https://blog.sunggwanchoi.com/remote-template-injection/">cet article sur le Remote Template Injection</a>, et vérifiez que vous observez bien cette technique dans votre document.</li>
<li>Récupérez le template chargé par Word et analysez ses macros</li>
</ul>
</details>
<details>
<summary>Etape 2 bis: déterminer la source du fichier</summary>
<p>Nous allons étudier le contenu de l&rsquo;<a href="https://en.wikipedia.org/wiki/USN_Journal">USN Journal</a> de la machine compromise afin de mieux comprendre d&rsquo;où provient le document Word en question. L&rsquo;USN Journal est un artefact du système de fichiers NTFS qui liste les changements récents sur un volume, tel que les nouveaux fichiers, les renommages, et les suppressions.</p>
<p>Le fichier contenant ces informations se nomme <code>$UsnJrnl:$J</code>, et est situé dans le dossier caché <code>$Extend</code> à la racine du disque.</p>
<p>Vous pourrez utiliser <a href="https://github.com/PoorBillionaire/USN-Journal-Parser"><code>PoorBillionaire/USN-Journal-Parser</code></a> afin de parser ce fichier.</p>






<pre tabindex="0"><code>pip install git+https://github.com/PoorBillionaire/USN-Journal-Parser</code></pre>
<ul>
<li>Identifiez les lignes correspondant au fichier Word dans le Body file donné avec le dump. Quels Alternate Data Streams pouvez-vous identifier ?</li>
<li>Qu&rsquo;est-ce que cela signifie ?</li>
<li>Parsez l&rsquo;USN Journal avec le script</li>
<li>Cherchez la ligne correspondant à la création du document. Observez les modifications ayant eu lieu peu avant. Que pouvez-vous en déduire concernant l&rsquo;origine du document</li>
</ul>
</details>
<details>
<summary>Etape 3: analyse de malware</summary>
<ul>
<li>Récupérez le fichier <code>x86.exe</code></li>
<li>Cet exécutable est un malware d&rsquo;une famille bien connue. Laquelle ?</li>
<li>Grâce à cette information, extrayez sa configuration</li>
<li>Déterminez son processus parent</li>
<li>Déterminez comment ce processus en est venu à exécuter ce malware</li>
</ul>
</details>
]]></content:encoded>
    </item>
    <item>
      <title>TP - Reverse engineering</title>
      <link>https://tls-sec.skyblue.team/tp-reverse.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/tp-reverse.html</guid>
      <description>&lt;p&gt;Le TP peut être téléchargé ici: &lt;a href=&#34;https://tls-sec.skyblue.team/documents/reverse/tp-reverse.zip&#34;&gt;tp-reverse.zip&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vous pouvez aussi récupérer une cheatsheet pour IDA qui reprend les raccourcis clavier les plus utilisés: &lt;a href=&#34;https://tls-sec.skyblue.team/documents/reverse/ida_cheatsheet.pdf&#34;&gt;ida_cheatsheet.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois à la fin du TP, vous aurez l&amp;rsquo;occasion de faire exécuter un shellcode par l&amp;rsquo;application: vous pouvez utiliser celui-ci, qui ouvrira &lt;code&gt;calc.exe&lt;/code&gt;.&lt;/p&gt;






&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;shellcode &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\x31\xdb\x64\x8b\x7b\x30\x8b\x7f\x0c\x8b\x7f\x1c\x8b\x47\x08\x8b\x77\x20\x8b\x3f\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x89\xdd\x8b\x34\xaf\x01\xc6\x45\x81\x3e\x43\x72\x65\x61\x75\xf2\x81\x7e\x08\x6f\x63\x65\x73\x75\xe9\x8b\x7a\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf\xfc\x01\xc7\x89\xd9\xb1\xff\x53\xe2\xfd\x68\x63\x61\x6c\x63\x89\xe2\x52\x52\x53\x53\x53\x53\x53\x53\x52\x53\xff\xd7\xcd\x29&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>Le TP peut être téléchargé ici: <a href="/documents/reverse/tp-reverse.zip">tp-reverse.zip</a>.</p>

<p>Vous pouvez aussi récupérer une cheatsheet pour IDA qui reprend les raccourcis clavier les plus utilisés: <a href="/documents/reverse/ida_cheatsheet.pdf">ida_cheatsheet.pdf</a>.</p>
<p>Une fois à la fin du TP, vous aurez l&rsquo;occasion de faire exécuter un shellcode par l&rsquo;application: vous pouvez utiliser celui-ci, qui ouvrira <code>calc.exe</code>.</p>






<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>shellcode <span style="color:#f92672">=</span> <span style="color:#e6db74">b</span><span style="color:#e6db74">&#34;</span><span style="color:#ae81ff">\x31\xdb\x64\x8b\x7b\x30\x8b\x7f\x0c\x8b\x7f\x1c\x8b\x47\x08\x8b\x77\x20\x8b\x3f\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x89\xdd\x8b\x34\xaf\x01\xc6\x45\x81\x3e\x43\x72\x65\x61\x75\xf2\x81\x7e\x08\x6f\x63\x65\x73\x75\xe9\x8b\x7a\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf\xfc\x01\xc7\x89\xd9\xb1\xff\x53\xe2\xfd\x68\x63\x61\x6c\x63\x89\xe2\x52\x52\x53\x53\x53\x53\x53\x53\x52\x53\xff\xd7\xcd\x29</span><span style="color:#e6db74">&#34;</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>TP: Windows NT 4.0</title>
      <link>https://tls-sec.skyblue.team/nt4.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://tls-sec.skyblue.team/nt4.html</guid>
      <description>&lt;script src=&#34;libv86.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
window.onload = function() {
    var emulator = new V86({
        screen_container: document.getElementById(&#34;computer&#34;),
        memory_size: 64 * 1024 * 1024,
        vga_memory_size: 20 * 1024 * 1024,
        bios: {
                url: &#34;/documents/reverse/nt4/seabios.bin&#34;,
        },
        vga_bios: {
                url: &#34;/documents/reverse/nt4/vgabios.bin&#34;,
        },
        hda: {
                url: &#34;/documents/reverse/nt4/hdd.img.zst&#34;,
                //async: true,
                size: 134217728,
        },
        cdrom: {
                url: &#34;/documents/reverse/nt4/installer.iso&#34;,
                async: false,
                size: 546971648,
        },
        autostart: true,
        cpuid_level: 2,
        acpi: false
    });

    emulator.add_listener(&#34;screen-set-size&#34;, function() {
        setTimeout(function() {
            var s = document.getElementById(&#34;computer&#34;).querySelector(&#34;canvas&#34;).style.cssText;
            s = s.replace(/(width|height):[^;]+;/, &#34;&#34;);
            document.getElementById(&#34;computer&#34;).querySelector(&#34;canvas&#34;).style.cssText = s;
        }, 500);
    });

    emulator.add_listener(&#34;download-progress&#34;, function(file) {
        let percent = Math.round((file[&#34;loaded&#34;] / file[&#34;total&#34;]) * 100);
        document.getElementById(&#34;files&#34;).setAttribute(&#34;value&#34;, file[&#34;file_index&#34;]+1);
        document.getElementById(&#34;percent&#34;).setAttribute(&#34;value&#34;, percent);

        if (percent == 100 &amp;&amp; file[&#34;file_index&#34;] == 3) {
            document.getElementById(&#34;download&#34;).setAttribute(&#34;style&#34;, &#34;display:none;&#34;);
        }
    });

    let el = document.querySelector(&#34;#computer&#34;);
    el.addEventListener(&#34;click&#34;, async function(e) { await el.requestPointerLock(); });

    document.getElementById(&#34;ctrlaltdel&#34;).addEventListener(&#34;click&#34;, function() {
        emulator.keyboard_send_scancodes([
            0x1D, // ctrl
            0x38, // alt
            0x53, // delete

            // break codes
            0x1D | 0x80,
            0x38 | 0x80,
            0x53 | 0x80,
        ]);
    });
};
&lt;/script&gt;
&lt;p id=&#34;download&#34;&gt;
    &lt;progress id=&#34;files&#34; max=&#34;4&#34; value=&#34;0&#34;&gt;&lt;/progress&gt;&lt;br&gt;
    &lt;progress id=&#34;percent&#34; max=&#34;100&#34; value=&#34;0&#34;&gt;&lt;/progress&gt;
&lt;/p&gt;</description>
      <content:encoded><![CDATA[<script src="libv86.js"></script>
<script>
window.onload = function() {
    var emulator = new V86({
        screen_container: document.getElementById("computer"),
        memory_size: 64 * 1024 * 1024,
        vga_memory_size: 20 * 1024 * 1024,
        bios: {
                url: "/documents/reverse/nt4/seabios.bin",
        },
        vga_bios: {
                url: "/documents/reverse/nt4/vgabios.bin",
        },
        hda: {
                url: "/documents/reverse/nt4/hdd.img.zst",
                //async: true,
                size: 134217728,
        },
        cdrom: {
                url: "/documents/reverse/nt4/installer.iso",
                async: false,
                size: 546971648,
        },
        autostart: true,
        cpuid_level: 2,
        acpi: false
    });

    emulator.add_listener("screen-set-size", function() {
        setTimeout(function() {
            var s = document.getElementById("computer").querySelector("canvas").style.cssText;
            s = s.replace(/(width|height):[^;]+;/, "");
            document.getElementById("computer").querySelector("canvas").style.cssText = s;
        }, 500);
    });

    emulator.add_listener("download-progress", function(file) {
        let percent = Math.round((file["loaded"] / file["total"]) * 100);
        document.getElementById("files").setAttribute("value", file["file_index"]+1);
        document.getElementById("percent").setAttribute("value", percent);

        if (percent == 100 && file["file_index"] == 3) {
            document.getElementById("download").setAttribute("style", "display:none;");
        }
    });

    let el = document.querySelector("#computer");
    el.addEventListener("click", async function(e) { await el.requestPointerLock(); });

    document.getElementById("ctrlaltdel").addEventListener("click", function() {
        emulator.keyboard_send_scancodes([
            0x1D, // ctrl
            0x38, // alt
            0x53, // delete

            // break codes
            0x1D | 0x80,
            0x38 | 0x80,
            0x53 | 0x80,
        ]);
    });
};
</script>
<p id="download">
    <progress id="files" max="4" value="0"></progress><br>
    <progress id="percent" max="100" value="0"></progress>
</p>
<div id="computer" style="display: block;">
        <div style="white-space: pre; font: 14px monospace; line-height: 14px"></div>
        <canvas style="display: none"></canvas>
</div>
<p><button id="ctrlaltdel">Ctrl-Alt-Suppr</button></p>
<p>Fichiers nécessaires:</p>
<ul>
<li><a href="/documents/reverse/nt4/syssetup.dll"><code>syssetup.dll</code></a></li>
<li><a href="/documents/reverse/nt4/keygen.zip"><code>keygen.zip</code></a></li>
</ul>
<details>
    <summary>Contenu du TP</summary>
<h2 id="keygen-pour-windows-nt-4">Keygen pour Windows NT 4</h2>
<p>Ce TP va vous guider dans l&rsquo;analyse de l&rsquo;algorithme de vérification de clés CD
de Windows NT Workstation 4.0. Une fois que nous l&rsquo;aurons compris, nous allons pouvoir
terminer le processus d&rsquo;installation sans pour autant avoir acheté de clé !</p>
<p>Avant l&rsquo;avènement des DRM connectés, les éditeurs de logiciels voulaient rendre plus
difficile la copie illégale de leurs produits. Une solution assez simple était de
demander à l&rsquo;utilisateur une clé semi-aléatoire écrite dans le manuel: de cette manière,
le manuel physique était nécessaire à l&rsquo;installation, et il était plus difficile de
partager le logiciel avec n&rsquo;importe qui.
Bien sûr, ça n&rsquo;était pas une protection parfaite: <img src="https://pbs.twimg.com/media/FaUyI2ZUcAI9ubc.jpg" alt="windows XP CD avec la clé écrite au marqueur"></p>
<p>Les versions de Microsoft Windows avant Windows 98 utilisent un algorithme très simple,
que vous allez retrouver et analyser.
On travaillera sur Windows NT 4, une des premières versions commerciales de Windows à
proposer le noyau NT, qui est encore utilisé dans les version modernes de Windows.</p>
<h3 id="ingrédients-nécessaires">Ingrédients nécessaires:</h3>
<ul>
<li>Le fichier &ldquo;syssetup.dll&rdquo;, qui contient le programme d&rsquo;installation</li>
<li>IDA Free, ou Ghidra</li>
<li>Resource Hacker: <a href="https://www.angusj.com/resourcehacker/">https://www.angusj.com/resourcehacker/</a></li>
</ul>
<h3 id="questions">Questions:</h3>
<ul>
<li>Lancez la VM contenant l&rsquo;installeur. Progressez jusqu&rsquo;au moment où une clé CD vous
est demandée. Rendez-vous compte que vous êtes bloqué !</li>
<li>Prenez une capture d&rsquo;écran de cette fenêtre.</li>
</ul>
<p>Les programmes Windows peuvent, en plus du code exécutable, embarquer un grand nombre
de &ldquo;ressources&rdquo;. Celles-ci correspondent aux icônes, images, boîtes de dialogue, chaînes
de caractères, etc. utilisées par le programme. <a href="https://en.wikipedia.org/wiki/Resource_(Windows)">https://en.wikipedia.org/wiki/Resource_(Windows)</a></p>
<ul>
<li>Avec Resource Hacker, baladez vous dans les ressources de &ldquo;syssetup.dll&rdquo;</li>
<li>Retrouvez la boîte de dialogue correspondant à la capture d&rsquo;écran que vous aviez prise.
Quel est son &ldquo;nameID&rdquo; ?
<a href="https://learn.microsoft.com/en-us/windows/win32/menurc/dialog-resource">https://learn.microsoft.com/en-us/windows/win32/menurc/dialog-resource</a></li>
<li>Ouvrez &ldquo;syssetup.dll&rdquo; dans IDA. Afin de présenter ce dialogue à l&rsquo;utilisateur, l&rsquo;application
va devoir le référencer par son &ldquo;nameID&rdquo;. Cherchez ce nameID dans le programme. Vous devriez
trouver 3 références à cette valeur dans du code (segment <code>.text</code>)</li>
<li>Les trois références sont dans la même fonction: rendez-vous y.</li>
<li>Quels sont les ID des deux champs texte dans le dialogue demandant la clé CD ? Cherchez ces ID
dans la fonction. Avec quelle fonction de l&rsquo;API Win32 sont-ils utilisés ?</li>
</ul>
<p>Continuez votre analyse de la fonction trouvée dans &ldquo;syssetup.dll&rdquo;, et des fonctions annexes, afin
de répondre aux questions suivantes:</p>
<ul>
<li>
<p>Quelle taille doit faire la première partie de la clé CD ?</p>
</li>
<li>
<p>Quelle taille doit faire la deuxième partie de la clé CD ?</p>
</li>
<li>
<p>Quelle taille doit faire la troisième partie de la clé CD ?</p>
</li>
<li>
<p>Des restrictions sont-elles imposées sur la troisième partie de la clé ?</p>
</li>
<li>
<p>A quoi correspond la première partie de la clé, à votre avis ?</p>
</li>
</ul>
<p>La validation de la deuxième partie de la clé est un peu plus complexe: avoir une table ASCII sous
les yeux peut être une aide intéressante.</p>
<ul>
<li>Quelles sont les conditions pour que la deuxième partie soit valide ?</li>
<li>Les trois parties sont-elles liées entre elles ?</li>
</ul>
<p>Avec les connaissances obtenues, trouvez une clé CD valide (aide: il en existe une triviale, utilisez
des zéro). Utilisez-la pour terminer le processus d&rsquo;installation.
Une fois terminé, connectez-vous avec le compte par défaut pour la suite du TP !</p>
</details>
]]></content:encoded>
    </item>
  </channel>
</rss>
