Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #66, МАЙ 2006 г.

ОБФУСКАЦИЯ И ЕЕ ПРЕОДОЛЕНИЕ

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #066, стр. 066-008-9


[возвращаясь к разговору о trial-защитах] Мы имеем программу, которая запускается по меньшей мере один раз. Где один раз, там и два. Если пораскинуть мозгами, можно создать такие условия, которые позволят запускать программу неограниченное множество раз. Грубо говоря, мы как бы помещаем программу «под колпак» и подсовываем ей те данные, в которых она нуждается для продолжения своей жизнедеятельности.

Известно, что виртуальные машины типа VM Ware «автоматически» ломают trial-программы. Если программа ведет счетчик запусков или запоминает дату инсталляции где-то внутри компьютера, то после прекращения работы она устанавливается на «чистую» виртуальную машину и продолжает работать как ни в чем не бывало. Если дата окончания испытательного срока жестко прошита внутри программы, часы виртуальной машины переводятся «назад», а защита даже не подозревает, насколько жестоко ее провели :). Если программа «стучится» в интернет, пытаясь подтвердить правоверность своей работы, виртуальная машина просто «отсекается» от интернета. Виртуальные машины — это хорошо, только медленно, неудобно и громоздко.

виртуальный реестр и слежение за ним

app.exe|QueryValue|HKLM\Software\Licenses\{I5F218E3F24063708}|SUCCESS|0500000

app.exe|CreateKey |HKLM\Software\Licenses |SUCCESS|Key: 0xE132BB80

app.exe|SetValue |HKLM\Software\Licenses\{I5F218E3F24063708}|SUCCESS|06000000

app.exe|CreateKey |HKLM\Software\Licenses |SUCCESS|Key: 0xE132BB80

app.exe|SetValue |HKLM\Software\Licenses\{05F218E3F24063708}|SUCCESS|563EA80E0BA2A7A6

[можно поступить проще] Достаточно перехватить базовые API-функции для работы с системным временем, файловой системой, сетью и реестром, не забывая о функциях DeviceIoControl и подобных ей. Тогда можно организовать «легкую» и весьма быстродействующую виртуальную машину, подсовывающую защите отдельную файловую систему и реестр. Кстати, некоторые протекторы «гадят» в реестре, и замуровать их в застенках виртуальной машины сам Джа велел.

Конечно, это не сработает для тех защит, которые работают 30 минут, а затем требуют перезапуска программы, поскольку существует очень много способов отсчитать эти 30 минут даже без обращения к API. Виртуальная машина бессильна и в борьбе с надоедливыми NAG-скринами или баннерами, которые крутит бесплатная версия программы. Однако предложенная методика и не претендует на универсальность. Если можно сломать программу этим путем — хорошо, если нет — используй другие пути, атакуя ее по одному из сценариев, описанных выше.

[будущее обфускации] готовит хакерам совсем не радужные перспективы. С ходу можно назвать трансляторы С-кода в байт-код Машин Тьюринга, Стрелок Пирса, Сетей Петри и многих других примитивных машин. Производительности современных процессоров будет достаточно. В практическом плане это означает полный мрак стандартным методам анализа кода. Если теоретически возможно (но практически очень и очень сложно) вычистить мусор и удалить избыточность, внесенную «запутывателями», то «распутать» байт-код Сетей Петри уже невозможно. Этот процесс однонаправленный, и развернуть его на 180 градусов не сможет даже сам Джа. Вполне возможно написать анализатор байт-кода, повышающий уровень абстракции, вот только даже на таком уровне придется очень долго разбираться, что, как и куда.

Назад на стр. 066-008-8  Содержание  Вперед на стр. 066-008-10