{"id":4144,"date":"2023-08-31T22:35:35","date_gmt":"2023-08-31T22:35:35","guid":{"rendered":"https:\/\/oracleconraul.com\/?p=4144"},"modified":"2024-02-28T22:37:56","modified_gmt":"2024-02-28T22:37:56","slug":"wrap","status":"publish","type":"post","link":"https:\/\/oracleconraul.com\/index.php\/2023\/08\/31\/wrap\/","title":{"rendered":"Ocultar \/ ofuscar c\u00f3digo PL\/SQL (WRAP)"},"content":{"rendered":"\n<p>En ocasiones es necesario ocultar (ofuscar) nuestro c\u00f3digo fuente PL\/SQL.  Esta utilidad debe de usarse con criterio, no se trata de ocultar todo el c\u00f3digo disponible, sino \u00fanicamente aquel que por motivos de seguridad, no debe de ser compartido con terceros. <br>El m\u00e9todo utilizado ha sido realizado tradicionalmente con la herramienta WRAP, la cual detallamos en este art\u00edculo y a partir de la versi\u00f3n 10g R2,  es posible realizar esta acci\u00f3n con el paquete DBMS_DDL.WRAP, del cual hablaremos en otro art\u00edculo diferente.<br>Es importante conocer alguna de sus limitaciones antes de aplicarlo, especialmente en entornos productivos, siendo muy importante tener una copia del c\u00f3digo PL\/SQL y un control de versiones del mismo antes de aplicar el m\u00e9todo \u00abwrap\u00bb en nuestro c\u00f3digo.<\/p>\n\n\n\n<p>B\u00e1sicamente las limitaciones de la utilidad WRAP, son las siguientes:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">Los ficheros ofuscados, en aquellos donde hemos usado wrap, no son compatibles entre releases de Oracle Databases.<br>No se puede usar wrap en c\u00f3digo de triggers.<br>No es seguro para securizar password o nombres de tablas.<br>No detecta problemas de sintaxis o errores de c\u00f3digo, generados en nuestro c\u00f3digo sin ofuscar.<br>El c\u00f3digo ofuscado es m\u00e1s largo que el original.<br>Wrap solamente ofusca el body de un package o el type, pero no su especificaci\u00f3n.<\/p>\n\n\n\n<p>Para ver su funcionamiento vamos a crear una funci\u00f3n bastante simple, que posteriormente ofuscaremos con wrap.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">CREATE OR REPLACE FUNCTION dia_de_hoy RETURN VARCHAR2 AS<br>BEGIN<br>RETURN TO_CHAR(SYSDATE, &#8216;DD-MON-YYYY HH24:MI:SS&#8217;);<br>END dia_de_hoy;<br>\/<\/p>\n\n\n\n<p>Comprobamos que funciona:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\"><br>select dia_de_hoy from dual;<br><br>DIA_DE_HOY<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br>31-AGO-2023 20:47:53<br><\/p>\n\n\n\n<p>Copiamos el c\u00f3digo de nuestra funci\u00f3n en el sistema operativo.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@oracleconraul u01]$ cat <strong>funcion_dia_de_hoy.sql<\/strong><br>CREATE OR REPLACE FUNCTION dia_de_hoy RETURN VARCHAR2 AS<br>BEGIN<br>RETURN TO_CHAR(SYSDATE, &#8216;DD-MON-YYYY HH24:MI:SS&#8217;);<br>END dia_de_hoy;<br>\/<\/p>\n\n\n\n<p>Podemos ver en SQL-Developer el aspecto normal de la funci\u00f3n antes de aplicar la ofuscaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"494\" height=\"146\" src=\"https:\/\/oracleconraul.com\/wp-content\/uploads\/2023\/08\/image-1.png\" alt=\"\" class=\"wp-image-4158\" srcset=\"https:\/\/oracleconraul.com\/wp-content\/uploads\/2023\/08\/image-1.png 494w, https:\/\/oracleconraul.com\/wp-content\/uploads\/2023\/08\/image-1-300x89.png 300w\" sizes=\"(max-width: 494px) 100vw, 494px\" \/><\/figure>\n\n\n\n<p>En el sistema operativo lanzamos el comando para ofuscar el c\u00f3digo PL-SQL.<\/p>\n\n\n\n<p>La sintaxis es:<br>wrap iname=&lt;fichero entrada&gt; oname=&lt;fichero de salida ofuscado&gt;<\/p>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">[oracle@localhost u01]$ wrap iname=funcion_dia_de_hoy.sql oname=funcion_dia_de_hoy.out <br>PL\/SQL Wrapper: Release 19.0.0.0.0 &#8211; Production on Thu Aug 31 21:17:23 2023<br>Version 19.3.0.0.0<br>Copyright (c) 1982, 2019, Oracle and\/or its affiliates. All rights reserved.<br>Processing funcion_dia_de_hoy.sql to funcion_dia_de_hoy.out<\/p>\n\n\n\n<p>La utilidad nos reportar\u00e1 el c\u00f3digo ofuscado para se ejecutado.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">CREATE OR REPLACE FUNCTION dia_de_hoy wrapped<br>a000000<br>1<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>abcd<br>8<br>74 b6<br>LH4SgLm3AMbYAySR+WVH9QmeSoAwg8eZgcfLCNL+Xlr6WV+uofByhWTD58CyvbKbXufHdMAz<br>uHRlCbh0i8DAMv7ShgmpoQLOxtYaIazv1kx2hHEyjndMcfUQc3P17zdnr2pqhduXsevFV1RM<br>66tN+j1y6a+V638ZlSoZaiQl7Pumz30sVg==<br>\/<\/p>\n\n\n\n<p>Copiamos el c\u00f3digo y lo ejecutamos (SqlPlus, SqlDeveloper, etc).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"680\" height=\"463\" src=\"https:\/\/oracleconraul.com\/wp-content\/uploads\/2023\/08\/image-2.png\" alt=\"\" class=\"wp-image-4165\" srcset=\"https:\/\/oracleconraul.com\/wp-content\/uploads\/2023\/08\/image-2.png 680w, https:\/\/oracleconraul.com\/wp-content\/uploads\/2023\/08\/image-2-300x204.png 300w\" sizes=\"(max-width: 680px) 100vw, 680px\" \/><\/figure>\n\n\n\n<p>A partir de ahora, todas las nuevas sesiones que conecten a la base de datos no tendr\u00e1n acceso al c\u00f3digo de forma legible, mostr\u00e1ndose el c\u00f3digo oculto para los usuarios.<\/p>\n\n\n\n<p><br><\/p>\n\n\n\n<p><br><br><\/p>\n\n\n\n<p><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En ocasiones es necesario ocultar (ofuscar) nuestro c\u00f3digo fuente PL\/SQL. Esta utilidad debe de usarse con criterio, no se trata de ocultar todo el c\u00f3digo disponible, sino \u00fanicamente aquel que por motivos de seguridad, no debe de ser compartido con terceros. El m\u00e9todo utilizado ha sido realizado tradicionalmente con la herramienta WRAP, la cual detallamos<\/p>\n<div class=\"more-link\">\n\t\t\t\t <a href=\"https:\/\/oracleconraul.com\/index.php\/2023\/08\/31\/wrap\/\" class=\"link-btn theme-btn\"><span>Read More <\/span> <i class=\"fa fa-caret-right\"><\/i><\/a>\n\t\t\t<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[14],"tags":[32],"class_list":["post-4144","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-seguridad-security"],"_links":{"self":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/4144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/comments?post=4144"}],"version-history":[{"count":20,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/4144\/revisions"}],"predecessor-version":[{"id":4593,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/4144\/revisions\/4593"}],"wp:attachment":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/media?parent=4144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/categories?post=4144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/tags?post=4144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}