Desencriptando un Procedimiento Almacenado en SQL Server

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:

SQL Decryptor

 
 

 

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:

14 comentarios en “Desencriptando un Procedimiento Almacenado en SQL Server

  • 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

    • 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.

  • 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

Deja un comentario

Tu dirección de correo electrónico no será publicada.