Это возможно, и не очень сложно.
Вариант 1: диагностический сервер
(Адаптировано из этой ветки форума . Я не проверял это. Я точно знаю, что он не будет работать для SQL Anywhere, поскольку у него нет режима диагностики, но предположительно он работает для ASE.)
Запустить сервер в режиме диагностики с помощью программы diagsrvr.exe
. Затем подключитесь к нему с помощью какого-либо инструмента SQL и выполните следующие команды (где SECRETPROC
- имя интересующей вас скрытой процедуры):
create table #x (id int)
insert into #x values (object_id ('SECRETPROC'))
dbcc _unhide_text ('#x')
go
sp_helptext
будет работать на нем как обычно.
Вариант 2: проверка памяти
(Первоначально опубликовано в моем блоге . Я проверил это на SQL Anywhere 11. Думаю, он работает и на аналогичных продуктах.)
Чтобы сервер загрузил его в память, вам нужно вызвать его. Некоторые установки SQL Anywhere поставляются с инструментом, помеченным dbisql.exe
, который можно использовать в качестве интерактивной среды SQL. Вызовите процедуру - она не должна запускаться; Я бы посоветовал назвать это фиктивным числом аргументов, чтобы случайно не запустить что-то плохое Затем быстро откройте диспетчер задач, найдите процесс сервера (для меня он называется dbsrv11.exe
, потому что я использую SQL Anywhere 11), щелкните его правой кнопкой мыши и выберите Создать файл дампа .
.
Как только это закончится, откройте полученный файл в шестнадцатеричном редакторе (хотя Блокнот тоже может работать). Мне нравятся XVI32 для таких вещей. Поиск по названию процедуры - например, SECRETPROC
- с правильной прописной буквой. Там будет несколько упоминаний об этом (и обфусцированная версия этого тоже), продолжайте, пока не увидите тот, который начинается с create function
и имеет кучу кода SQL после него. Все от этой ключевой фразы до следующего нулевого байта является кодом хранимой процедуры.
Если вы используете XVI32, щелкните начало интересующей части на правой панели и удерживайте Shift, используя клавиши со стрелками, чтобы перейти к концу нужной части. Текст станет красным. Затем вы можете использовать Ctrl + C, чтобы скопировать данные, Ctrl + N, чтобы создать новый файл, Ctrl + V, чтобы вставить данные, и File → Save, чтобы записать их в новый файл.