Как читать код PL / SQL в файле Oracle Forms .FMT?

Oracle Forms10g предоставляет инструмент для преобразования модулей Oracle Forms из двоичного формата (.FMB), с которым работает Oracle Forms Builder, в текстовый формат (.FMT).

Например, если вы создаете модуль с именем mymodule.fmb с помощью Oracle Forms Builder, а затем вызываете

frmcmp module=mymodule.fmb script=yes batch=yes logon=no

из командной строки утилита Oracle Forms Convert создаст файл с именем mymodule.fmt из файла mymodule.fmb. Этот текстовый файл должен быть «читаемым» людьми, за исключением кода триггеров и программных модулей PL / SQL, который зашифрован.

Например, это фрагмент файла .FMT с фрагментом кодифицированного кода PL / SQL.

DEFINE  F50P
BEGIN
   PP = 10
   PI = 3
   PN = 464
   PL = 1138
   PV = (BLONG)
<<"
00000049 00800000 00440000 00000000 00000031 0000000d 00000002 a0011519 
00002420 0000045e 001f0000 00165030 5f32335f 4f43545f 32303038 31365f33 
375f3039 00000006 42454749 4e0a0000 0042676f 5f626c6f 636b2820 27504149 
53455327 20293b0a 69662066 6f726d5f 73756363 65737320 7468656e 0a096578 
65637574 655f7175 6572793b 0a656e64 2069663b 00000005 0a454e44 3b000000 
1d574845 4e2d4e45 572d464f 524d2d49 4e535441 4e434520 28466f72 6d290000 

Вы когда-нибудь пытались декодировать такие файлы, чтобы извлечь из формы PL / SQL-код?

Было бы очень полезно иметь возможность искать строку в коде PL / SQL многих файлов .FMT вместо использования Oracle Forms Builder для ручного открытия каждого из соответствующих файлов .FMB и поиска строки в каждом из них. из них.

Спасибо!

Вернувшись в Forms 4.5 (в те времена, когда «Разработчик 2000» было шикарным футуристическим именем), код PL / SQL был текстом в файле FMT - так что вы могли искать код - на самом деле вы также могли найти его в файлах FMB. Возможно, оракул намеренно запутывает это?

hamishmcn 23.10.2008 19:54

Я ошибся, байты - это просто шестнадцатеричные значения символов (см. Мой пост ниже)

hamishmcn 23.10.2008 23:39

Если все, что вы делаете, это поиск текста, вы сможете легко найти двоичный файл с помощью grep. Я все время делаю это, используя python и regex, чтобы определить, на какие формы повлияет данная хранимая процедура.

kurosch 25.10.2008 01:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
3
21 623
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Согласно странице это, у автора есть сценарий perl для преобразования шестнадцатеричного кода обратно в текст ascii (он говорит, чтобы отправить ему электронное письмо, и он отправит его)

Байты - это просто шестнадцатеричные значения символов. например: взять 4-ю строку и поместить ее в следующий код Python:

[chr(x) for x in [0x53,0x45,0x53,0x27 ,0x20,0x29,0x3b,0x0a ,0x69,0x66,0x20,0x66 ,0x6f,0x72,0x6d,0x5f ,0x73,0x75,0x63,0x63 ,0x65,0x73,0x73,0x20 ,0x74,0x68,0x65,0x6e ,0x0a,0x09,0x65,0x78]]

дает следующий результат:

['S', 'E', 'S', "'", ' ', ')', ';', '\n', 'i', 'f', ' ', 'f', 'o', 'r', 'm', '_', 's', 'u', 'c', 'c', 'e', 's', 's', ' ', 't', 'h', 'e', 'n', '\n', '\t', 'e', 'x']

который узнаваем формы pl / sql. Так что, похоже, не составит большого труда создать сценарий, который возьмет каталог файлов FMT и создаст соответствующие файлы с текстом, который можно было бы найти. Веселиться!

Для поиска я удалю из вывода все непечатаемые символы (например, 0x00). Спасибо!

Aurelio Martin Massoni 24.10.2008 09:35

В Oracle Forms 9i и более поздних версиях есть API программирования, позволяющий делать именно то, что вы описываете. Для этого вам нужно будет просмотреть документацию по формам, но это может быть быстрее, чем пытаться извлечь двоичные строки.

Если вы готовы платить за существующий инструмент, используйте следующее:

http://www.orcl-toolbox.com/

Их formAPI и FormsTools позволяют вам извлекать, различать, изменять и обновлять ваши формы.

Ответ принят как подходящий

Обратите внимание, наряду с API, если вы работаете в начале этого процесса, вам, вероятно, будет лучше сгенерировать версию XML, чем версию FMT. FMT - это более старый формат, сохраненный для обратной совместимости, и такие инструменты, как недавно анонсированный конвертер Forms -> Oracle APEX, потребуют XML. Также его легче читать.

В «Forms 10g release 1» (9.0.4) преобразователь XML представляет собой отдельную программу командной строки. forms2xml. Я думаю, что это все еще актуально для 10.1

Кроме того, XML легче читать и интерпретировать.

Спасибо! PL / SQL хранится в виде обычного текста в XML, и это гораздо лучший формат для поиска.

Aurelio Martin Massoni 27.10.2008 11:38

Другие вопросы по теме