Visual FoxPro
Visual FoxPro (VFP) — объектно-ориентированный и процедурный язык программирования систем управления реляционными базами данных, разработанный корпорацией Microsoft. Основой для данного программного продукта послужил язык программирования FoxPro. Относится к семейству языков xBase, разработанных на базе синтаксиса языка программирования dBase. Другими членами данного семейства являются Clipper и Recital.
Первоначально FoxPro (исходное название — FoxBASE) разрабатывалась Fox Software, начиная с 1984 года. В 1992 году Fox Technologies была куплена Microsoft, новые версии продукта значительно видоизменились и приобрели префикс «Visual». Последняя версия оригинального FoxPro — версия 2.6 — работала под Mac OS, DOS, Windows и Unix; уже в версии Visual FoxPro 3.0 от MS список поддерживаемых платформ сократился до Mac OS и Windows, а в более поздних версиях от MS — уже только до Windows. Текущая версия MS Visual FoxPro основана на COM, и Microsoft утверждает, что .NET-версии продукта не будет. Существует проект Sedna, который должен обеспечить возможность взаимодействия Visual FoxPro с .NET.
Содержание
Новейшая история
В конце 2002 года было показано, что Visual FoxPro может работать на Linux под Wine, однако это, по существу, нарушает пользовательское лицензионное соглашение (EULA).
В декабре 2005 года, VFP взлетел в Top 20 на TIOBE индекс в первый раз. В марте 2007 года он был в положении 19, что делает его языком группы «B». По состоянию на август 2010 года, VFP (в сочетании с XBase) находится в позиции 25.
В марте 2007 года Microsoft объявила, что не будет VFP 10, соответственно, VFP 9 (выпущен в производство 17 декабря 2004 г.) — последний коммерческий релиз VFP от Microsoft. Поддержка версии 9 продолжается с пакетами обновления, которые были выпущены 8 декабря 2005 и 11 октября 2007 года.
Идет работа над проектом под кодовым названием «Седна» (названном в честь карликовой планеты Седны, открытой в 2003 году), который представляет собой набор дополнений к VFP 9.0 из xBase-компонентов для поддержки ряда сценариев и алгоритмов взаимодействия с различными технологиями Microsoft, включая SQL Server 2005, .NET Framework, Windows Vista, Office 2007, Windows Search и Team Foundation Server (TFS). Microsoft выпустила «Седну» под лицензией Shared Source на сайте CodePlex. Представители корпорации Microsoft пояснили, что основной VFP будет по-прежнему оставаться закрытым исходным кодом. «Седна» была выпущен 25 января 2008. По состоянию на март 2008 года, все xBase-компоненты VFP 9 SP2 (в том числе «Седна») были доступны для развития сообществом на CodePlex.
История версий
Совместимость с операционными системами
| Версия | VFP 3.0 | VFP 5.0 | VFP 6.0 | VFP 7.0 | VFP 8.1 | VFP 9.0 |
|---|---|---|---|---|---|---|
| Windows 3.x | Да | Нет | Нет | Нет | Нет | Нет |
| Windows NT 4.0 | Да | Да | Да | Да | Нет | Нет [1] |
| Windows 95 | Да | Да | Да | Только среда запуска (runtime) | Нет | Нет |
| Windows 98 | Да | Да | Да | Да | Только среда запуска (Runtime) | Только среда запуска (Runtime) |
| Windows ME | Да | Да | Да | Да | Только среда запуска (Runtime) | Только среда запуска (Runtime) |
| Windows 2000 | Да | Да | Да | Да | Да | Да |
| Windows XP | Да | Да | Да | Да | Да | Да |
| Windows Server 2003 | ? | Да | Да | Да | Да | Да |
| Windows Vista | В режиме совместимости | Да | Да | Да | Да | Да |
| Windows 7 | Да | Да | Да | Да | Да | Да |
Исполняемые файлы
| Версия | Возвращаемое значение VERSION() | Размер EXE-файла | Дата EXE-файла | Размер DLL-файла | Название DLL-файла |
|---|---|---|---|---|---|
| VFP 9 SP2 with Hotfixes | Visual FoxPro 09.00.0000.7423 for Windows | 5,648 kb | 3 апреля 2009 | 4,624 kb | VFP9R.DLL |
| VFP 9 SP2 | Visual FoxPro 09.00.0000.5721 for Windows | 5,648 kb | 16 октября 2007 | 4,624 kb | VFP9R.DLL |
| VFP 9 | Visual FoxPro 09.00.0000.2412 for Windows | 5,620 kb | 13 декабря 2004 | 4,600 kb | VFP9R.DLL |
| VFP 8 | Visual FoxPro 08.00.0000.3117 for Windows | 5,236 kb | 25 сентября 2003 | 4,200 kb | VFP8R.DLL |
| VFP 7 | Visual FoxPro 07.00.0000.9465 for Windows | 4,260 kb | 4 января 2002 | 3,344 kb | VFP7R.DLL |
| VFP 6 | Visual FoxPro 06.00.8961.00 for Windows | 4,091 kb | 18 августа 2000 | 3,295 kb | VFP6R.DLL |
| VFP 5 | Visual FoxPro 5.0.0.415 for Windows | 4,065 kb | 24 января 1997 | 3,148 kb | VFP500.DLL |
| VFP 3 | Visual FoxPro 03.00.00.0711 for Windows | 4,374 kb | 16 декабря 1995 | 3,657 kb | VFP300.ESL |
| FPW 2.6a | FoxPro 2.6a for Windows | 2,444 kb | 28 сентября 1994 | 2,946 kb | FOXW2600.ESL |
Дальнейшее развитие
Разработка продукта MS прекращена с выходом SP2 для версии 9.0, поддержка продукта MS будет осуществляться до 2015 года [2] .
В конце марта 2007 организовалось движение испаноязычного FoxPro-сообщества MasFoxPro [3] (MoreFoxPro в английском), целью которого стало написание петиции в Microsoft с предложением продолжить работу по обновлению Visual FoxPro или выпустить его в сообщество с открытым исходным кодом. 3 апреля 2007 года движение было отмечено технической прессой [4] .
Также 3 апреля 2007 Microsoft ответила на просьбы заявителя таким заявлением от Алана Гривера ( Alan Griver ):
Мы очень хорошо понимаем FoxPro сообщество и, то, что сыграло большую роль в том, что мы объявили 13 марта. Это всегда нелегкое решение — объявить, что мы не собираемся выпускать другую версию продукта, и это первое, что мы рассматриваем очень тщательно.
Мы не объявляем конец проекта FoxPro: очевидно, приложения FoxPro будут продолжать работать. Согласно нашим внутренним оценкам, существует больше приложений, работающих в FoxPro 2.6, чем есть в VFP, а ведь FoxPro 2.6 не поддерживается много лет. Visual FoxPro 9.0 будет поддерживаться Microsoft до 2015 года.
Для Microsoft, чтобы сохранить развитие основы FoxPro, надо обратить внимание на создание 64-разрядной среды разработки, что будет включать почти полностью переписанный основной продукт. Мы также инвестировали в создание масштабируемой базы данных SQL Server, включая свободно доступный SQL Server Express Edition. Что касается формирования партнерских отношений с третьей стороной, о которой мы слышали в интерпретации ряда крупных клиентов FoxPro, — это сделает невозможным использование FoxPro, поскольку он больше не будет от утвержденного поставщика. Мы чувствовали, что выложить среду с открытым исходным кодом на CodePlex, которая уравновешивает потребности как сообщества, так и крупных клиентов — лучший путь вперёд.
We’re very aware of the FoxPro community and that played a large part in what we announced on March 13th. It’s never an easy decision to announce that we’re not going to release another version of a product and it’s one that we consider very carefully.
We’re not announcing the end of FoxPro: Obviously, FoxPro applications will continue to work. By some of our internal estimates, there are more applications running in FoxPro 2.6 than there are in VFP and FoxPro 2.6 hasn’t been supported in many years. Visual FoxPro 9 will be supported by Microsoft through 2015.
For Microsoft to continue to evolve the FoxPro base, we would need to look at creating a 64-bit development environment and that would involve an almost complete rewrite of the core product. We’ve also invested in creating a scalable database with SQL Server, including the freely available SQL Server Express Edition. As far as forming a partnership with a third-party is concerned, we’ve heard from a number of large FoxPro customers that this would make it impossible for them to continue to use FoxPro since it would no longer be from an approved vendor. We felt that putting the environment into open source on CodePlex, which balances the needs of both the community and the large customers, was the best path forward. [5]
Ностальгия по Visual FoxPro
Если вы никогда ничего не слышали о Visual FoxPro, значит, вы стали интересоваться информационными технологиями в ту эпоху, когда этот программный продукт уже пережил пик своей популярности. А если нет — почему бы не вспомнить об этом действительно интересном и полезном средстве разработки?
Введение, или совсем чуть-чуть истории
Разработка приложений, взаимодействующих с базами данных, являлась делом более чем актуальным со времен появления первых систем управления базами данных. В связи с этим ничуть не удивительно, что на рынке средств разработки приложений появилось достаточно много программных продуктов, «заточенных» именно под работу с базами данных. Появлялись эти среды, конечно, в такие стародавние времена, что не всякий старожил форума «Компьютерных вестей» их вспомнит, но, тем не менее, было когда-то и такое славное время.
Вот тогда-то и появился инструмент, которому впоследствии суждено было войти в историю индустрии разработки программного обеспечения под именем FoxPro. Началась же история этого, без преувеличений, легендарного средства разработки более четверти века назад, в уже далеком 1984 году, когда компания Fox Software начала проект под названием FoxBase. Долго ли, коротко ли, но в 1992 году компанию приобрела разросшаяся не на шутку корпорация Microsoft, и именно тогда у продукта, который уже назывался FoxPro, в названии появилась приставка Visual. Под руководством Microsoft продукт развивался и совершенствовался на протяжении последующих пятнадцати лет, до тех пор, пока в 2007 году не вышло последнее официальное обновление для Visual FoxPro — до версии 9.0 Service Pack 2. Конечно, на протяжении пятнадцати лет существования Visual FoxPro в историю продукта было вписано немало интересных страниц, но рассматривать их здесь сейчас не стоит, потому что вряд ли кому-то, кроме тех, кто плотно работал с Visual FoxPro, это будет действительно интересно, да и место, которое доступно одной отдельно взятой газетной статье, также ограничено.
Можно, конечно, привести тысячи причин, по которым Microsoft решила прекратить поддержку Visual FoxPro, но главная из них, на мой взгляд, все-таки состоит в том, что Visual FoxPro плохо согласовалась с продвигаемой корпорацией платформой .NET. Тем не менее, Visual FoxPro до сих пор используется многими разработчиками, и не только для внесения по мере эксплуатации исправлений и улучшений в уже существующие проекты. Так что говорить об этом программном продукте исключительно и только в ретроспективном аспекте было бы не совсем правильно. Поэтому, несмотря на название этой статьи, рассказ будет не столько об упадке былой популярности Visual FoxPro, сколько о самом этом программном продукте, даже сейчас, спустя столько лет после выхода своей последней версии, заслуживающем внимания со стороны достаточно широкой аудитории.
Что такое Visual FoxPro?
Итак, я уже упомянул, что Visual FoxPro — это продукт, ориентированный, в первую очередь, на создание приложений, работающих с базами данных. Однако такая краткая характеристика вряд ли может отразить все то, чем Visual FoxPro заслужил уважение и популярность среди разработчиков.
Любое средство разработки, в первую очередь, характеризуется тем языком программирования (или несколькими из них), который оно предлагает использовать в процессе разработки программного обеспечения. В случае Visual FoxPro таким языком, соответственно, будет FoxPro. Язык этот, который может показаться уже несколько морально устаревшим с позиций сегодняшних реалий индустрии программирования, до сих пор, тем не менее, обеспечивает вполне качественное решение задач, возникающих у большинства разработчиков прикладных приложений. Язык, который закладывался в эту среду её первыми разработчиками, берет свои истоки от xBase — языка программирования, который изначально был «заточен» под работу с dBase и, конечно, сильно отличался от того языка, который был «на вооружении» людей, имевших дело с FoxPro в те годы, когда эта среда ещё даже не перешла под «покровительство» Microsoft. В Visual FoxPro в распоряжении программиста имеется мощный объектно-ориентированный язык, позволяющий легко оперировать данными благодаря непосредственно встроенным в язык операторам.
Язык программирования
Возможно, эти утверждения по поводу языка, предлагаемого программистам в Visual FoxPro, покажутся вам слишком общими. Что ж, позвольте проиллюстрировать их примером. В листинге приведен небольшой пример кода на Visual FoxPro. Думаю, даже не обладая глубокими познаниями в программировании и в работе с базами данных, вполне можно увидеть основные черты, присущие коду на этом языке — то есть, возможность работы с объектами и прозрачность работы с базами данных. Комментарии в коде помогут понять общую логику данного небольшого примера.
Стоит отметить, что поскольку в конечном счете среда Visual FoxPro предназначалась для создания приложений, с которыми должен вести активный диалог конечный пользователь, то в распоряжении разработчика, пользующегося ею, были средства создания полноценного графического пользовательского интерфейса. С учетом того, что Visual FoxPro была ориентирована, конечно же, на создание приложений под Windows, нет ничего удивительного в том, что корпорация Microsoft постаралась снабдить разработчика такими возможностями. Благодаря поддержке объектов в языке программирования Visual FoxPro работать с элементами пользовательского интерфейса достаточно просто. Об этом красноречиво свидетельствует листинг — весьма короткий, но, смею надеяться, достаточно познавательный.
Среда разработки
Как ни крути, но современное средство разработки приложений — это не только сам язык программирования, который, конечно, имеет первостепенную важность, но ещё и такая «мелочь», как среда разработки, с которой непосредственно взаимодействует программист. Поэтому поговорить о Visual FoxPro именно с этой позиции будет, я так полагаю, далеко не лишним.
Давно уже прошло то время, когда среды разработки от Microsoft подвергались повсеместной критике и вызывали желание закрыть их поскорее. Конечно, если сравнивать Visual FoxPro с более современными средами разработки, то можно найти ряд достаточно заметных для глаза несоответствий новейшим стандартам. Но если вспомнить о том, что речь идет о программном продукте, последний раз обновлявшемся несколько лет назад, то можно утверждать, что тогдашним стандартам Visual FoxPro соответствует на 100%.
На самом же деле, среда Visual FoxPro, как и другие продукты, названия которых начинаются с «Visual», весьма дружелюбна к разработчику. Подсветка синтаксиса кода, разнообразные подсказки по ходу написания кода, отладчик (какая же интегрированная среда разработки без него?), визуальный редактор форм, существенно упрощающий жизнь разработчика при проектировании интерфейса. В общем, как ни крути, среда разработки, созданная крупнейшим в мире разработчиком софта, так или иначе должна была соответствовать этому высокому званию.
Закат
Возвращаясь к вопросу о том, почему дальнейшая разработка Visual FoxPro была прекращена, стоит обратиться к первоисточнику — то есть, к объяснениям, которые дала по этому поводу сама корпорация Microsoft.
Во-первых, по словам представителей корпорации, дальнейшее развитие этого программного продукта не мыслилось без создания его 64-битной версии. Для этого пришлось бы практически полностью переписывать «ядро» Visual FoxPro, что не входило в планы Microsoft. Во-вторых, дальнейшее развитие Visual FoxPro — продукта, использовавшего собственный «движок» для работы с базами данных, — выглядело не слишком логично в свете достаточно солидных инвестиций в создание полноценной промышленной СУБД SQL Server, имеющей бесплатную версию SQL Server Express Edition, практически полностью покрывающую потребности большинства пользователей Visual FoxPro. Ну а в-третьих, популярность Visual FoxPro стабильно снижалась, и слухи о том, что это средство разработки планируется перестать совершенствовать, ходили ещё с начала 2000-х годов.
Visual FoxPro сегодня
Нельзя сказать, что с выходом последней версии земной путь Visual FoxPro оборвался. До сих пор по всему миру успешно работают десятки, если не сотни тысяч приложений, написанные с его использованием. Да и новые никто, в общем-то, не запрещает писать, потому что даже сегодня Visual FoxPro отлично подходит для решения многих задач.
Флешбэки FoxPro. Ломаем приложения на VFX и познаем секреты защиты ReFox

Язык программирования FoxPro применялся для разработки файл‑серверных реляционных баз данных и управления ими, хотя возможности языка позволяли найти ему значительно больше практических применений. Технология, появившаяся в 1989 году, базировалась на языке dBase, который использовался, в частности, в одноименных системах управления базами данных, из‑за чего между правообладателем, компанией Ashton-Tate, и Fox Software даже происходили судебные разбирательства. FoxPro быстро завоевал популярность на рынке СУБД и стал своеобразным стандартом разработки такого рода приложений. Были выпущены версии FoxPro для UNIX, MS-DOS и Macintosh.
В 1992 году, после долгих и мучительных переговоров, длившихся целых три года, компания Fox Software была приобретена корпорацией Microsoft, дальше технология FoxPro развивалась уже под крылом коммерсантов из Редмонда. Со временем была выпущена визуальная среда программирования Visual FoxPro, но технология понемногу утрачивала позиции в пользу более современных программных продуктов. Последняя версия FoxPro для Windows увидела свет в 1994 году, еще до официального релиза Windows 95. Однако с повсеместным переходом с 16- на 32-разрядную архитектуру основанные на FoxPro СУБД окончательно устарели и понемногу ушли в историю.
Сама Microsoft прекратила поддержку этой технологии больше пяти лет назад. Тем не менее, по слухам, где‑то в глубинах сибирской тайги еще встречаются написанные на FoxPro приложения, которые никто не собирается переписывать с нуля. Тем более исходники таких программ обычно утеряны, а последний программист, помнивший синтаксис FoxPro, давным‑давно умер от старости. Поэтому чисто теоретически может возникнуть необходимость реверсинга подобной программы с целью понять, как она вообще работает. Да и покопаться в такой древности — интересная задача сама по себе.
Казалось бы, ничего сложного в этом нет: среда представляет собой интерпретатор псевдокода, достаточно простой и примитивный, декомпиляторов для него было написано великое множество еще в девяностые годы прошлого века (автор одного из них — ваш покорный слуга ;)). С появлением VPF и ReFox вопрос совсем потерял актуальность — любой скомпилированный модуль можно реверсировать до состояния компилируемого проекта буквально в одно нажатие кнопки. Если бы не одно но.
Создатели ReFox не являются бескорыстными фанатами свободного программного обеспечения: они создали хороший коммерческий продукт, справедливо полагая, что для любой интеллектуальной собственности непременно отыщутся желающие ее спереть. И они выпустили свою собственную защиту компилируемых приложений, где можно выбрать аж целых пять типов протекции разной степени сложности. Разумеется, защищенную таким способом программу не декомпилировать ReFox’ом в один клик. Но на то мы и хакеры, дабы преодолевать подобные ограничения.
Не будем останавливаться на простых случаях, когда приложение представляет собой классический набор APP, FXP, FRM, FRX и прочего (хотя там тоже есть нюансы, но о них мы поговорим позже). Давай сразу перейдем к самому нехорошему варианту.
Итак, к нам попадает некий EXE-файл с хорошей компрессией. По косвенным признакам мы предполагаем, что он похож на защищенное VFP-приложение. Известные детекторы протекта нам не особо помогают, единственная зацепка — наличие оверлея с сигнатурой FEF2 ( Overlay : FEF2EE. Nothing discovered ). Вообще‑то, это сигнатура любого FoxPro-шного файла. Развивая данную идею, отрезаем оверлей и пробуем скормить его специально обученным утилитам.
В качестве маленького лирического отступления расскажу пару слов о том, чем можно пользоваться для вивисекции VFP. При всем многообразии написанного на эту тему софта, в конкурентной борьбе выжило всего несколько инструментов, достойных упоминания. В первую очередь это, конечно, упомянутый ReFox, которому по большей части и посвящена данная статья. Несмотря ни на что, проект поддерживается (во всяком случае, так заявлено на сайте разработчиков). Актуальная версия на данный момент — XII 12.99/16 от ноября 2019 года. Существует еще французский проект DVFP, но он давно не развивается, и у меня не получилось достичь при использовании этой тулзы сколь‑либо значимых результатов.
В сети хвалили китайский Unfoxall, но из‑за специфики китайского сообщества найти хотя бы работающую дему для сравнения лично у меня не получилось. Правда, я особо и не старался. Отдельного упоминания достоин проект Corso: он хоть и не является декомпилятором в полном смысле этого слова (собственно, сама декомпиляция псевдокода в программный текст сделана обращением к внешнему серверу и по факту не работает), однако содержит много полезных фич для разборки проекта, о которых будет сказано ниже.
В общем, вытащили мы оверлей с сигнатурой наружу, скормили по очереди всем возможным утилитам и. ничего! Тулзы говорят: мол, да, сигнатура есть, да, использован неизвестный энкриптор и компрессия, но не более того. Но мы настойчивые и сдаваться в самом начале пути не собираемся.
Загружаем приложение в отладчик. Ну, допустим, под рукой у нас оказался OllyDbg. Для начала просто запускаем программу и, когда загрузится основное окно, прерываемся в произвольный момент, радуясь отсутствию защиты от отладчика и всплытия. Еще один приятный момент — успешный поиск по памяти процесса текстовых строк (которые мы до этого тщетно пытались найти в закодированном EXE-модуле). Более того, вокруг найденных строк явно раскодированный псевдокод FoxPro (строки со счетчиком, имена процедур и так далее).
Однако сдампить его, как нам хотелось бы, одним куском нельзя — фрагменты кода нарезаны в блоки буквально «по живому»: начало текстовой строки находится в одном блоке, конец в другом. В общем, собирать все это сложно и грустно, тем более объем весьма большой. Попробуем зайти с другой стороны: поскольку код явно компрессированный, вероятно, в какой‑то момент он был распакован и уж потом нашинкован в лапшу. В окне Memory Map упорядочиваем блоки по размеру — и действительно, в самом начале списка огромный блок, которого не было в момент старта программы. Правда, в нем содержится, на первый взгляд, полная каша с огромной энтропией, но пробуем добраться до ее источников.
REFOX не принимает сдампленный APP
Перезапускаем программу и ставим бряк на какую‑нибудь функцию Kernel32 (скажем, WriteFile ). При каждом останове проверяем карту памяти — oops! — перелет, в очередной раз блок уже присутствует, причем снова заполнен кашей. Не мудрствуя лукаво, просто ставим Hardware Breakpoint на первый байт этого блока и перезапускаем программу. Нам снова повезло — этот нечестный трюк оказался эффективным: аппаратная точка останова срабатывает именно на записи в свеженький, заполненный нулями блок FoxPro-шной сигнатуры FEF2 . Запускаем выполнение до конца процедуры ( Execute till return ) и получаем на блюдечке блок, целиком заполненный расшифрованным и распакованным кодом, который можно дампить. Что мы и делаем.
Казалось бы, тут и сказке конец, а кто сдампил — молодец. Судя по сигнатуре и содержимому, мы получили чистый APP-модуль со снятой защитой, который можно смело исследовать. Но не тут‑то было. ReFox уже признает, что это VFP-приложение, даже версию видит, но декомпилировать и показывать структуру отказывается. Сам APP при запуске валит интерпретатор с какой‑то умопомрачительной ошибкой, другие декомпиляторы тоже на него ругаются, и только Corso видит список файлов, из которого собран данный APP. Выбор у нас небольшой, поэтому пробуем починить файл при помощи Corso.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее