<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mysterie&#039;s blog</title>
	<atom:link href="http://mysterie.fr/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://mysterie.fr/blog</link>
	<description>We&#039;re all mad here. I&#039;m mad. You&#039;re mad.</description>
	<lastBuildDate>Mon, 01 Aug 2011 19:32:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CVE-2011-1281 Privilege escalation in CSRSS proof of concept</title>
		<link>http://mysterie.fr/blog/2011/07/31/cve-2011-1281/</link>
		<comments>http://mysterie.fr/blog/2011/07/31/cve-2011-1281/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 21:55:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://mysterie.fr/blog/?p=107</guid>
		<description><![CDATA[After one year without blogging (all my apologies) I&#8217;m back. A few days ago I&#8217;ve seen the pwnie awards nominations list, there were lot&#8217;s of interesting and sophisticated bug exploitation. But one attract my attention &#171;&#160;Privilege escalation in CSRSS&#160;&#187; discovered by Matthew &#8216;j00ru&#8217; Jurczyk. If you want to undestand this vulnerability and the way to exploit [...]]]></description>
			<content:encoded><![CDATA[<p>After one year without blogging (all my apologies) I&#8217;m back. A few days ago I&#8217;ve seen the <a href="http://pwnies.com/nominations/">pwnie awards</a> nominations list, there were lot&#8217;s of interesting and sophisticated bug exploitation. But one attract my attention &laquo;&nbsp;Privilege escalation in <a href="http://en.wikipedia.org/wiki/Client/Server_Runtime_Subsystem">CSRSS</a>&nbsp;&raquo; discovered by <a href="http://j00ru.vexillium.org/">Matthew &#8216;j00ru&#8217; Jurczyk</a>. If you want to undestand this vulnerability and the way to exploit it, read this excellent post <a href="http://j00ru.vexillium.org/?p=893">http://j00ru.vexillium.org/?p=893</a>. And if you&#8217;re not familiar with CSRSS I advice you to read <a href="http://j00ru.vexillium.org/?p=492">this article</a> or <a href="http://www.ivanlef0u.tuxfamily.org/?p=188">this one</a> (in french).</p>
<p>So, for writing the PoC we have to follow this steps :</p>
<blockquote>
<ol>
<li><em>Spray </em>the shared WIN32K section, by creating a sufficient amount of USER objects. The section is then going to be mapped to every process running in the context of the local desktop, thus we can perform this step at this early point,</li>
<li>Create N instances of a process, each of which will create a single zombie console and then go idle, (*)</li>
<li>Kill all N instanes of the processes,</li>
<li>Create 3N local threads, (**)</li>
<li>Kill 2N threads (in the order described in the “Second Stage” section),</li>
<li>Kill the remaining N threads,</li>
<li>Emulate the win+u key presses, resulting in a new instance of UTILMAN.EXE being created,</li>
<li>Call SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,0xFFF7,0), triggering the execution of CreateRemoteThread on each of the N freed handles.</li>
</ol>
<p>* – by creating a zombie console, we also mean replacing the original <em>PropertiesProc</em> address (used in kernel32!AllocConsole) with a custom pointer.<br />
** – the technique is very time-sensitive. If any handle is picked / stored on the free-list between steps 3 and 4, than steps 5 and 6 might not succeed in setting up the expected free-list handle layout.</p></blockquote>
<p>I wont speak about first step immediately for different reason.<br />
Let&#8217;s start with step two &laquo;&nbsp;create a single zombie console&nbsp;&raquo;, for me it&#8217;s the most hard part. We have to code AllocConsole and AllocConsoleInternal (I only scope Windows XP version for the moment). With AllocConsoleInternal we can control the <strong>PropRoutine</strong> &amp; <strong>CtrlRoutine</strong> of the console. For conding this function I start googling with &laquo;&nbsp;AllocConsoleInternal + PropRoutine + CtrlRoutine&nbsp;&raquo; and reach this function definition :</p>
<blockquote>
<pre>BOOL APIENTRY AllocConsoleInternal(
 IN LPWSTR lpTitle,
 IN DWORD dwTitleLength,
 IN LPWSTR lpDesktop,
 IN DWORD dwDesktopLength,
 IN LPWSTR lpCurDir,
 IN DWORD dwCurDirLength,
 IN LPWSTR lpAppName,
 IN DWORD dwAppNameLength,
 IN LPTHREAD_START_ROUTINE CtrlRoutine,
 IN LPTHREAD_START_ROUTINE PropRoutine,
 IN OUT PCONSOLE_INFO pConsoleInfo)</pre>
</blockquote>
<p>With some call to <strong>ntdll!CsrAllocateCaptureBuffer</strong>, <strong>ntdll!CsrCaptureMessageBuffer</strong> for desktop, title and curent dir memory allocation. And then <strong>ntdll!CsrClientCallServer</strong> with allocConsole request we will reach <strong>winsrv!SrvAllocConsole</strong> and then spawn a console. For testing we lunch a broken console and kill his process and his parent process, after that we do a &laquo;&nbsp;right clic + proprieties/default&nbsp;&raquo; on the broken console and then we have a <strong>winsrv!InternalCreateCallbackThread</strong> executed with free handle! (the killed parent process handle precisely)</p>
<p>Step 3, 4, 5, 6, 8 is quite easy. Step 7 (WIN+U emulation) too but <a href="http://msdn.microsoft.com/en-us/library/ms646299%28v=vs.85%29.aspx">SetKeyboardState</a> and <a href="http://msdn.microsoft.com/en-us/library/ms644944%28v=vs.85%29.aspx">PostMessage</a> doesn&#8217;t work, we have to use <a href="http://msdn.microsoft.com/en-us/library/ms646304%28v=vs.85%29.aspx">keybd_event</a> (depreciated) or <a href="http://msdn.microsoft.com/en-us/library/ms646310%28v=vs.85%29.aspx">SendInput</a> to invoke utilman.exe.</p>
<p>Therefore, with all this steps we are able to get CSRSS to call <a href="http://msdn.microsoft.com/en-us/library/ms682437%28v=vs.85%29.aspx">CreateRemoteThread</a> with a system process handle and a controlled start address. Now we need step one &laquo;&nbsp;Spray the shared WIN32K section of system process with USER object&nbsp;&raquo; and it&#8217;s done! For this we have to invoke ultiman (WIN+U) which spawn three new process :</p>
<blockquote><p>-&gt; ultiman.exe [NT AUTHORITY\SYSTEM]<br />
+-&gt; ultiman.exe /start [USER]<br />
+&#8211;&gt; narrator.exe /UM [USER]</p></blockquote>
<p>Then we create user object like <a href="http://msdn.microsoft.com/en-us/library/ms645505%28v=vs.85%29.aspx">MessageBox</a> with over long title (32Ko). But ultiman (system) doesn&#8217;t share the win32k section with other process at all times. After trying differents unsuccessful methods, I decided contact <a href="http://j00ru.vexillium.org">j00ru</a> who give me the solution. We can inject user object in ultiman (system) if another user (regardless of his privileges) is logged on the machine at the same time. At this moment, I haven&#8217;t found explanation of this behaviour. I think it&#8217;s something in relation with Desktop/Winstation/Session, if you have some idea tell me.</p>
<p><object width="640" height="390" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/Rup-dDW4PN4&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><embed width="640" height="390" type="application/x-shockwave-flash" src="http://www.youtube.com/v/Rup-dDW4PN4&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" allowFullScreen="true" allowScriptAccess="always" allowfullscreen="true" allowscriptaccess="always" /></object></p>
<p>Source of the poc :<br />
<a href="http://mysterie.fr/prog/blog/allocConsole/">http://mysterie.fr/prog/blog/allocConsole/</a></p>
<p>Thanks to j00ru for his help and all shared knowledge on his blog, hitb and so on!</p>
]]></content:encoded>
			<wfw:commentRss>http://mysterie.fr/blog/2011/07/31/cve-2011-1281/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Format string automatique</title>
		<link>http://mysterie.fr/blog/2010/07/12/auto-format/</link>
		<comments>http://mysterie.fr/blog/2010/07/12/auto-format/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 17:25:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://192.168.1.110/blog/?p=48</guid>
		<description><![CDATA[Cet été j&#8217;ai décidé d&#8217;apprendre le python, et pour que se soit fun je me suis mis en tête de faire un script qui automatise les format strings. En plus c&#8217;est la mode: http://esec.fr.sogeti.com/blog/index.php?2010/07/09/88-exploitation-de-format-string-avec-metasm http://sh4ka.fr/codes/fmt_string_builder.html ou pas: http://www.ouah.org/REMOTEFMT-HOWTO http://nibbles.tuxfamily.org/?p=887 http://www.redspin.com/blog/2009/11/25/automatic-format-string-exploitation/ Le script se décline en 3 fichiers: main.py warper.py (détecte ou se situe les arguments [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Cet été j&#8217;ai décidé d&#8217;apprendre le python, et pour que se soit fun je me suis mis en tête de faire un script qui automatise les format strings.</p>
<p>En plus c&#8217;est la mode:<br />
<a href="http://esec.fr.sogeti.com/blog/index.php?2010/07/09/88-exploitation-de-format-string-avec-metasm">http://esec.fr.sogeti.com/blog/index.php?2010/07/09/88-exploitation-de-format-string-avec-metasm</a><br />
<a href="http://sh4ka.fr/codes/fmt_string_builder.html">http://sh4ka.fr/codes/fmt_string_builder.html</a><br />
ou pas:<br />
<a href="http://www.ouah.org/REMOTEFMT-HOWTO">http://www.ouah.org/REMOTEFMT-HOWTO</a><br />
<a href="http://nibbles.tuxfamily.org/?p=887">http://nibbles.tuxfamily.org/?p=887</a><br />
<a href="http://www.redspin.com/blog/2009/11/25/automatic-format-string-exploitation/">http://www.redspin.com/blog/2009/11/25/automatic-format-string-exploitation/</a></p>
<p>Le script se décline <a href="http://mysterie.fr/prog/blog/autoFrmt/">en 3 fichiers</a>:<br />
<a href="http://mysterie.fr/prog/blog/autoFrmt/main.htm">main.py</a><br />
<a href="http://mysterie.fr/prog/blog/autoFrmt/warper.htm">warper.py</a> (détecte ou se situe les arguments faillibles du programme et où placer le payload)<br />
<a href="http://mysterie.fr/prog/blog/autoFrmt/frmtStr.htm">frmtStr.py</a> (exploite la format string)</p>
<p>La format string est exploitable dans la cas où:</p>
<ul>
<li>On est sur une archi x86 (32bit), sous linux</li>
<li>La pile est exécutable</li>
<li>Pas d&#8217;aslr (Quoi qu&#8217;avec un gros padding/nopsleed ca passe)</li>
<li>La section dynamic est +W</li>
<li>Le programme vulnérable n&#8217;est pas trop verbeux (ca peut fausser la détection)</li>
</ul>
<p>En bref sur un wargame c&#8217;est parfait (ca permet de gagner du temps), sur un programme réel ca l&#8217;est moins.</p>
<p>Je vous conseille de regarder la vidéo en fullscreen (pas super lisible).</p>
<p><object style="height: 390px; width: 640px;" width="100" height="100" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/InfAAmJqMFI?version=3" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><embed style="height: 390px; width: 640px;" width="100" height="100" type="application/x-shockwave-flash" src="http://www.youtube.com/v/InfAAmJqMFI?version=3" allowFullScreen="true" allowScriptAccess="always" allowfullscreen="true" allowscriptaccess="always" /></object></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mysterie.fr/blog/2010/07/12/auto-format/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Write Up – NDH 2010 – VM Windows</title>
		<link>http://mysterie.fr/blog/2010/06/24/write-up-%e2%80%93-ndh-2010-%e2%80%93-vm-windows/</link>
		<comments>http://mysterie.fr/blog/2010/06/24/write-up-%e2%80%93-ndh-2010-%e2%80%93-vm-windows/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:40:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Challenge]]></category>

		<guid isPermaLink="false">http://192.168.1.110/blog/?p=46</guid>
		<description><![CDATA[Pour les personnes n&#8217;ayant pas participé au capture the flag ou pour ceux qui n&#8217;ont pas exploité les services présent sur la machine Windows. Je mets à disposition les sources des épreuves que j&#8217;ai réalisé, et une solution pour chacunes d&#8217;elles. Premier point d&#8217;entrée, utilisateur toto mot de passe azerty. Deuxième point d&#8217;entrée, un remote [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Pour les personnes n&#8217;ayant pas  participé au capture the flag ou pour ceux qui n&#8217;ont pas exploité les  services présent sur la machine Windows. Je mets à disposition les  sources des épreuves que j&#8217;ai réalisé, et une solution pour chacunes  d&#8217;elles.</p>
<p>Premier point d&#8217;entrée, utilisateur toto mot de passe azerty.</p>
<p>Deuxième point d&#8217;entrée, un remote buffer overflow avec réécriture du SEH. Sauf que sur la VM le binaire était full <a href="http://msdn.microsoft.com/en-us/library/9a89h429%28VS.80%29.aspx">safeSEH</a>,  alors que je l&#8217;ai testé/exploité sur ma box, j&#8217;ai du merder à la  compilation bref désolé pour ceux qui ont passé du temps dessus.</p>
<p>Troisième point d&#8217;entrée, sur le bureau de chaque challenger se  trouvait un pdf. Le lecteur par défaut était adobe reader 8.0. Le pdf en  question était <a href="http://seclabs.org/origami/">crafté</a> de façon à exploiter la faille <a href="http://www.securityfocus.com/bid/34169">cve-2009-0927</a>.<br />
J&#8217;ai ensuite utilisé un <a href="http://www.shell-storm.org/shellcode/files/shellcode-162.php">shellcode windows trouvé sur le net</a> et retravaillé pour télécharger et exécuter un malware se trouvant à l&#8217;url http://192.168.3.200/tmp.exe<br />
Étant donné les quelques problèmes de mise en place du ctf, l&#8217;url n&#8217;as  pas été disponible tout de suite. Quatre équipes se sont infectées mais  il est possible que bien plus d&#8217;équipes aient ouvert le pdf.</p>
<p>Le shellcode modifié :<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/pdf/sc/">source ici</a></p>
<p>Le pseudo botnet :<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/pdf/malware/">source ici</a></p>
<p>Le botnet réécrit l&#8217;<a href="http://en.wikipedia.org/wiki/Portable_Executable#Import_Table">IAT</a> d&#8217;explorer.exe et de tous les processus lancés par explorer. Afin de se  cacher (hook de findFirstFile / findNextFile) et se connecte à irc.<br />
Malgré le fait que le pdf soit sur le bureau et que quatre équipes soit  infectées (dont l&#8217;équipe gagnante) personne n&#8217;a creusé, et personne n&#8217;a  rejoint irc pour essayer de prendre le contrôle du bot, donc j&#8217;ai fais  mumuse tout seul:<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/pdf/screen1.PNG">screen1</a><br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/pdf/screen2.PNG">screen2</a><br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/pdf/screen3.PNG">screen3</a></p>
<p>Viens ensuite quelques épreuves plus triviales comme un serveur java  qui sérialise l&#8217;objet qu&#8217;il reçoit. Cet objet lit un fichier contenant  de l&#8217;ascii art et renvoie son contenu sur le réseaux, le but étant de  modifier l&#8217;objet afin d&#8217;afficher un fichier contenant le hash de  l&#8217;utilisateur ascii sur chaque machine.<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/java/">source ici</a><br />
Il y avait aussi deux épreuves web mais je n&#8217;en suis pas l&#8217;auteur donc je n&#8217;en parlerai pas. <img src='http://mysterie.fr/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Et enfin un &laquo;&nbsp;<a href="http://en.wikipedia.org/wiki/Privilege_escalation">Local Privilege Escalation</a>&laquo;&nbsp;,  le binaire checksum.exe communique avec un driver. Il envoie le contenu  du fichier qu&#8217;on lui donne au driver, celui-ci fait un <a href="http://fr.wikipedia.org/wiki/Somme_de_contr%C3%B4le">checksum</a> des données et les renvoie au programme. La communication entre eux se fait par la méthode <a href="http://msdn.microsoft.com/en-us/library/ms809962.aspx#drvrreliab_topic3">METHOD_NEITHER</a>.<br />
Les challengers ont accès en lecture à checksum.sys. Il pourront  remarquer que le driver contient des failles dont un déréférencement de  pointeur (Adresse du buffer d&#8217;output non vérifié). Les symbols de  windows 2003 sp2 était disponible en ftp. Je ne mettrai pas à  disposition la source de checksum.exe car il est très crade:<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/checksum/">sources ici</a><br />
Une petite difficultée était présente, comme le font pas mal d&#8217;antivirus  le code ioctl de gestion du checksum était aléatoire. En analysant le  driver ou l&#8217;exécutable on retrouvais facilement le code. Le but était de  freiner les challengers en cas d&#8217;exploitation massive, mais personne  n&#8217;a exploité cette épreuve. <img src='http://mysterie.fr/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>That&#8217;s all folks !</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mysterie.fr/blog/2010/06/24/write-up-%e2%80%93-ndh-2010-%e2%80%93-vm-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Write Up – NDH 2010 – Crackme</title>
		<link>http://mysterie.fr/blog/2010/06/23/write-up-%e2%80%93-ndh-2010-%e2%80%93-crackme/</link>
		<comments>http://mysterie.fr/blog/2010/06/23/write-up-%e2%80%93-ndh-2010-%e2%80%93-crackme/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 16:40:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Challenge]]></category>

		<guid isPermaLink="false">http://192.168.1.110/blog/?p=44</guid>
		<description><![CDATA[Le 19 et 20 Juin a eu lieu la 8eme édition de la nuit du hack. Pour cette occasion j&#8217;ai réalisé différentes épreuves dont des crackmes accessibles aux personnes participant au challenge public (par le wifi) et aux participants du Capture the flag. Dans la section Crackme j&#8217;ai réalisé les niveaux 1, 3 et 4. [...]]]></description>
			<content:encoded><![CDATA[<p>Le 19 et 20 Juin a eu lieu la  8eme édition de la nuit du hack. Pour cette occasion j&#8217;ai réalisé  différentes épreuves dont des crackmes accessibles aux personnes  participant au challenge public (par le wifi) et aux participants du  Capture the flag.<br />
Dans la section Crackme j&#8217;ai réalisé les niveaux 1, 3 et 4.</p>
<p>Crackme Niveau 1:</p>
<p>Le crackme n&#8217;a aucun mécanisme d&#8217;anti-debug. Ce qui lui est donné en  entrée est comparé directement à une chaine en mémoire. Rien de bien  compliqué en soit:</p>
<blockquote>
<pre>GetWindowText(hEdit, text, 255);
theSecret[0]++;
theSecret[2]++;
theSecret[4]++;
if(strlen(text) &gt; 0 &amp;&amp; !strcmp(text, theSecret)) {
    ShowWindow(hVrai, SW_SHOW);

    strcpy(text, getMD5(text));
    SetWindowText(hMd5, text);
    ShowWindow(hMd5, SW_SHOW);
    ShowWindow(hFaux, SW_HIDE);
} else {
    ShowWindow(hVrai, SW_HIDE);
    ShowWindow(hMd5, SW_HIDE);
    ShowWindow(hFaux, SW_SHOW);
}
theSecret[0]--;
theSecret[2]--;
theSecret[4]--;
</pre>
</blockquote>
<p>La source du crackme:<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/cm1/">cm1/</a></p>
<p>Crackme Niveau 3:</p>
<p>Le mot de passe du programme n&#8217;est pas stocké dans sa mémoire ou dans  le fichier exécutable. Au chargement il crée 8 plages mémoires  contenant des op code de saut assembleur (5 octets). Chaque plage  contient 256 sauts, chaque saut équivaut à un caractère ascii. Dans chacune des plages un seul saut est valide et  pointe vers une routine de décryptage les autres sauts pointent  indirectement vers une routine qui affiche mot de passe faux.<br />
J&#8217;utilise aussi l&#8217;instruction rdtsc pour calculer le temps effectué  entre le première saut et le dernier afin de vérifier que le programme  s&#8217;exécute en moins d&#8217;une seconde sinon c&#8217;est que le programme est  débuggé et donc j&#8217;affiche mot de passe faux dans tous les cas.<br />
La source du crackme:<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/cm2/">cm2/</a></p>
<p>Crackme Niveau 4:</p>
<p>Ce niveau est destiné à des personnes ayant l&#8217;habitude de ce genre  d&#8217;épreuve la difficulté principale de ce challenge est donc de débugger  le programme (l&#8217;analyser). J&#8217;ai mi beaucoup de routine anti-débug. Tout  d&#8217;abord à l&#8217;entrée du programme j&#8217;ai incrusté des instructions  assembleur pour modifier la signature de l&#8217;exécutable (ces instructions  ne sont jamais exécutées) le but est de faire croire que l&#8217;exécutable  est packé c&#8217;est à dire qu&#8217;il est compressé par un autre logiciel.<br />
Ensuite j&#8217;appel une fonction spéciale un peu partout dans le code de mon programme. (junk code)</p>
<blockquote>
<pre>void brack() {
    __asm {
        _emit 0xEB;  // 0xEB01 = jmp short relatif saute au dessus
        _emit 0x01;  de l'octet 0x1D. Donc ne fait rien au final
        _emit 0x1D;  // 0x1D fait croire au debugger que l'instruction qui suit est SBB
    }
}
</pre>
</blockquote>
<p>Le programme crée ensuite un thread. La fonction du thread est la suivante:</p>
<blockquote>
<pre>while(1) {
    brack();
    Sleep(1000);
    __try {
        __asm {
            int 3;
        }
    }
    __except(eps = GetExceptionInformation(), EXCEPTION_EXECUTE_HANDLER) {
        brack();
        isDbg = false;
    }
    if(isDbg) {
        quit();
        break;
    }
    isDbg = true;
}
</pre>
</blockquote>
<p>Dans le cas où un débugger serait présent au démarrage du programme  ou s&#8217;il s&#8217;attache au programme durant son exécution, l&#8217;instruction int 3  (point d&#8217;arrêt) est exécutée le débugger la récupère. Le programme  détecte ainsi qu&#8217;un débugger est présent et le mot de passe n&#8217;est jamais  révélé.</p>
<p>La fonction IsDebuggerPresent est aussi appelée dans le programme.  Elle est appelée indirectement (récupération de l&#8217;adresse de la fonction  dynamique).</p>
<blockquote>
<pre>GetProcAddress(GetModuleHandle("Kernel32.dll"), "IsDebuggerPresent");
</pre>
</blockquote>
<p>Et enfin j&#8217;utilise l&#8217;instruction rdtsc dans le programme pour vérifier que le temps d&#8217;exécution de celui ci n&#8217;est pas trop long.</p>
<p>Si le challenger contourne toute ces protections alors le programme  alloue une plage mémoire, écrit à l&#8217;emplacement de cette plage des  octets spécifiques (fonction de déchiffrement encodé), puis la décode  avec un XOR. Lorsque l&#8217;utilisateur entre son mot de passe la fonction  déchiffrée effectue plusieurs opérations aritmétriques sur le mot de  passe:</p>
<ul>
<li>Longueur de la chaine</li>
<li>Est-ce que la deuxième lettre est égale à la 5eme</li>
<li>OU / ET logique, XOR etc&#8230;</li>
</ul>
<p>Par un calcul mathématique ou un peu de logique on retrouve assez  simplement le passe. Il n&#8217;y a aucune collision une seule solution est  valide.<br />
La source du crackme:<br />
<a href="http://mysterie.fr/prog/blog/ndh2k10/cm3/">cm3/</a></p>
<p>Au niveau des résultats sur 180 participants (public/ctf):</p>
<ul>
<li>Level1 10 validations</li>
<li>Level3 5  validations</li>
<li>Level4 3  validations</li>
</ul>
<p>Des solutions sont déjà disponibles sur le net:<br />
<a href="http://w4kfu.free.fr/blog/index.php?post/2010/06/20/Write-up-NDH-2010-crackme-lvl-1">http://w4kfu.free.fr/blog/index.php?post/2010/06/20/Write-up-NDH-2010-crackme-lvl-1</a><br />
<a href="http://w4kfu.free.fr/blog/index.php?post/2010/06/20/Write-up-NDH-2010-crackme-lvl-2">http://w4kfu.free.fr/blog/index.php?post/2010/06/20/Write-up-NDH-2010-crackme-lvl-2</a><br />
<a href="http://w4kfu.free.fr/blog/index.php?post/2010/06/20/Write-up-NDH-2010-crackme-lvl-3">http://w4kfu.free.fr/blog/index.php?post/2010/06/20/Write-up-NDH-2010-crackme-lvl-3</a></p>
<p>Et si vous êtes féru de crackme <a href="http://www.crackme.fr/">ce week end Eset NOD32 organise un challenge</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mysterie.fr/blog/2010/06/23/write-up-%e2%80%93-ndh-2010-%e2%80%93-crackme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Return Oriented Programming</title>
		<link>http://mysterie.fr/blog/2010/06/06/return-oriented-programming/</link>
		<comments>http://mysterie.fr/blog/2010/06/06/return-oriented-programming/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 16:58:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://192.168.1.110/blog/?p=42</guid>
		<description><![CDATA[Ce week-end se tenait à Maubeuge les rssil (Rencontres des Solutions de Sécurité et d&#8217;Informatique Libre). Je vous encourage à y aller l&#8217;an prochain. Il y avait une très bonne ambiance, des conf intéressantes et j&#8217;ai pu y rencontrer pas mal de monde. Je tiens à remercier tout particulièrement les organisateurs de l&#8217;évènement pour leur [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Ce week-end se tenait à Maubeuge les <a href="http://www.rssil.org/">rssil</a> (Rencontres des Solutions de Sécurité et d&#8217;Informatique Libre).<br />
Je vous encourage à y aller l&#8217;an prochain. Il y avait une très bonne  ambiance, des conf intéressantes et j&#8217;ai pu y rencontrer pas mal de  monde. Je tiens à remercier tout particulièrement les organisateurs de  l&#8217;évènement pour leur accueil et leur organisation.</p>
<p>Pour ceux qui veulent récupérer mes slides ou tout simplement ceux qui n&#8217;ont pas pu assister à la conférence:<br />
<a href="http://mysterie.fr/prog/blog/rop/rop.pdf">rop.pdf</a><br />
<a href="http://mysterie.fr/prog/blog/rop/rop.odp">rop.odp</a><br />
<a href="http://mysterie.fr/prog/blog/rop/rop.ppt">rop.ppt</a></p>
<p>Et pour ceux qui sont intéressés par le sujet je vous conseil aussi <a href="http://trailofbits.files.wordpress.com/2010/04/practical-rop.pdf">la lecture de ce papier</a> réalisé par Dino dai zovi il y a un mois.</p>
<p>Pour les autres conférences, les slides devraient être eux aussi en  ligne d&#8217;ici peu. Ainsi que les épreuves du challenge ethical hacking (en  tout cas les résolus).</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mysterie.fr/blog/2010/06/06/return-oriented-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

