Крутой протектор – не беда Ms-Rem (Ms-Rem@yandex.ru) Спецвыпуск: Хакер, номер #057, стр. 057-056-1 Технологии взлома сложных программных защит Как ломаются протекторы? Находим OEP, снимаем дамп, восстанавливаем импорт – все. И это почти стандарт. Конечно, ты уже хорошо освоил это и умеешь распаковывать всякие аспры с закрытыми глазами. Инструменты, которыми ты пользуешься - это SoftIce, IceExt, IDA, OllyDbg, PeTools, LordPE, ImpRec, PEiD. Для снятия большинства протекторов их вполне достаточно. Но каждый крэкер когда-нибудь сталкивается с такой защитой, перед которой все инструменты пасуют. В этой статье я постараюсь рассказать, почему происходит так и что делать в таком случае. Опишу трюки, которые выделывают в самых сложных защитах и, главное, объясню, как обходить их. Действительно крутых защит в мире немного. Это не ASProtect, не Armadillo, не SVKP, не EXE Stealth, не MoleBox и уж точно не какой-нибудь упаковщик или UPX Scrambler. Справляться со всем этим ты уже, несомненно, научился. Я говорю о защитах уровня hi-end, против которых бессильны стандартные методы и подходы. О StarForce, XtremeProtector (Themida), ExeCryptor и о тех, что привязывают софт к аппаратным ключам (Hasp Envelope, Guardant и т.п.). Об этих защитах и об используемых ими приемах и поговорим. Все протекторы можно разделить на два класса: это Ring3-протекторы, код которых исполняется только в третьем кольце защиты процессора, и Ring0-протекторы, которые имеют драйверы режима ядра, позволяющие влиять на работу ОС и многократно расширяющие список применяемых защитных приемов. Из hi-end протекторов единственным работающим в Ring3 остается ExeCryptor. Это делает его в некотором роде уникальным, но принципы его работы имеют массу неприятных недостатков. Из новых приемов защиты в hi-end протекторах можно выделить: влияние на работу операционной системы (на API-функции, в частности), применение псевдокода, исполняемого на виртуальных машинах, самомодифицирующийся и перекрывающийся код, недокументированные инструкции процессора (дизассемблирующиеся неправильно), масса размытого и мусорного кода, блокировка отладочных возможностей процессора. И всем этим арсенал hi-end протекторов, естественно, не исчерпывается. Теперь подробнее. Ring0-протекторы К этому классу относится большинство hi-end протекторов. Обычно ни отладчики, ни различные дамперы ничего не могут сделать с ними – в этом главная неприятность этих протекторов. Попробуем, например, сдампить с помощью PeTools программу, защищенную xprot'ом. Очень странно, но защищенный процесс отображается в PeTools как [System Idle Process], поэтому заглянуть внутрь и сдампить его у нас не получается. В OllyDbg при попытке приаттачиться к процессу мы не вообще обнаруживаем его в списке (OllyDbg, как и любые другие Ring3-отладчики, непригоден для анализа Ring0-протекторов, так что в дальнейшем мы будем использовать только SoftIce). Большинство начинающих крэкеров, видя такую ситуацию, сразу же бросают ломать программу, считая, что она безнадежна. Но мы не маленькие - нас такими трюками не испугаешь. Если немного подумать головой, то можно прийти к выводу, что, скорее всего, перехвачена одна из функций, имеющих дело с памятью процессов. Для дамперов очень важна работоспособность Native API функций ZwOpenProcess, ZwReadVirtualMemory и ZwWriteWirtualMemory, так как на них построено большинство высокоуровневых функций работы с процессами, в число которых входят OpenProcess, ReadProcessMemory, WriteProcessMemory и EnumProcessModules. Возможен, конечно, перехват этих функций в третьем кольце, но это просто глупо (так как его легко обойти), и я такого еще ни в одной защите не встречал, поэтому лезем сразу в ядро системы. Только для начала следует уяснить, как работает интерфейс системных вызовов Windows NT. |