{"id":2835,"date":"2015-03-01T18:32:33","date_gmt":"2015-03-01T17:32:33","guid":{"rendered":"https:\/\/www.customprotocol.com\/?post_type=it_programmation&amp;p=2835"},"modified":"2015-03-01T18:32:33","modified_gmt":"2015-03-01T17:32:33","slug":"le-code-source-du-kernel-exploit-psp-qwikrazor87-explique","status":"publish","type":"it_programmation","link":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/","title":{"rendered":"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9"},"content":{"rendered":"<p style=\"text-align: justify;\">Le d\u00e9veloppeur <em>Guidobot<\/em>, \u00e0 l'origine du <a title=\"TUTO&nbsp;-&nbsp;Installez et utilisez le 138Menu\" href=\"https:\/\/www.customprotocol.com\/underground\/tuto-installez-utilisez-138menu\/\" target=\"_blank\" rel=\"noopener noreferrer\"><em>138Menu<\/em><\/a> que vous utilisez peut-\u00eatre sur votre PS Vita, a post\u00e9 avant-hier sur les <a title=\"sceVideocodecStop() kxploit\" href=\"http:\/\/wololo.net\/talk\/viewtopic.php?f=54&amp;t=41879\" target=\"_blank\" rel=\"noopener noreferrer\">forums de <em>Wololo<\/em><\/a> une explication relativement d\u00e9taill\u00e9e \u00e0 propos du dernier <strong>exploit kernel PSP<\/strong> d\u00e9couvert par <em>Qwikrazor87<\/em> sur les PS Vita en <em>firmware <\/em>3.36 dont <a title=\"Qwikrazor87 publie le code source de son kernel exploit pour firmware 3.36\" href=\"https:\/\/www.customprotocol.com\/programmation\/qwikrazor87-publie-le-code-source-de-son-kernel-exploit-pour-firmware-3-36\/\" target=\"_blank\" rel=\"noopener noreferrer\">le code source a \u00e9t\u00e9 r\u00e9v\u00e9l\u00e9<\/a> il y a 2 jours par l'auteur lui-m\u00eame. Une petite traduction fran\u00e7aise s'impose...<\/p>\n<figure id=\"attachment_2837\" aria-describedby=\"caption-attachment-2837\" style=\"width: 550px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2837\" src=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-1024x576.png\" alt=\"Suivez le Guidobot&#8239;!\" width=\"550\" height=\"309\" srcset=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-1024x576.png 1024w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-300x169.png 300w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-768x432.png 768w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-370x208.png 370w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-270x152.png 270w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-570x321.png 570w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-740x416.png 740w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot.png 1280w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot-300x169@2x.png 600w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><figcaption id=\"caption-attachment-2837\" class=\"wp-caption-text\">Suivez le Guidobot&#8239;!<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Vous vous souvenez peut-\u00eatre que nous \u00e9voquions une situation de comp\u00e9tition (ou <em>race condition<\/em>), cela semble \u00eatre confirm\u00e9. Tout d'abord, sachez qu'une situation de comp\u00e9tition est une sorte de faille pr\u00e9sente dans un syst\u00e8me qui ne se manifeste que lorsque plusieurs \"\u00e9v\u00e9nements\" caus\u00e9s par des acteurs (dont au moins un a la capacit\u00e9 de modifier l'\u00e9tat de la ressource impliqu\u00e9e) interviennent dans un ordre inattendu. Dans les codes multi-t\u00e2ches (<em>multithread<\/em>), cela peut \u00eatre assez commun si le verrouillage ad\u00e9quat de chaque ressource partag\u00e9e n'est pas fait correctement par les t\u00e2ches (<em>threads<\/em>).<\/p>\n<p style=\"text-align: justify;\">Dans un tel cas, la fonction exploit\u00e9e v\u00e9rifie que les param\u00e8tres sont valides avant de continuer, mais avant d'utiliser ces valeurs, un autre <em>thread<\/em> \"malveillant\" peut venir modifier le contenu de certains param\u00e8tres avec le fameux contenu exploit\u00e9.<\/p>\n<figure id=\"attachment_2839\" aria-describedby=\"caption-attachment-2839\" style=\"width: 547px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/explications-situation-competition-thread-malveillant.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2839 size-full\" src=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/explications-situation-competition-thread-malveillant.png\" alt=\"Explications en images\" width=\"547\" height=\"177\" srcset=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/explications-situation-competition-thread-malveillant.png 547w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/explications-situation-competition-thread-malveillant-300x97.png 300w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/explications-situation-competition-thread-malveillant-370x120.png 370w, https:\/\/www.customprotocol.com\/medias\/2015\/03\/explications-situation-competition-thread-malveillant-270x87.png 270w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><\/a><figcaption id=\"caption-attachment-2839\" class=\"wp-caption-text\">Explications en images<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Ici, la fonction donnant l'acc\u00e8s au noyau (<em>kernel<\/em>) s'appelle <strong>sceMeVideo_driver_4D78330C <\/strong>(\u00e0 comprendre comme \u00e9tant le \"do_some_stuff(data)\" sur l'illustration ci-dessus), et la fonction avec la situation de comp\u00e9tition est le fameux <strong>scevideoCodecStop<\/strong> (le \"myfonction\" sur l'illustration). Vous avez une id\u00e9e g\u00e9n\u00e9rale du fonctionnement de ce <strong>kernel exploit<\/strong>, si vous souhaitez conna\u00eetre tout sur tout, nous vous invitons \u00e0 voir les explications du code source plus bas.&#8239;;)<\/p>\n<pre class=\"lang:default decode:true \">\/\/sceVideocodecStop kxploit reverse by GUIDOBOT\n\n\/\/u sont inconnus, p sont les pointeurs et v les valeurs\ntypedef struct s_data\n{\n\tunsigned u0;\t\/\/0\n\tunsigned u4;\t\/\/1\n\tunsigned u8;\t\/\/2\n\tunsigned p12; \t\/\/3\n\tunsigned p16; \t\/\/4\n\tunsigned u20; \t\/\/5\n\tunsigned u24; \t\/\/6\n\tunsigned u28; \t\/\/7\n\tunsigned u32;\t\/\/8\n\tunsigned u36;\t\/\/9\n\tunsigned u40;\t\/\/10\n\tunsigned p44;\t\/\/11, *\n\tunsigned p48;\t\/\/12\n\tunsigned u52;\t\/\/13\n\tunsigned p56;\t\/\/14\n\tunsigned v60;\t\/\/15\n} t_data;\n\nint sceVideocodecStop(t_data * data, int flag)\n{\n\t\/\/on veut que cela retourne 0, on lui assigne donc les bonnes valeurs\n\tint check&nbsp;=&nbsp;sub_00000C38(data); \n\t\n\tif(!check)\n\t{\n\t\t\/\/les deux lignes ci-dessous se chargent d'\u00e9crire certaines donn\u00e9es depuis la structure vers la m\u00e9moire,  mais on ne s'en soucie pas\n\t\tsub_00000D2C(data, flag);\n\t\tsub_00000B8C(data, flag);\n\t\t\n\t\t\/\/c'est cet endroit qui nous int\u00e9resse, les valeurs de la structure doivent normalement d\u00e9j\u00e0 \u00eatre \u00e9chang\u00e9es pour que tout fonctionne\n\t\tint val&nbsp;=&nbsp;sceMeVideo_driver_4D78330C(flag, data);\n\t\t\n\t\t\/\/etc.\n\t\t\/\/..\n\t};\n\n\t\/\/etc.\n\t\/\/..\n};\n\n\/\/filtres des adresses du kernel\nint sub_00000C38(const t_data * data, int flag)\n{\n\t\/\/ce morceau de code va simplement v\u00e9rifier certaines donn\u00e9es, \u00e0 savoir les valeurs&nbsp;: data-&gt;p12, data-&gt;p16, data-&gt;p44 et data-&gt;p56\n\n\tif((0x80000000 &amp; ((data&nbsp;+&nbsp;96) | data) &gt;= 0) &amp;&amp; (0x80000000 &amp; data-&gt;p12 &gt;= 0))\n\t{\n\t\tint size&nbsp;=&nbsp;256;\n\t\t\n\t\tif(flag == 0)\n\t\t\tsize&nbsp;=&nbsp;40;\n\t\telse if(flag &gt;= 3)\n\t\t\treturn 0x806201FE;\n\n\t\tif(0x80000000 &amp; ((data-&gt;p16&nbsp;+&nbsp;size) | data-&gt;p16) &gt;= 0)\n\t\t{\t\t\n\t\t\tif(flag)\n\t\t\t\treturn 0; \/\/malheureusement, on ne l'obtient pas ici, mais continuez de lire\n\n\t\t\tif(0x80000000 &amp; ((((data-&gt;p44&nbsp;+&nbsp;(data-&gt;v60 * 44))) | data-&gt;p44) | (data-&gt;v60 * 44)) &gt;= 0)\n\t\t\t{\t\t\n\t\t\t\tif(0x80000000 &amp; ((data-&gt;p48&nbsp;+&nbsp;100) | data-&gt;p48) &gt;= 0)\n\t\t\t\t{\n\t\t\t\t\tif(0x80000000 &amp; (((data-&gt;p56&nbsp;+&nbsp;data-&gt;v60 * 328) | data-&gt;p56) | (data-&gt;v60 * 328)) &gt;= 0)\n\t\t\t\t\t\treturn 0; \/\/youpi\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\n\t\/\/on ne veut pas arriver ici\n\treturn 0x80000023;\n};\n\nint sceMeWrapper_driver_4D78330C(int flag, t_data * data)\n{\n\tif(data-&gt;v0 &gt; 0x05100601) \/\/ il est n\u00e9cessaire de faire ce data-&gt;v0&nbsp;=&nbsp;0x05100601 pour s'amuser\n\t\treturn -2;\n\t\t\n\tdata-&gt;v8&nbsp;=&nbsp;0;\n\tif(flag == 0)\n\t{\n\t\tif(data-&gt;v60 - 1 &gt;= 4)\n\t\t\treturn -1;\n\t\t\n\t\t\/\/Si data-&gt;v60 est \u00e9gal \u00e0 1 alors le compteur sera \u00e0 0\n\t\tint count&nbsp;=&nbsp;data-&gt;v60 - 1;\n\n\t\tif(data-&gt;p56)\n\t\t{\n\t\t\t\/\/c'est affreux ici, mieux vaut voir du c\u00f4t\u00e9 de la condition \"else\" (d'ailleurs, ou pourrait aussi faire un kernel exploit ici)\n\t\t\tvoid * address&nbsp;=&nbsp;count * 44&nbsp;+&nbsp;data-&gt;p44;\n\t\t\tunsigned value&nbsp;=&nbsp;count * 328&nbsp;+&nbsp;data-&gt;p56;\n\t\t\t\n\t\t\tfor(int i&nbsp;=&nbsp;count; i &gt; 0; i--)\n\t\t\t{\n\t\t\t\t*(address&nbsp;+&nbsp;36)&nbsp;=&nbsp;value;\n\t\t\t\t*(address&nbsp;+&nbsp;40)&nbsp;=&nbsp;value&nbsp;+&nbsp;164;\n\t\t\t\t\n\t\t\t\tvalue -= 328;\n\t\t\t\taddress -= 44;\n\t\t\t};\n\t\t}\n\t\telse \/\/cela signifie que si data-&gt;p56 est nul\n\t\t{\n\t\t\t\/\/si le compteur est \u00e0 0 alors l'adresse sera data-&gt;p44\n\t\t\tvoid * address&nbsp;=&nbsp;count * 44&nbsp;+&nbsp;data-&gt;p44;\n\t\t\t\n\t\t\tfor(int i&nbsp;=&nbsp;count; i &gt; 0; i--)\n\t\t\t{\n\t\t\t\t*(address&nbsp;+&nbsp;36)&nbsp;=&nbsp;0; \n\t\t\t\t*(address&nbsp;+&nbsp;40)&nbsp;=&nbsp;0; \n\t\t\t\taddress -= 44;\n\t\t\t};\n\t\t\t\n\t\t\t\/\/nous avons saut\u00e9 2 instructions ici, ce afin de ne pas \"casser\" le code et d'assigner 0 au compteur\n\t\t\t\/\/le pointillage data-&gt;p44 \u00e0 (ADDRESS - 36) va nous permettre de sauter ADDRESS et (ADDRESS&nbsp;+&nbsp;4)\n\t\t};\n\t\t\n\t\tint result2&nbsp;=&nbsp;sceMeWrapper_driver_635397BB(3, data-&gt;p12, data-&gt;p16, data-&gt;p44);\n\t\t\n\t\tif(result2 &gt;= 0)\n\t\t\treturn 0;\n\t\t\t\n\t\treturn sub_00001194(data, result2);\n\t}\n\telse if(flag&#8239;!= 1)\n\t\treturn -1;\n\n\tint result&nbsp;=&nbsp;sceMeWrapper_driver_635397BB(33, data-&gt;v12);\n\t\n\tif(result)\n\t\treturn sub_000011C4(data, result);\n\t\n\treturn 0;\n};<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guidobot et Wololo nous expliquent le code source du kernel exploit pour l'\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur les PS Vita en firmware 3.36. Attachez vos ceintures&#8239;!<\/p>\n","protected":false},"author":481,"featured_media":2837,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","format":"standard","meta":{"footnotes":""},"categories":[4,586,29,454,30],"tags":[],"programmation-categorie":[620,621],"class_list":["post-2835","it_programmation","type-it_programmation","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-news-programmation","category-news-underground","category-programmation","category-underground","programmation_categorie-code-source","programmation_categorie-explications"],"yoast_head":"\n<title>Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9 - Custom Protocol<\/title>\n<meta name=\"description\" content=\"Guidobot et Wololo nous expliquent le code source du kernel exploit pour l&#039;\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur le 3.36. Attachez vos ceintures !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9 - Custom Protocol\" \/>\n<meta property=\"og:description\" content=\"Guidobot et Wololo nous expliquent le code source du kernel exploit pour l&#039;\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur le 3.36. Attachez vos ceintures !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/\" \/>\n<meta property=\"og:site_name\" content=\"Custom Protocol\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimation du temps de lecture\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/\",\"url\":\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/\",\"name\":\"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9 - Custom Protocol\",\"isPartOf\":{\"@id\":\"https:\/\/www.customprotocol.com\/#website\"},\"datePublished\":\"2015-03-01T17:32:33+00:00\",\"dateModified\":\"2015-03-01T17:32:33+00:00\",\"description\":\"Guidobot et Wololo nous expliquent le code source du kernel exploit pour l'\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur le 3.36. Attachez vos ceintures !\",\"breadcrumb\":{\"@id\":\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.customprotocol.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmation\",\"item\":\"https:\/\/www.customprotocol.com\/programmation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.customprotocol.com\/#website\",\"url\":\"https:\/\/www.customprotocol.com\/\",\"name\":\"Custom Protocol\",\"description\":\"Site d&#039;hack-tualit\u00e9 et de tutoriels sur la customisation de consoles et appareils (homebrews, plugins, \u00e9mulation...)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.customprotocol.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-CA\"}]}<\/script>\n","yoast_head_json":{"title":"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9 - Custom Protocol","description":"Guidobot et Wololo nous expliquent le code source du kernel exploit pour l'\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur le 3.36. Attachez vos ceintures !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/","og_locale":"fr_CA","og_type":"article","og_title":"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9 - Custom Protocol","og_description":"Guidobot et Wololo nous expliquent le code source du kernel exploit pour l'\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur le 3.36. Attachez vos ceintures !","og_url":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/","og_site_name":"Custom Protocol","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.customprotocol.com\/medias\/2015\/03\/PSP-emulator-kernel-exploit-souce-code-qwikrazor87-illustration-explications-Guidobot.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimation du temps de lecture":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/","url":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/","name":"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9 - Custom Protocol","isPartOf":{"@id":"https:\/\/www.customprotocol.com\/#website"},"datePublished":"2015-03-01T17:32:33+00:00","dateModified":"2015-03-01T17:32:33+00:00","description":"Guidobot et Wololo nous expliquent le code source du kernel exploit pour l'\u00e9mulateur PSP d\u00e9couvert par Qwikrazor87 sur le 3.36. Attachez vos ceintures !","breadcrumb":{"@id":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.customprotocol.com\/programmation\/le-code-source-du-kernel-exploit-psp-qwikrazor87-explique\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.customprotocol.com\/"},{"@type":"ListItem","position":2,"name":"Programmation","item":"https:\/\/www.customprotocol.com\/programmation\/"},{"@type":"ListItem","position":3,"name":"Le code source du kernel exploit PSP de Qwikrazor87 expliqu\u00e9"}]},{"@type":"WebSite","@id":"https:\/\/www.customprotocol.com\/#website","url":"https:\/\/www.customprotocol.com\/","name":"Custom Protocol","description":"Site d&#039;hack-tualit\u00e9 et de tutoriels sur la customisation de consoles et appareils (homebrews, plugins, \u00e9mulation...)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.customprotocol.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-CA"}]}},"_links":{"self":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation\/2835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation"}],"about":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/types\/it_programmation"}],"author":[{"embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/users\/481"}],"replies":[{"embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/comments?post=2835"}],"version-history":[{"count":0,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation\/2835\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/media\/2837"}],"wp:attachment":[{"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/media?parent=2835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/categories?post=2835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/tags?post=2835"},{"taxonomy":"programmation_categorie","embeddable":true,"href":"https:\/\/www.customprotocol.com\/api\/wp\/v2\/programmation-categorie?post=2835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}