{"id":2482,"date":"2014-04-01T15:36:10","date_gmt":"2014-04-01T18:36:10","guid":{"rendered":"http:\/\/blog.dialhost.com.br\/?p=2482"},"modified":"2014-04-01T15:36:10","modified_gmt":"2014-04-01T18:36:10","slug":"engenharia-reversa-codigos-criptograf","status":"publish","type":"post","link":"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/","title":{"rendered":"Engenharia Reversa e c\u00f3digos criptografados"},"content":{"rendered":"<figure id=\"attachment_2584\" aria-describedby=\"caption-attachment-2584\" style=\"width: 700px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-2584\" alt=\"Engenharia Reversa\" src=\"http:\/\/blog.dialhost.com.br\/wp-content\/uploads\/2014\/04\/engenharia-reversa.jpg\" width=\"700\" height=\"230\" \/><figcaption id=\"caption-attachment-2584\" class=\"wp-caption-text\">Imagem Ilustrativa &#8211; Engenharia Reversa<\/figcaption><\/figure>\n<div id=\"toc_container\" class=\"have_bullets\"><p class=\"toc_title\">T&oacute;picos<\/p><ul class=\"toc_list\"><li><a href=\"#introducao\">Introdu\u00e7\u00e3o<\/a><\/li><li><a href=\"#limitacoes-de-software\">Limita\u00e7\u00f5es de software<\/a><\/li><li><a href=\"#tecnicas-de-engenharia-reversa\">T\u00e9cnicas de engenharia reversa<\/a><\/li><li><a href=\"#exemplo\">Exemplo<\/a><\/li><li><a href=\"#conclusao\">Conclus\u00e3o<\/a><\/li><\/ul><\/div>\n<h2><span id=\"introducao\">Introdu\u00e7\u00e3o<\/span><\/h2>\n<p>Softwares capazes de criptografar a escrita de c\u00f3digos fonte em diversas linguagens est\u00e3o espalhados pela rede. Geralmente pagos, tais programas s\u00e3o capazes de fornecer ao usu\u00e1rio certa confiabilidade de que seu c\u00f3digo n\u00e3o ser\u00e1 modificado por terceiros e a vantagem do encapsulamento de toda a l\u00f3gica de programa\u00e7\u00e3o envolvida na cria\u00e7\u00e3o do programa em quest\u00e3o. Voc\u00ea vai encontrar muitos destes c\u00f3digos principalmente em produtos vendidos com uma licen\u00e7a, onde mesmo portando todos os arquivos necess\u00e1rios para o funcionamento, estes s\u00e3o ileg\u00edveis para o usu\u00e1rio. Podemos citar alguns exemplos utilizados na linguagem PHP como <a title=\"PHP Encoder, protection, installer and performance tools from ionCube\" href=\"http:\/\/www.ioncube.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">ionCube<\/a>, <a title=\"Encode PHP - Obfuscate your Application to Protect your code, php encryption, php protection\" href=\"http:\/\/www.zend.com\/en\/products\/guard\/\" target=\"_blank\" rel=\"noopener noreferrer\">ZendGuard<\/a>, <a title=\"PHP Encoder, PHP Compiler. The $99 full bytecode encoder including PHP script protection\" href=\"http:\/\/www.phpshield.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">phpSHIELD<\/a> e <a title=\"PHP Encoder, protect PHP scripts with SourceGuardian and bytecode\" href=\"http:\/\/www.sourceguardian.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">sourceguardian<\/a>.<\/p>\n<h2><span id=\"limitacoes-de-software\">Limita\u00e7\u00f5es de software<\/span><\/h2>\n<p>Infelizmente, alguns destes produtos possuem pouca ou nenhuma documenta\u00e7\u00e3o (n\u00e3o sei se \u00e9 porque os autores os consideram autoexplicativos ou tem pregui\u00e7a mesmo) tornando dolorosa a integra\u00e7\u00e3o no seu ambiente de desenvolvimento. Caso a empresa fornecedora ainda disponibilize uma API, a situa\u00e7\u00e3o complica ainda mais \u00a0pois a poss\u00edvel integra\u00e7\u00e3o com outros programas faz com que o detalhamento de uma documenta\u00e7\u00e3o forte (tipos dos par\u00e2metros, modelo de resposta de sucesso\/erro, tratamentos, etc) e concisa seja mais necess\u00e1ria ainda.<\/p>\n<p>Caindo nesta situa\u00e7\u00e3o ou n\u00e3o, c\u00f3digos compilados sempre s\u00e3o uma dor de cabe\u00e7a para quem precisa conhecer mais detalhes de implementa\u00e7\u00e3o. &#8220;Ah mas se algu\u00e9m fez isso, a inten\u00e7\u00e3o \u00e9 que essa pessoa n\u00e3o quer a edi\u00e7\u00e3o do c\u00f3digo e sim que ele seja simplesmente usado, sem altera\u00e7\u00f5es.\u00a0 Al\u00e9m disso, por causa de licen\u00e7as, \u00e9 at\u00e9 ilegal tentar reverter ou obter detalhes espec\u00edficos da implementa\u00e7\u00e3o do autor&#8221;. Certo, n\u00e3o vou entrar em detalhes do que se pode\/deve fazer com c\u00f3digos criptografados, inclusive muitos deles v\u00eam com uma mensagem de alerta j\u00e1 sobre este tipo de pr\u00e1tica e.g &#8220;You may not reverse engineer, decompile, defeat license encryption mechanisms, or disassemble this software product or software product license&#8221;. O caso aqui \u00e9 apenas informativo, estamos aplicando conhecimento, n\u00e3o incentivando a pr\u00e1tica de sabotagem e viola\u00e7\u00e3o de direitos e pol\u00edticas de uso.<\/p>\n<h2><span id=\"tecnicas-de-engenharia-reversa\">T\u00e9cnicas de engenharia reversa<\/span><\/h2>\n<p>Estamos trabalhando com a linguagem PHP neste artigo, portanto iremos usar as ferramentas disponibilizadas nativamente pela linguagem para tentar descobrir detalhes de implementa\u00e7\u00e3o de arquivos os quais n\u00e3o conseguimos acesso ao fonte original. N\u00e3o mencionarei aqui o uso de debuggers como Xdebug (que pode ser uma boa op\u00e7\u00e3o) pois gostaria de dar foco diretamente a classes e fun\u00e7\u00f5es da linguagem para que voc\u00eas possam dar uma olhada em um n\u00edvel um pouco mais baixo, assim ver\u00e3o a variedade de t\u00e9cnicas que podemos usar para obter detalhes de uma &#8220;caixa preta&#8221;.<\/p>\n<p>Est\u00e3o listadas aqui as principais fun\u00e7\u00f5es\/classes do PHP que nos ser\u00e3o \u00fateis para dar um debug em determinadas funcionalidades:<\/p>\n<p><a title=\"Retorna um array de todas as fun\u00e7\u00f5es definidas\" href=\"http:\/\/php.net\/get_defined_functions\" target=\"_blank\" rel=\"noopener noreferrer\">get_declared_functions()<\/a> &#8211; Retorna um array com todas as fun\u00e7\u00f5es definidas em tempo de execu\u00e7\u00e3o;<br \/>\n<a title=\"Retorna um array com todas as vari\u00e1veis declaradas\" href=\"http:\/\/php.net\/get_defined_vars\" target=\"_blank\" rel=\"noopener noreferrer\">get_defined_vars()<\/a> &#8211; Retorna um array com todas as vari\u00e1veis declaradas em tempo de execu\u00e7\u00e3o;<br \/>\n<a title=\"Retorna um array com todas as classes declaradas\" href=\"http:\/\/php.net\/get_declared_classes\" target=\"_blank\" rel=\"noopener noreferrer\">get_declared_classes()<\/a> &#8211; Retorna um array com o nome das classes definidas em tempo de execu\u00e7\u00e3o;<br \/>\n<a title=\"Reporta informa\u00e7\u00f5es sobre uma fun\u00e7\u00e3o\" href=\"http:\/\/php.net\/reflectionfunction\" target=\"_blank\" rel=\"noopener noreferrer\">ReflectionFunction<\/a> &#8211; Reporta informa\u00e7\u00f5es sobre uma fun\u00e7\u00e3o (a API inteira do Reflection por si j\u00e1 desempenha o papel na engenharia reversa) ;<br \/>\n<a title=\"Informa detalhes sobre a classe\" href=\"http:\/\/php.net\/ReflectionClass\" target=\"_blank\" rel=\"noopener noreferrer\">ReflectionClass<\/a> &#8211; Reporta informa\u00e7\u00f5es sobre uma classe (a API inteira do Reflection por si j\u00e1 desempenha o papel na engenharia reversa) ;<br \/>\n<a title=\"Gera um backtrace a partir do ponto que foi chamado\" href=\"http:\/\/php.net\/debug_backtrace\" target=\"_blank\" rel=\"noopener noreferrer\">debug_backtrace()<\/a> &#8211;\u00a0Gera um backtrace a partir do ponto que foi chamado<br \/>\n<a title=\"Lista o backtrace de chamadas de fun\u00e7\u00f5es\" href=\"http:\/\/php.net\/debug_print_backtrace\" target=\"_blank\" rel=\"noopener noreferrer\">debug_print_backtrace()<\/a> &#8211;\u00a0Lista o backtrace de chamadas de fun\u00e7\u00f5es no php (mais simples que o debug_backtrace)<\/p>\n<p>Utilizar estas ferramentas pode ou n\u00e3o ser uma tarefa f\u00e1cil. Se o autor comentou corretamente o cabe\u00e7alho das fun\u00e7\u00f5es com o tipo dos par\u00e2metros, o retorno, alguma explica\u00e7\u00e3o e outros detalhes, h\u00e1 uma chance maior de conhecermos a l\u00f3gica da programa\u00e7\u00e3o da classe ou fun\u00e7\u00e3o. Percebam que este \u00e9 um trabalho <strong>investigativo<\/strong> e por vezes <strong>cansativo<\/strong> e <strong>frustrante<\/strong>. Por\u00e9m, \u00e9 deste jeito que a engenharia reversa funciona. Nada \u00e9 t\u00e3o simples e a cada passo que dermos, dependendo da complexidade do que investigamos, novos horizontes ser\u00e3o postos em jogo para que possamos inspecion\u00e1-los.<\/p>\n<h2><span id=\"exemplo\">Exemplo<\/span><\/h2>\n<p>Usarei aqui um exemplo de um arquivo criptografado pelo ionCube. Observe o conte\u00fado:<\/p>\n<pre class=\"brush: php; gutter: true\">&lt;?php \n\/\/  foo.class.php\n\/\/  Geralmente aqui se encontra algum coment\u00e1rio onde te desencoraja a usar engenharia reversa, decriptografa\u00e7\u00e3o e outros meios capazes de desencapsular\/modificar o conte\u00fado abaixo.\nif(!extension_loaded(&#039;ionCube Loader&#039;)){$__oc=strtolower(substr(php_uname(),0,3));$__ln=&#039;ioncube_loader_&#039;.$__oc.&#039;_&#039;.substr(phpversion(),0,3).(($__oc==&#039;win&#039;)?&#039;.dll&#039;:&#039;.so&#039;);if(function_exists(&#039;dl&#039;)){@dl($__ln);}if(function_exists(&#039;_il_exec&#039;)){return _il_exec();}$__ln=&#039;\/ioncube\/&#039;.$__ln;$__oid=$__id=realpath(ini_get(&#039;extension_dir&#039;));$__here=dirname(__FILE__);if(strlen($__id)&gt;1&amp;&amp;$__id[1]==&#039;:&#039;){$__id=str_replace(&#039;\\\\&#039;,&#039;\/&#039;,substr($__id,2));$__here=str_replace(&#039;\\\\&#039;,&#039;\/&#039;,substr($__here,2));}$__rd=str_repeat(&#039;\/..&#039;,substr_count($__id,&#039;\/&#039;)).$__here.&#039;\/&#039;;$__i=strlen($__rd);while($__i--){if($__rd[$__i]==&#039;\/&#039;){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists(&#039;dl&#039;)){@dl($__ln);}}else{die(&#039;The file &#039;.__FILE__.&quot; is corrupted.\\n&quot;);}if(function_exists(&#039;_il_exec&#039;)){return _il_exec();}echo(&#039;Site error: the file &lt;b&gt;&#039;.__FILE__.&#039;&lt;\/b&gt; requires the ionCube PHP Loader &#039;.basename($__ln).&#039; to be installed by the website operator. If you are the website operator please use the &lt;a href=&quot;http:\/\/www.ioncube.com\/lw\/&quot;&gt;ionCube Loader Wizard&lt;\/a&gt; to assist with installation.&#039;);exit(199);\n?&gt;\nHR+cPwXaWbBeoNPbuTKNSVpZqpN+oAtPNtNjlfYiPCc2mlwAqsXxDbZcfl2K6WO0CHKddChRMfI\/\nIVNJ83hk6hyzoI47wqPFfbHRgOjZWb1GPYoH173wv83BSp6GlKFvSFTqsomiTXdoA2HhAT9ebTOR\n10oyg\/f2\/IfCZ6IxmOVboj+DrpT4bc47lwUfZejB\/\/SLL02UsJ2Bj4rkkmeAKFNccgQP+\/yUmWaZ\n\/Sk7AqsrFLdhPR3hmn8LsW0MgIqXvg38aL5RRo+CKITc2GjAiKWtDTfstxHvjHzm3QzAohn6E1Vr\npVH9zTUG9eGcUYPhh\/8iIRnkwFdbuvtyVL3oWvfgUc+UkxMoiAlKPVld2+3QupSMAfefCJW19oH0\n3ObqC3tGraI0zkA+LNnAq6ngbh+GjPlPANSYAf5B4BMj1XCsI2z58EpDilAC+KjvDEiUpf40I8ES\n7mVfwLAtQGqTWcDQccA7Q9i2UHzI770hIa2Z3OLOu+Lan8AgKOTOwvkg0gzGj7oJv9VxgglQZBXi\nD65kK+jOLiF+uzggyp5GU8XOt553qNc\/kxDwda356DIJSVvKbubsy8dm4H4iqMjM61T1ntWSb7HI\n\/F6eW8A4d\/9mSM5NTlD2T8Xa8WoyHv42Ucne73gAy9KG\/p5W8dVoT2885eTKLQMHmv1LgcWEr6op\nyOh4Qlk8bLV5Y4xVOMx+VPv3kyOJh9v7p2FYxg\/mmLgwuW9ec168w5954yee2wVcUwmn+dctdrmH\nqwTAvnyeyrMHGti4+RaxA83N4U1Kv5VaeCHHdcgxu5BNo3urgUwexfmW1qD\/5PlV3nfX0UiEt819\nHR9MX1+VTj9q54jl772sclpA8VBrf+9uIq8kQdT4L4pdPMLbKg0h3+bHohMtp+qF7ANjZFhibySE\nkxapXBcpLEI5IDR\/6f2v97jWMM\/NdOJ2eF9CmBqrDc8xlKyoYX3sqiwe9djDhjZV\/9nNjzcp3aTN\ny\/I3sLfAgRapC0Kx5nrfD2gx0ByBbWNxdXOh2zixCTVH0VxZTNIea9m98fcZdqrq+gf2HJ00KThu\ng+Rc84X+Q9qTNy9ZL7KvSXbE6wOX0mYQ6sumw7FctbSa94f+4d9pkQtdrc8klaxWfMwOumkX66cA\n7zS2OFWjIL2r7naC9U3vWGDmZkbE0mpr4Ox2Hd\/SJKlC2kD524Y+hy9fB1+5DNRQtuh61lEN1pdS\nSkomStrIv\/5Wo53bOVoyv\/h9L+lhofln95Cq9SdnT4KNhuLaBiG4+B1FnzTvAXYnGkgJGaRFRYGZ\nwtfdkoJdblh06hyV06Fo5UahTpiPgfmv8sx6N10W4V+QTWJeeD1mLmJY9rGiGSBNV52\/WNWHwwxX\nDprWWWXy8VS85e\/wBJD9RD0F1lr8m8iUMHvCnHQUSBLG3WjrznmtDkeRgmccbOpG40PjMvcLxOxz\n5NNoDdORj6122Ki5yrc7yLAgXsOZDYQ+flbExF\/2fu23\/J1VNGklLB9ot34xW8n+mL6rZDYU9ad0\nIxNwkx668\/i4WcyHcAk0wOYYwjtfHTJ7QoB3miWgWphCWmspsELboaLzgIno1tF7cBqtPpaG21+T\nt5OaIXPoz6TcKOeWEK7vHMQKJi5Y\/PIT8sVlHfr7XB5taarmolHahJQQMlMZAJ3KpX1Wr7LDDZHs\n8YJIjsAFcL+5ViIpyzYMiV1p4OCIHunKiGUPvyvuZy6Ply4NenyIPdm=<\/pre>\n<p>Dada a situa\u00e7\u00e3o de um c\u00f3digo ileg\u00edvel, vamos aplicar, sequencialmente, algumas das t\u00e9cnicas mostradas acima. No caso,<\/p>\n<pre>get_declared_classes()\nReflectionClass()<\/pre>\n<p>pois, por inspe\u00e7\u00e3o (diret\u00f3rio do arquivo, nome do arquivo, sequenciamento da l\u00f3gica executada at\u00e9 o ponto, etc) sei que se trata de uma classe e que esta, possivelmente n\u00e3o trabalha sozinha, ou seja, precisa da integra\u00e7\u00e3o com outras classes nas formas de agrega\u00e7\u00e3o ou composi\u00e7\u00e3o.<\/p>\n<pre class=\"brush: actionscript3; gutter: true\">&lt;?php\n\tinclude &#039;foo.class.php&#039;;\n\techo &#039;&lt;pre&gt;&#039;;\n\tvar_dump(get_declared_classes());\n\n\techo new ReflectionClass(&#039;Foo&#039;); \/\/ __toString()\n?&gt;<\/pre>\n<p>Como retorno obteremos<\/p>\n<pre>array(133) {\n  [0]=&gt;\n  string(8) &quot;stdClass&quot;\n  [1]=&gt;\n  string(9) &quot;Exception&quot;\n  [2]=&gt;\n  string(14) &quot;ErrorException&quot;\n(...)\n  [131]=&gt;\n  string(13) &quot;XSLTProcessor&quot;\n  [132]=&gt;\n  string(3) &quot;Foo&quot;\n}\n\n\/**\n     * Foo\n     * \n     * Alguma descri\u00e7\u00e3o vir\u00e1 aqui\n     * Isto \u00e9 bom\n     *\n     * @author Algu\u00e9m\n     *\/\nClass [  class Foo implements Bar ] {\n  @@ \/var\/www\/html\/testes\/index.php 14-55\n\n  - Constants [1] {\n    Constant [ integer CONSTANTE ] { 5 }\n  }\n\n  - Static properties [0] {\n  }\n\n  - Static methods [0] {\n  }\n\n  - Properties [2] {\n    Property [  private $a ]\n    Property [  private $b ]\n  }\n\n  - Methods [2] {\n    \/**\n     * teste\n     *\n     * Esta fun\u00e7\u00e3o faz x, y e resulta em z\n     *\n     * @return\tstring\n     *\/\n    Method [  public method teste ] {\n      @@ \/var\/www\/html\/testes\/index.php 41 - 43\n    }\n\n    \/**\n     * novo\n     *\n     * Recebe um inteiro e retorna um bool\n     *\n     * @params\tbool\t$param\n     * @return\tint\n     *\/\n    Method [  public method novo ] {\n      @@ \/var\/www\/html\/testes\/index.php 52 - 54\n\n      - Parameters [1] {\n        Parameter #0 [  $param ]\n      }\n    }\n  }\n}<\/pre>\n<p>Vejam que ao chamar as fun\u00e7\u00f5es de classes definidas, observamos, ap\u00f3s a listagem de todas as classes pr\u00e9-definidas do PHP, uma classe <strong>Foo<\/strong>, da qual n\u00e3o temos certeza se \u00e9 ou n\u00e3o nativa da linguagem.<\/p>\n<p>Inspecionamos com o <strong>ReflectionClass<\/strong> e por fim podemos entender um pouco da estrutura daquela classe que inicialmente estava obscura devido ao uso do ionCube.<\/p>\n<h2><span id=\"conclusao\">Conclus\u00e3o<\/span><\/h2>\n<p>Vimos ent\u00e3o que, pelo menos para o PHP, \u00e9 poss\u00edvel obter detalhes de implementa\u00e7\u00e3o independente de como o software foi organizado e seu acesso disponibilizado. N\u00e3o precisamos essencialmente do acesso direto ao conte\u00fado l\u00f3gico e sequencial do arquivo, basta inclu\u00ed-lo e inspecionar o comportamento de suas classes, fun\u00e7\u00f5es e vari\u00e1veis.<\/p>\n<p>Espero que este artigo tenha lhe proporcionado uma luz sobre c\u00f3digos &#8220;obscuros&#8221;. Lembre-se que voc\u00ea tamb\u00e9m pode utilizar estas fun\u00e7\u00f5es para debugar seu pr\u00f3prio c\u00f3digo (que acredito ser a ideia original delas), funcionando como uma ferramenta de apoio para a sequ\u00eancia l\u00f3gica dos seus programas.\t\t\t\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\t\t\t\tSoftwares capazes de criptografar a escrita de c\u00f3digos fonte em diversas linguagens est\u00e3o espalhados pela rede. Geralmente pagos, tais programas s\u00e3o capazes de fornecer certa confiabilidade.\t\t\t\t<\/p>\n","protected":false},"author":1,"featured_media":2583,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,24,12],"tags":[76,158,167,182,203],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Engenharia Reversa e c\u00f3digos criptografados - Blog DialHost<\/title>\n<meta name=\"description\" content=\"Vamos debugar um exemplo de c\u00f3digo criptografado atrav\u00e9s da t\u00e9cnica de engenharia reversa e alguns comandose ferramentas dispon\u00edveis no PHP\" \/>\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.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Engenharia Reversa e c\u00f3digos criptografados - Blog DialHost\" \/>\n<meta property=\"og:description\" content=\"Vamos debugar um exemplo de c\u00f3digo criptografado atrav\u00e9s da t\u00e9cnica de engenharia reversa e alguns comandose ferramentas dispon\u00edveis no PHP\" \/>\n<meta property=\"og:url\" content=\"\/blog\/engenharia-reversa-codigos-criptograf\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog DialHost\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/DialHost\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/DialHost\" \/>\n<meta property=\"article:published_time\" content=\"2014-04-01T18:36:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/04\/og-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dialhost\" \/>\n<meta name=\"twitter:site\" content=\"@dialhost\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\",\"name\":\"DialHost Internet\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/\",\"sameAs\":[\"http:\/\/www.facebook.com\/DialHost\",\"https:\/\/www.instagram.com\/dialhost_oficial\/\",\"https:\/\/www.linkedin.com\/company\/dialhost-internet\",\"https:\/\/www.youtube.com\/channel\/UCAiqiX8IiqTSfA8wQhpzgXQ\",\"https:\/\/twitter.com\/dialhost\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#logo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/03\/marca-dialhost.png\",\"width\":81,\"height\":81,\"caption\":\"DialHost Internet\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/\",\"name\":\"Blog DialHost\",\"description\":\"Os melhores conte\\u00fados sobre Desenvolvimento Web, Marketing e Neg\\u00f3cios\",\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.dialhost.com.br\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#webpage\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/\",\"name\":\"Engenharia Reversa e c\\u00f3digos criptografados - Blog DialHost\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#primaryimage\"},\"datePublished\":\"2014-04-01T18:36:10+00:00\",\"dateModified\":\"2014-04-01T18:36:10+00:00\",\"description\":\"Vamos debugar um exemplo de c\\u00f3digo criptografado atrav\\u00e9s da t\\u00e9cnica de engenharia reversa e alguns comandose ferramentas dispon\\u00edveis no PHP\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"\/blog\/\",\"url\":\"\/blog\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"\/blog\/engenharia-reversa-codigos-criptograf\/\",\"url\":\"\/blog\/engenharia-reversa-codigos-criptograf\/\",\"name\":\"Engenharia Reversa e c\\u00f3digos criptografados\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\"},\"headline\":\"Engenharia Reversa e c\\u00f3digos criptografados\",\"datePublished\":\"2014-04-01T18:36:10+00:00\",\"dateModified\":\"2014-04-01T18:36:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#webpage\"},\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/engenharia-reversa-codigos-criptograf\/#primaryimage\"},\"keywords\":\"desenvolvimento,noticias,php,seguran\\u00e7a,tecnologia\",\"articleSection\":\"Dicas e Not\\u00edcias,PHP,Tecnologias\",\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\",\"name\":\"DialHost Internet\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/05feec2f99aef1c42b09aeaa637ee66f?s=96&r=g\",\"caption\":\"DialHost Internet\"},\"description\":\"H\\u00e1 mais de 18 anos proporcionando um servi\\u00e7o de hospedagem de sites voltado 100% na Experi\\u00eancia e Sucesso do Cliente, prezando a qualidade, transpar\\u00eancia e seguran\\u00e7a.\",\"sameAs\":[\"https:\/\/www.facebook.com\/DialHost\",\"https:\/\/www.instagram.com\/dialhost_oficial\/\",\"https:\/\/www.linkedin.com\/company\/dialhost-internet\",\"https:\/\/twitter.com\/dialhost\",\"https:\/\/www.youtube.com\/channel\/UCAiqiX8IiqTSfA8wQhpzgXQ\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/2482"}],"collection":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2482"}],"version-history":[{"count":0,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/2482\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media\/2583"}],"wp:attachment":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}