(Atención: funciona sólo en sqlserver 2000, en las versiones actuales les borrará el SP correspondiente, ojo con aquello)
Para desencriptar procedimientos almacenados debemos hacer lo siguiente:
Si tenemos un procedimiento encriptado como el siguiente:
CREATE PROCEDURE desencriptame
WITH ENCRYPTION
AS
PRINT 'desencriptame porfavor'
GO
y si luego quiesieramos visualizar el texto de este procedimiento nos apareceria lo siguiente:
exec sp_helptext desencriptame
mensaje: Los comentarios de objeto han sido cifrados.
Para ver el código desencriptado hagamos lo siguiente. Vamos a crear un procedimiento que desencripte esto. este procedimiento se llamará DECRYPTSP2K y su código es el siguiente: compilenlo:
CREATE PROCEDURE [DBO].[DECRYPTSP2K](
@objName VARCHAR(50))
AS
DECLARE @a NVARCHAR(4000),
@b NVARCHAR(4000),
@c NVARCHAR(4000),
@d NVARCHAR(4000),
@i INT,
@t BIGINT
--get encrypted data
SET @a = (SELECT CTEXT
FROM SYSCOMMENTS
WHERE ID = OBJECT_ID(@objName))
SET @b = 'ALTER PROCEDURE ' + @objName + ' WITH ENCRYPTION AS ' +
REPLICATE('-',4000 - 62)
EXECUTE( @b)
--get encrypted bogus SP
SET @c = (SELECT CTEXT
FROM SYSCOMMENTS
WHERE ID = OBJECT_ID(@objName))
SET @b = 'CREATE PROCEDURE ' + @objName + ' WITH ENCRYPTION AS ' +
REPLICATE('-',4000 - 62)
--start counter
SET @i = 1
--fill temporary variable
SET @d = REPLICATE(N'A',(DATALENGTH(@a) / 2))
--loop
WHILE @i <= DATALENGTH(@a) / 2
BEGIN
--xor original+bogus+bogus encrypted
SET @d = STUFF(@d,@i,1,NCHAR(UNICODE(SUBSTRING(@a,@i,1)) ^ (UNICODE(SUBSTRING(@b,@i,1)) ^ UNICODE(SUBSTRING(@c,@i,1)))))
SET @i = @i + 1
END
--drop original SP
EXECUTE( 'drop PROCEDURE ' + @objName)
--remove encryption
--try to preserve case
SET @d = REPLACE((@d),'WITH ENCRYPTION','')
SET @d = REPLACE((@d),'With Encryption','')
SET @d = REPLACE((@d),'with encryption','')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@d)) > 0
SET @d = REPLACE(UPPER(@d),'WITH ENCRYPTION','')
--replace SP
EXECUTE( @d)
Luego ejecutenlo de la siguiente manera:
exec DECRYPTSP2K 'desencriptame'
go
Luego vuelvan a ejecutar el sp_helptext y obtendrán el código desencriptado:
exec sp_helptext desencriptame
mensaje:Text
CREATE PROCEDURE desencriptame
AS
PRINT 'desencriptame porfavor'
Saludos. Felipe D.
Nov 14, 2007
Labels
Oracle
Unix
Sql Server
Noticias
Windows
12c
Varios
aix
cloud
linux
performance
sqlserver
Sap
awr
backup
base de datos
cpu
database
golden gate
goldengate
microsoft
ora-
rman
sql
tdp
tsm
always free
alwayson
availability
bug
expdp
extract
html
java
oracle 11g
patch
psu
tivoli
tuning
upgrade
virtualizacion
10046
12.1
12.2
1904046.1
19405
2040347.1
2149579.1
22912874
25684960
25972261
ADB
ANS
ANS1087E
DST
Mysql
OGG-00303
ORACLE_HOME
RC106
_OFFLINE_ROLLBACK_SEGMENTS
_datafile_write_errors_crash_instance
_disable_function_based_index
abended
adapter
apex
append
asm
atp
autonomous
bigdata
block recover
bundlepatch
cdb
change
cluster
corrupcion
counter log
crash
crecimiento
curl
data_options
datafile
dataguard
datapatch
datapump
db2
dba_hist_tbspc_space_usage
desarrollo
disable_append_hint
e-business suite
endpoint
error
event
exadata
extractor
full
gg
grid
hash
hash_value
hashing
hostname
ibm
ide
idle instance
impdp
in-memory
instance
jdbc
jtds
kafka
lodctr
logs
mac
memory
mirror
mongo
mongodb
network_link
ops$
ora-01017
oracle rest data services
ords
pal
parche
pdb
performance monitor
perl
point
ptr
qkaffsindex3
rac
recovering
redis
replica
replicador
replicate
replication
replicte
respaldo
rest enabled sQL service
restart
restore
rollback segment
scm
scripts
shell
smon
spu
sql_id
sql_trace
sqldeveloper
standalone
standby
tdpsqlc
tempfile
time
tkprof
trace
tracefile
transaction
trca
trcanlzr
undo_management
virtual machine
vm

History
-
▼
2007
(45)
-
▼
11
(20)
- Oracle: Problema:"java: xcb_xlib.c:52: xcb_xlib_un...
- .Net: Disponibles las versiones express de la nuev...
- Opensuse 10.3: Problema para compilar con vmware s...
- Windows: Permitiendo un número más grande de conex...
- Física: Paradoja de los dos gemelos
- Albert Einstein: Magnitud del tiempo
- Oracle: Job and procedure for to update statistics
- Oracle: Visualizando los jobs que se están ejecuta...
- .Net: LLenando un combobox en un formulario Windows
- Sql Server: desencriptando Procedimientos almacenados
- Pipebytes: Compartiendo archivos
- Windows: 10 nuevas caracteristicas de Windows Serv...
- Linux: Habilitar servicios automáticos
- Sql Server: Pasos en la recuperación (Teórico)
- Virtual Box: Shared Folders
- Windows: Obteniendo información de sistemas desde ...
- Linux: Montando volumen nfs
- Mysql: Tipos de Bases de Datos y bloqueos
- Sql Server: Estadisticas y la forma de administrar...
- Kdenlive, editor de vídeos libre para Linux
-
▼
11
(20)

Copyright (c) Felipe Rodrigo Donoso Bastias. Powered by Blogger.

Felicitaciones Felipe.
ReplyDeleteMuy buen trabajo.
Espero seguir visitando tu blog, en busca de tan buenos aportes.
saludos
Anamaria B.
Grande Maestro!!!!.... Quedo demostrado que la Encriptacion de Microsoft vale Yuyo.... :)
ReplyDeleteGracias por el Aporte. Yo que iba a implementar la seguridad de mi sistema con esto...jajajaja
noooo en sql server 2005 no. Efectivamente elimina el procedimiento. Antes de ejecutar algo Siempre revisa el código estimado amigo.
ReplyDeletecomo puedo desencriptar un sp de sql 2008?
ReplyDeleteEstimado lo que yo he probado es utilizar este software que me ha servidor, es una versiòn pagada pero hay unaversiòn trial que puedes usar.
ReplyDeletehttp://www.devlib.net/decryptsql.htm
lamentablemente no hay una soluciòn directa como en SQL Server 2000. 2005 y 2008 requieren de herramientas externas para desencriptar.