SQL Server maneja un nivel de seguridad para que el código de los Stored Procedure no sean visibles. Ello se logra con la opción WITH ENCRYPTION.
Un ejemplo de esto es el siguiente:
USE AdventureWorksDW2008R2 GO CREATE PROCEDURE usp_dim_product WITH ENCRYPTION AS SELECT ProductAlternateKey,EnglishProductName FROM dbo.DimProduct
Intentemos ver el código fuente de este stored procedure:
sp_helptext usp_dim_product
La siguiente imagen muestra el resultado con el mensaje: “The text for object ‘usp_dim_product’ is encrypted.”
Pero, ¿realmente lo hemos protegido? ¿Realmente lo hemos encriptado? Para responder esto debemos saber que realmente esta opción no realiza una encriptación sino una ofuscación de código.
¿Y que es ofuscar? Ofuscar es hacer ininteligible algo (en este caso un código) para ocultar su funcionalidad, haciendo más difícil los intentos de desensamblados o ingeniería reversa. Otra funcionalidad de la ofuscación del código es no modificar la funcionalidad del código.
A diferencia de las técnicas criptográficas (encriptación) el ofuscar es más liviano, menos seguro, dándole una tarea adicional a la persona que quiera obtener el código. En el caso específico de SQL Server, se usan técnicas de ofuscamiento basados en operaciones lógicas XOR. Una explicación más a detalle del mismo se podrá encontrar en los siguientes links:
Entonces, ¿Hay formas de poder “desofuscar ” un código en SQL Server ? Sí. Como lo explican en los post anteriores, generando los procedimientos almacenados con esta lógica XOR y ejecutándolo en modos DAC, depurándolos con los permisos respectivos según indica los BOL (Book On Line), etc.
Pero, ¿no habrá una manera más sencilla? ¿O algún software que lo haga por mí?. La respuesta es sí, y mostraremos a continuación uno de ellos. Se llama SQL Decryptor de Optillect, es gratuito y lo pueden descargar del siguiente link:
Su uso:
Lo primero que nos pedirá el software a ejecutar es conectarnos al servidor SQL donde se encuentra nuestro procedimiento almacenado ofuscado:
Luego seleccionamos la base de datos, el procedimiento almacenado ofuscado, le damos doble clic y listo, podemos ver el código sin problema.
Sí deseamos luego podemos copiarlo o exportarlo a un archivo, solamente señalando el código y dándole clic derecho:
Muy buena herramienta
Hendrick, con cual herramienta de Red Gate puedes lograr eso?
Un comentario sobre la herramienta: solo permite desencriptar SPs cuyo tamaño no sea mayor a 200 bytes, para SPs grandes pide un codigo de registro. Saludos
Gracias por el aporte
Usando el comparador de red gates cuando compara los sp los desencriptara automaticamente
Cada día nos convencemos más de que este tipo de encriptado no es muy eficiente
Buenas compañeros. la verdad es que despues de buscar y buscar encontre este comentario de ustedes y me doy cuenta qeu el unico programa que me funcion para desencriptar un procedimiento en sql 2012 fue el de comparar las base de datos , no tiene limite en el tamaño. y solamente con compararlas te muestra el procedimiento , sin importar que el programa de funcione x 14 dias free
http://www.red-gate.com/products/sql-development/sql-compare/
Gracias por el dato Janer, Red Gate es una compañía que tiene muy buen software para administrar SQL Server. Nosotros en dbLearner usamos varias, incluyendo SQL Compare
Al parecer no funciona con SQL Server 2012. Existe alguna otra version o herramienta que funcione para esta version?? Saludos
Alex, este artículo fue publicado cuando estaba vigente la versión 2008R2. Vamos a testearlo con 2012 y buscar alguna herramienta alternativa.
Muchas gracias Alberto, la verdad es que si es una herramienta muy util. Estare pendiente
Saludos…
muy bueno
como puedo desincriptar este archivo alguien me puede ayudar
[DB_SIGAMEF]
2=‘—¢ÆÂ¬¬À˜œ¦²ŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}TB¶iLZ²u¨
5=‘—¡æâÌÌÀÔÎÙŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}TB¶iLZ²u¨Ÿ
3=‘—¡Æ¾·Áª«¸ÅŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}TB¶iLZ²u¨Ÿ
1=‘™ çÚÇׯÊÛÜíÊÝÊÈ¦šž‘¾ª®ªÒª˜žšŽŠY´tYƒl¦·In©Q¥»w‹¢J
4=‘—¡æâÌÌ’šœ¬ŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}TB¶iLZ²u¨Ÿ
6=‘—¡Æ¾·Áª«¸ÅŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}TB¶iLZ²u¨Ÿ
7=‘˜ £©’—”ž¨¦œŽž ¯§ŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}T
DBMS=MSS Microsoft SQL Server 2012
8=‘˜§«•œ‘™³¶º±¯¦¹¸ŠY´tYƒl¦·In©Q¥»w‹¢JgO“‰Y\fª}TB¶i
Mónica: ese es un procedimiento almacenado?