понедельник, 3 апреля 2023 г.

Еще немного "взломов" тестов regxSearch

 Недавно ко мне обратился один человек за помощью, попросил помочь достать базу вопросов из опросника на компьютере, локальный экзешник написанный на делфи кажись. В свое время у нас в институте были похожие тесты, которые студенты или даже сами препода писали так как умели и на чем умели, и в то время популярен был Делфи. Естественно учить все это никто не хотел и пытались выкрутиться кто как может, но в основном конечно прорешивали вопросы (хорошо что удалось стырить с кафедры все тесты). Некоторые пытались обмануть выдавая окно генератора оценок, похожее на то что выдается вконце теста, но такой хакинг такое себе...

В данном случае зацепиться не за что было, открыть базу данных ни Excel ни SQLiteStudio не могли, в WinHex - просто тупо двоичные данные - судя по всему база не стандартная (мое мнение, но конечно же могу ошибаться) да еще и запаролена и зашифрована. Открыв exe-шник в WinHEX нашел строку подключения для стандартных баз данных, но она, как я и говорил не могла открыться ничем.

Но зато ковыряя Винхекс нашел функцию считывания оперативной памяти - я считал дамп запущенной проги, и внезапно внутри обнаружил среди хреновой горы всяких бинарных данных вполне себе читаемый текст на русском языке, который представлял собой вопросы, ответы и всякую служебную информацию

Проблема была в том что вопросы, а тем более ответы были абсолютно хаотично разбросаны по всему файлу, вычленить даже вопросы было не так-то просто. И тут внезапно мне пришла идея что с помощью регулярных выражений в блокноте получится что-то да найти, и у меня это впринципе получилось:

Сама регулярка выглядит таким образом:

([А-Я][А-Яа-я ,№.«»;0-9\(\)\-\?]+ [А-Яа-я ,№.«»0-9;\(\)\-\?]+[:|\?])

Это конечный вариант, до этого было много экспериментов. Смысл ее в том что вопросы это написанные русскими символами слова, с определенной структурой построения. Начинаются с заглавной буквы, предложения могут содержать большие и маленькие буквы, символы, точки, запятые, кавычки, пробелы, цифры, скобки - короче полный набор, и как минимум 2 слова разделенных пробелом, именно поэтому 2 одинаковых конструкции. Все это заканчивается обязательно двоеточием, хотя и был один вопрос с вопросом на конце, поэтому заканчивается регулярка конструкцией ИЛИ.

Первоначально я на этом уже умыл руки ,типа дальше сами ручками ищите вопросы и копируйте их, но позднее понял что можно написать простенькую прогу, которая бы все найденные предложения по шаблону регулярных выражений перенесла бы в отдельный текстовый файл. И вот что получилось: https://github.com/boolkin/DocxTextFinder/blob/master/regxSearch/regxSearch.cs

там конечно тоже пришлось помучиться, и самое главное документ перед тем как скормить желательно сохранить в виндовом блокноте. После этого кодировка стала понятной и файл был прочитан. Список сформирован (кстати с кучей мусора, но в таком виде его проще было вычленить), а количество вопросов в моем файле почти равно тому что предлагают тесты - можно сказать уже неплохо). Вероятно вручную можно больше наскрести, так как вполне возможно что в опросы затесались латинские буквы, и тогда может часть вопросов не попасть в базу.

Комментариев нет:

Отправить комментарий