Есть тест. Состоит из файла test.exe и 5-ти файлов test.fad (test1.fad, test2.fad...). *.fad-ы зашифрованы. При запуске test.exe он спрашивает какой из файлов *.fad загрузить. В каждом файле разное количество вопросов - от 127 до 212-ти. Запускается оболочка, где нужно ответить на вопросы. Если выбрать test1.fad, то в нем задается вопрос и перечислено несколько ответов. Нужно напротив правильного ответа поставить в боксе галочку. Если выбрать test2.fad, то в нем нужно набрать на клавиатуре вариант правильного ответа - "да", "нет", "никогда", "34 гайки" етс... В зависимости от количества правильных ответов он ставит оценку от 0 до 5-ти. Я так понимаю, что оценку он ставит только тогда, когда нажимаешь кнопку "Закончить Тест" (как брэйк поинт на это поставить?). Так как количество вопросов везде разное, то он понимает из fad-а какую оценку надо ставить (я так думаю). Очень бы хотелось, конечно, расшифровать fad-ы, но это надо искать алгоритм в test.exe, либо снимать дампы (а по какому адресу?). Наверняка там где-то валяются слова именно "34 гайки" (а не "35 гаек", т.е. именно правильный ответ, остальное игнорируется). Вообще надо снизить порог оценивания. Т.е., чтобы 5-ку или 4-ку он ставил при 3-х к примеру правильных ответах, дабы не отвечать на 212. Он не считает, на все вопросы даны ответы или нет. Если ответ не дан - считает, что неверный. Куда он заносит количество верных ответов? Как найти? Я в регистрах не увидел (правда трассировал "поверх"). SoftIce и Syser на моей машине (двуядерная) не работают. Пользую Олли Дебаг. Я там не понял как ставить брэйки. Хотя бы на занесение в регистр (скорее всего в EAX?) 7Fh (127). Есть брэйк на конкретные команды, я ставил на compare (cmp) с 7Fh - что-то не сработало. Может, ошибся - попробую еще. Есть IDA Pro v 4.xx. Кстати, как Иде сказать, чтобы файл запускался с параметрами? Вроде делал, а сейчас не могу найти. В общем, объясните, пожалуйста, как найти код, который ставит оценку и (или) найти в памяти правильные ответы.
олли должно с головой хватить. поставь бряки на функции работы с файлами, когда файл прочитается в память, ставь бряк на доступ к памяти, смотри что с ней делают(расшифровут напремер). когда появляются вопросы - скорее всего файл уже расшифрован.. насчет оценки - смотреть в каком виде ставицо оценка, если например это мессадж бокс, то смотреть где он вызываецо, смотреть где формируется строка с результатом... работа с олли детально рассмотрена в статьях на этом сайте.
- роюсь. - странно как-то. В графическом. Вроде. Сейчас запущу, убедюсь. Рисуется два столбика - один с правильными ответами, другой - не с правильными. Сверху - цыфири 100 правильных (к примеру) 27 - нет. И надпись - "Вы ответили на 4 балла". Т.е. где-то еще функции рисования графиков должны быть?
можешь скинуть test.exe ? Подобная программа использвалась в Хмельницком, для тестирования программистов. Все файлы с тестами были запакованы ZLib'ом. а сама тест.ехе был написан на делфи. он или нет ?
- написан на дельфях. Может оно и есть, либо на базе ее. Скинуть был бы очень рад, но не могу. Я бы с удовольствием здесь выложил бы листинг - он не фиг какой большой. И получил бы конкретные рекомендации где и как нужно подправить. Мне очень жаль, что не могу.
Так вот, нашел я в памяти где она берет ответы. Прямо рядом с вопросом "Сколько гаек" через пару байт ответ - 34. В большинстве случаев. Но не всегда. Бывает так, что рядом просто набор мусора какой-то. Это Олли так интерпретирует? Ведь не может она некоторые части блока перевести правильно, а некоторые - нет? Потом, в тех местах, где надо ставить галочки в боксах - там как определить, что галку в нужное место воткнул? Ставил брейки на обращение к данному участку памяти - что-то не сработали.
AndRay Скорее всего, это бинарные данные, а не мусор. Без знания того, как эти данные устроены, определять места, где галки воткнуть можно только чисто экспериментально - далеко не уедешь. ЗЫ Я одного не пойму, почему ты файл слить не можешь? Если боишься засветиться, дык можешь его в IDA дизассемблить и слить *.idb.
Ситуация такая, что ковырять я его могу сколько угодно, но вынести с предприятия - никак. Если бы я здесь его выложил, ты бы в 6 секунд мне подсказал, что нужно сделать. Т.е. я бы и рад, но не могу. Кстати, пытался сделать так, чтобы он оценку нужную ставил - там несколько уровней проверок. Ставить то он ставит, но, например, при выходе из проги он вдруг вываливает окно с реальным количеством отвеченных вопросов и с оценкой. Я на три таких фишки наткнулся, махнул рукой, решил, что проще будет ответы расшифровать. Или подскажите, как в корень добраться. Ведь он куда-то в ячейки записывает количество правильно отвеченных. Я думал, что именно в такой-то момент и именно туда-то - ставлю себе пятерку (в EAX), он говорит, что согласен и тоже ставит 5-ку, но при закрытии радостно кукарекает, что я пытался его надуть. Т.е. получается, что он пересчитывает количество правильных/неправильных ответов заново? Причем, я могу убрать это окно, которое он вытаскивает при закрытии, так он другое выводит (с другим текстом), когда например щелкаешь правой кнопкой мыши на оценке. Ну и так далее.
AndRay Носители отбирают на входе, а на выходе обыскивают с пристрастием и сканируют? Если у вас стоят бездисковые машины, я конечно понимаю, что никак, но ты же в Инет выходишь и в открытую сигналишь о своих попытках. Ладно, не можешь, так не можешь, но так тебе вряд-ли кто поможет чем-нибудь.
Нашел АртМаней три адреса в памяти, которые изменяются, когда я ставлю галочку. Если не стоит - то 0. Если ставлю - разные значения, но всегда одни и те же. Допустим 22, 335, 1172 в десятич. (не помню точно). Что правильный ответ, что неправильный - одни и те же цифры. И что с ними делать? Кстати, я АртМаней и определил адрес блока, в котором ответы хранятся. По стрингу.
Когда я даю ответ или ставлю галочку, то эта галочка остается в определенном месте памяти. Программа все время пересчитывает эти галочки, поэтому она сбрасывает мои тупо заведенные в EAX количество правильных ответов. Нужно найти алгоритм расчета и вырубить его, да? Либо найти все адреса, по которым лежат правильные ответы (она скорее всего в стеке их хранит?) и как-то на лету их модифицировать. Так? Как это сделать? Куда брейки ставить? PS Хозяин проги прекрасно знает, что я ее ковыряю. Ему на это плевать глубоко. А вот если я листинг или ехе-шник где-нибудь выложу - он расстроится. Я не хочу никого расстраивать. Это я к тому:
AndRay Ну ковыряйся потихоньку. Попробуй все-таки реверснуть прогу - узнаешь, где хранятся интересующие тебя данные, тогда сможешь понять, как заставить ее работать в нужном режиме.Всего-то нужно вытащить обработку события на установку галочки. ЗЫ Вот тебе рекомендации: 1. Бери DeDe последней версии и загрузи в него свою программу 2. Получишь перечень форм, методов, связанных с контролами - ищи среди них те, которые связаны с выбором ответов. 3. Исепользуй IDA для дизассемблирования программы. 4. Комментишь в IDA все что только можно (на основе информации из DeDe) - так последовательными итерациями ты сузишь круг поиска.
- это как? - я думал, что это диз. Java. Ладно, попробую. Есть у меня последняя. - то же, что и Олли показывает. Только по русски не понимает. Русские слова не показывает. У меня версия 4.9 Про что-ли. Спасибо. Буду попробовать. Я с 98-го года не ковырял программы. Многое уже выветрилось из головы.
AndRay Т.е. понять алгоритм работы самой программы или интересующих тебя кусков кода (и воспроизвести эти алгоритмы на каком-нибудь языке высокого уровня). Твоя задача заключается в том, чтобы определить, как устроены данные в твоей программе (где хранятся вопросы, варианты ответов) и как происходит обработка этих данных для вынесения решения. Я бы на твоем месте начал с определения процедуры, которая показывает вопрос, потом нашел бы обработку событий от мыши (выставление галочки), ну и потом по уже определенным данным определил бы, где находится код для их обработки.
AndRay Дык я тебе и посоветовал воспользоваться DeDe - он и Билдер и Дельфи понимает. И по-поводу кириллицы в IDA: http://www.wasm.ru/forum/viewtopic.php?id=14928