У меня небольшие вопросы по работе программы. Допустим у процесса такие основные секции. 0400000 00001000 PE header Imag R RWE 00401000 000A0000 code Imag R RWE 004A1000 00001000 data,resourc Imag R RWE 004A2000 00001000 imports Imag R RWE 004A3000 0017A000 SFX Imag R RWE 1. Может ли быть, что в процессе выполнения секция code работает на VisualBasic а в секции SFX также выполняется код но на C++ и он свзязан с кодом из секции code через jump'ы и call'ы. Т.е. они в итоге связаны общей целью. 2. Может ли быть, что код в секции SFX очень долго выполняется специально для того, чтобы запутать реверсера. Как- тогда отловить ключевую проверку ? Т.е. идут как-бы циклы а впринципе нифига не происходит. Такое легко написать ? (я сам c++ знаю, но много не программирую) 3. Можно ли создать в памяти процесса вдобоавок например такую же структуру и там выполнять код. Я такое видел. С помощью каких функций это и как это примерно делатется подскажите, кто программирует хорошо. 4. Как вы можете объяснить такое. Захожу внуть функции из windows dll, дохожу до return Допустим потом в eax некое значение, которое должно проверяться. Но затем вскоре без всяких проверок идет вызов сообщения о том, что серийник неверный. Это происходит после функции __RaiseEvent. Реально никаких проверок. Может быть что-то параллельно проверяет ?
Robix 1. в принципе, почему бы и нет? 2. вполне может. 3. вопрос непонятен 4. возможно, не используется прямая проверка серийника или примененяется защита от отладки.
Спасибо за ответ. Т.е. как я понял один поток может выполнять проверку скажем буфера после одной функции в то время пока я трассирую в секции code и ищу ее проверку, а потом оказыается, что я дохожу до сообщения о неправильном серийнике, но непонимаю, где было сравнение, типа того ? Тогда наверное если данные были верные в буфере, поток как-то должен не допустить, чтобы я дошел до сообщения. Кстати, перед этим сообщением вызывались несколько раз GetLastError и еще одна функция. Можно впринципе на буфер ставить bp. По третьему пункту я имею ввиду, что в адресном пространстве процесса размещаются что-то типа dll, не поток, а именно модуль. Но самого dll нет отдельно, все в экзешнике. Мне вот интересно это как dll реализуется или как-то иначе.
Robix Генерация исключения вероятно, при которой кстате может сбрасываться TF, что и есть прекращение трассировки. Хотя тут чтото иное, просто вы пропустили код проверяющий значение или типо того.
Просто это для меня не крэкабельная цель. Прбовал по разному. Кто-то возможно бы и крякнул, но думаю, что очень мало кто.А не вкурсе случайно сколько в секунду процессор выполняет инстукций (допустим core)? А то я ради интереса решил протрассировать в лог в olly с момента когда в буфер кладется информация для проверки и до момента когда вылазит сообщение. Так вот дошел до полумиллиона инструкций (причем они делались в секции SFX. Я вообще восстановил IAT и ковенные переходы, но все равно с секции code есть вызовы в секцию SFX, может быть конечно это антидамп, но думаю вряд-ли)...думаю это что-то типа vm-протекта.) Ну и после того как лог стал вести 15 метров я прекратил.
Я тогда подготовлю PDF-ку и опишу все в деталях, что сделал и до чего дошел со скриншотами. А в личку скину линки до 1 мая. Был бы реально признателен за исследование и мнение, так как любопытство присутствует до сих пор )
Robix Это очень долго. Задержки для доставки сообщений на отладочный порт и их обработки замедляют обработку исключений в 700%1000 раз. Если без отладочного порта исключение может быть обработано несколько сот тысяч раз в секунду, то при отладочном порте всего несколько сотен.
Clerk Ломаем Themida Никто не видел подробного мануала по ее внутренностям ? (не способа распаковки, а структуры. Интересная штука )