提取 SQLCLR 程序集

Ed *_*ick 4 sql-server-2005 sqlclr

我们的一个内部应用程序有一个 SQLCLR 程序集,它当前遇到了问题。开发人员在使用存储在我们的源代码控制系统中的版本重新创建问题时遇到问题,因此他怀疑可能已经发布了一些未上传到源代码控制的代码。有没有办法将 SQLCLR 程序集提取到 .dll 文件中,以便他可以对其进行逆向工程以进行分析?

Mat*_*ttB 8

确实有一种方法 - 程序集存储在sys.assembly_files数据库的表中。选择所有内容sys.assembly_files并找到assembly_id,然后运行以下代码(先更改assembly_idSaveToFile路径):

DECLARE @IMG_PATH VARBINARY(MAX)
DECLARE @ObjectToken INT

SELECT @IMG_PATH = content FROM sys.assembly_files WHERE assembly_id = 65536

EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
        EXEC sp_OASetProperty @ObjectToken, 'Type', 1
        EXEC sp_OAMethod @ObjectToken, 'Open'
        EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
        EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'D:\SqlServerProject1.dll', 2
        EXEC sp_OAMethod @ObjectToken, 'Close'
        EXEC sp_OADestroy @ObjectToken
Run Code Online (Sandbox Code Playgroud)

但是,为了使其工作,您需要在 SQL 实例上的功能的表面区域配置中启用 OLE 自动化功能。

我从这里提取了这段代码:http :
//social.msdn.microsoft.com/Forums/en/sqlnetfx/thread/1e00e656-f322-45ec-b4e0-83db748fa97a