Недавно ко мне обратился один человек за помощью, попросил помочь достать базу вопросов из опросника на компьютере, локальный экзешник написанный на делфи кажись. В свое время у нас в институте были похожие тесты, которые студенты или даже сами препода писали так как умели и на чем умели, и в то время популярен был Делфи. Естественно учить все это никто не хотел и пытались выкрутиться кто как может, но в основном конечно прорешивали вопросы (хорошо что удалось стырить с кафедры все тесты). Некоторые пытались обмануть выдавая окно генератора оценок, похожее на то что выдается вконце теста, но такой хакинг такое себе...
В данном случае зацепиться не за что было, открыть базу данных ни Excel ни SQLiteStudio не могли, в WinHex - просто тупо двоичные данные - судя по всему база не стандартная (мое мнение, но конечно же могу ошибаться) да еще и запаролена и зашифрована. Открыв exe-шник в WinHEX нашел строку подключения для стандартных баз данных, но она, как я и говорил не могла открыться ничем.
Но зато ковыряя Винхекс нашел функцию считывания оперативной памяти - я считал дамп запущенной проги, и внезапно внутри обнаружил среди хреновой горы всяких бинарных данных вполне себе читаемый текст на русском языке, который представлял собой вопросы, ответы и всякую служебную информацию
Проблема была в том что вопросы, а тем более ответы были абсолютно хаотично разбросаны по всему файлу, вычленить даже вопросы было не так-то просто. И тут внезапно мне пришла идея что с помощью регулярных выражений в блокноте получится что-то да найти, и у меня это впринципе получилось:
Сама регулярка выглядит таким образом:
([А-Я][А-Яа-я ,№.«»;0-9\(\)\-\?]+ [А-Яа-я ,№.«»0-9;\(\)\-\?]+[:|\?])
Это конечный вариант, до этого было много экспериментов. Смысл ее в том что вопросы это написанные русскими символами слова, с определенной структурой построения. Начинаются с заглавной буквы, предложения могут содержать большие и маленькие буквы, символы, точки, запятые, кавычки, пробелы, цифры, скобки - короче полный набор, и как минимум 2 слова разделенных пробелом, именно поэтому 2 одинаковых конструкции. Все это заканчивается обязательно двоеточием, хотя и был один вопрос с вопросом на конце, поэтому заканчивается регулярка конструкцией ИЛИ.
Первоначально я на этом уже умыл руки ,типа дальше сами ручками ищите вопросы и копируйте их, но позднее понял что можно написать простенькую прогу, которая бы все найденные предложения по шаблону регулярных выражений перенесла бы в отдельный текстовый файл. И вот что получилось: https://github.com/boolkin/DocxTextFinder/blob/master/regxSearch/regxSearch.cs
там конечно тоже пришлось помучиться, и самое главное документ перед тем как скормить желательно сохранить в виндовом блокноте. После этого кодировка стала понятной и файл был прочитан. Список сформирован (кстати с кучей мусора, но в таком виде его проще было вычленить), а количество вопросов в моем файле почти равно тому что предлагают тесты - можно сказать уже неплохо). Вероятно вручную можно больше наскрести, так как вполне возможно что в опросы затесались латинские буквы, и тогда может часть вопросов не попасть в базу.
Комментариев нет:
Отправить комментарий