книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 57_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
||||
|
|
X |
|
|
|
|
|
||||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
||
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
89 |
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
A N T I ) C R A C K I N G |
|
Помимо знаменитого AsProtect, Алексей Солодовников |
|
||
( |
|||
написал также упаковщик AsPack |
|||
|
|
||
|
|
|
|
|
|
|
|
|
2.3. Предоставление служебных |
|
Dotfix.net – настоятельно рекомендуется к прочтению |
|
|||||
функций для проверки регистрацион- |
|
|||||
ми, обычно реверс-инженерами) авто- |
действительно мощную систему за- |
|
||||
ных ключей (в данном протекторе ис- |
|
|||||
распаковщики, которые исполняют |
щиты. Основные преимущества этого |
пользуется плохой алгоритм - были |
|
|||
свои обязанности пусть и хуже, чем |
протектора: |
найдены "дыры", а после этого были |
|
|||
распаковщики от авторов (например, |
1.1. Защита кода программы с по- |
"закейгенены" приложения, защи- |
|
|||
недавно мной был написан распаков- |
мощью очень стойких криптоалго- |
щенные Armadillo и использующие |
|
|||
щик для UPX), но распаковывают |
ритмов. |
функции проверки регистрационных |
|
|||
файлы, после чего можно начать ис- |
1.2. Защита таблицы импорта (в |
ключей) и многих других. |
|
|||
следовать код с целью его "заимство- |
последних версиях протектора защи- |
2.4. Упаковка файла. |
|
|||
вания" или просто взлома программы. |
та позаимствована из Obsidium). |
2.5. Применение технологии |
|
|||
Опытные люди распаковывают фай- |
1.3. Предоставление служебных |
CopyMem II, которая ни за что не поз- |
|
|||
лы "руками", берется отладчик, дам- |
функций для проверки регистрацион- |
волит реверс-инженеру получить |
|
|||
пер процессов и программа для вос- |
ных ключей и для многого другого. |
весь код программы (сразу :), а только |
|
|||
становления импорта, после чего все |
|
1.4. Использование виртуальной |
если докопировать недостающие кус- |
|
||
"смешивается в нужных пропорциях". |
машины, при помощи которой защи- |
ки программы по мере надобности. |
|
|||
При ручной распаковке во время за- |
щается главная ветвь кода программы. |
2.6. Применение технологии |
|
|||
пуска любое приложение оказывает- |
1.5. Упаковка файла. |
Nanomites. При защите эта опция яв- |
|
|||
ся распакованным (когда этот код уже |
|
1.6. Хорошая техническая под- |
ляется самой мощной. Очень немно- |
|
||
распакован и способен нормально ра- |
держка. |
гие реверс-инженеры, умеющие сни- |
|
|||
ботать, отслеживается передача уп- |
|
1.7. Сильная интеграция в код |
мать Armadillo почти со всеми опция- |
|
||
равления из кода протектора/упаков- |
программы, очень серьезно мешаю- |
ми, умеют снимать с этой опцией. Эта |
|
|||
щика в код оригинальной программы, |
щая при распаковке – приходится |
опция затирает все переходы в прог- |
|
|||
после чего весь файл скидывается из |
изощряться любыми способами и вос- |
рамме (пределы помечены програм- |
|
|||
памяти на жесткий диск и правится). |
станавливать недостающий код. |
мистом), заменяя из специальной от- |
|
|||
|
|
|
|
|
ладочной командой int 3, и при попыт- |
|
ДЛЯ ТЕХ, КТО МОЖЕТ |
|
2. Armadillo – довольно старый про- |
ке их выполнения защита вставляет |
|
||
|
|
Люди, имеющие деньги, защища- |
тектор, содержащий некоторые рево- |
их обратно (затирая, когда нужда в |
|
|
|
|
|
||||
|
|
|
||||
ют свои программы с помощью друго- |
|
люционные технологии. Его основные |
них пропадает). Снятие этой защиты |
|
||
го подкласса упаковщиков – протекто- |
преимущества: |
со всеми опциями занимает примерно |
|
|||
ров. Эти защитные системы специали- |
2.1. Защита кода программы с при- |
îäèí-äâà ÷àñà… Armadillo – ìîÿ ëþáè- |
|
|||
зируются на защите, а не на упаковке |
менением очень стойких криптоалго- |
мая защита. |
|
|||
(хотя тоже упаковывают). Многие |
ритмов. |
|
|
|||
программисты считают, что защитные |
2.2. Защита таблицы импорта. |
3. ExeCryptor 2 – по словам авторов, |
|
|||
механизмы, написанные реверс-инже- |
|
|
данная защита неломаема :). Как на- |
|
||
нерами (пусть даже бывшими) прине- |
|
|
|
|
||
сут только зло и что реверс-инжене- |
|
|
|
|
||
ры будут их ломать сами… Это боль- |
|
|
|
|
||
шая ошибка: тот, кто занимался или |
|
|
|
|
||
занимается реверсингом, лучше всех |
|
|
|
|
||
знают про всевозможные уловки, сек- |
|
|
|
|
||
реты и многое другое, что помогает |
|
|
|
|
||
создать действительно надежные за- |
|
|
|
|
||
щитные системы. А взлом программ, |
|
|
|
|
||
упакованных своим же протектором – |
|
|
|
|
||
неблагодарное дело, из-за которого |
|
|
|
|
||
популярность протектора может |
|
|
|
|
||
упасть навсегда. Надеюсь, эта статья |
|
|
|
|
||
развеет такие заблуждения. Какие же |
|
|
|
|
||
защитные системы распространены |
|
|
|
|
||
шире и популярнее остальных? |
|
|
|
|
||
1. AsProtect – протектор, написан- |
|
|
|
|
||
ный отечественным программистом – |
|
|
|
|
||
Алексеем Солодовниковым (когда-то |
|
|
|
|
||
занимался взломом). Он создал |
|
Создатели ExeCryptor уверены, что взломать их защиту невозможно |
» |
|||
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|||
|
|
|
C |
|
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
|
NOW! |
o |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
BUY |
|
|
90 |
|
ЗАЩИТА |
|
НАВЕСНАЯЗАЩИТА |
|
|
|
|
|
|
|
BUY |
|
|
||||||||||||||||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w Click |
to |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
ивно… Как говорил ORC, все, что мож- |
|
СКРЭМБЛЕР UPX СВОИМИ РУКАМИ |
|
w |
|
|
|
|
|
|
|
|
o |
|
|||||||||||||||
|
. |
df |
|
|
|
n |
e |
|
|
|
. |
df |
|
|
n |
e |
|
|||||||||||||||||||||||||
|
|
p |
|
|
|
|
.c |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
.c |
|
|||||||||||
|
|
|
-xcha |
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-x cha |
g |
|
|||||||||||||
|
|
|
|
|
|
но запустить, можно и взломать. Эти |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
G |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
слова подтверждаются и в данном |
|
Одной из функций PeStubOEP является скрэмблер сигнатур раз- |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
N |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
случае, о чем мне недавно заявил |
|
личных упаковщиков. Попробуем написать скрэмблер UPX. Если |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
I |
|
|
|
|
|
|
|
|
|
очень влиятельный человек. Взлом |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
K |
|
|
|
|
|
|
|
|
|
этой защиты является очень затрат- |
|
кто-то забыл, то напомню, что если запустить UPX с ключом -d, он |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
распакует упакованный файл, но только в случае если сигнатура |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
C |
|
|
|
|
|
|
|
|
|
ным (люди, написавшие инструмент |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
A |
|
|
|
|
|
|
|
|
|
для снятия защиты, просят за него от |
|
не повреждена. Также мы научимся изменять имена секций, так как |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
R |
|
|
|
|
|
|
|
|
|
$1000). Однако на эти деньги можно |
|
не очень-то весело видеть подобное: |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
получить неплохую гарантию того, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
что программа не будет взломана. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
I ) |
|
|
|
|
|
|
|
|
|
|
.UPX0 |
сюда UPX кладет информацию из .tls |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
Преимущества: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
T |
|
|
|
|
|
|
|
|
|
3.1. Применение виртуальной |
|
.UPX1 |
здесь располагается весь упакованный код и данные программы |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
N |
|
|
|
|
|
|
|
|
|
машины. |
|
|
|
|
|
|
|
|
|
|
|
|
|
.rsrc |
ресурсы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
3.2. Обработка кода метаморфным |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
движком (это главное преимущество). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
( |
|
|
|
|
|
|
|
|
|
|
Нам понадобится только информация о расположении PE-заголов- |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
3.3. Защита кода программы с при- |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
менением очень стойких криптоалго- |
|
ка и адрес начала секций. Так вот, несмотря на то, что многие лю- |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ритмов. |
|
|
|
|
|
|
|
|
|
|
|
|
|
бят ломать DOS-заголовок, по смещению &H3C всегда находится |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
3.4. Защита таблицы импорта. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
адрес на начало PE-заголовка (его там нет только если программа |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
4. Obsidium – относительно новый |
|
была написана под DOS). Теперь, когда уже найден адрес начала |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
протектор, средний по стойкости, не |
|
PE-заголовка, найдем адрес начала описания секций. Как ни стран- |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
имеет особых возможностей для на- |
|
íî, |
описание |
секций всегда начинается со |
смещения |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
дежной защиты. Преимущества: |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(PeOffset+&HF9), где PeOffset - адрес начала PE-заголовка. Оста- |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
4.1. Хорошая защита импорта. Эта |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
лось только определить число секций, а оно хранится по смещению |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
технология оригинальна: реверс-ин- |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
женеру, не знакомому ни с чем подоб- |
|
(PeOffset+6) в основном PE-заголовке. Теперь, когда все найдено, |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ным, будет трудно разобраться с за- |
|
не мешало бы разобраться со структурой описания секций. Приве- |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
щитой. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ду ее вариант для VB: |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
4.2. Защита кода программы с при- |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
менением очень стойких криптоалго- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ритмов. |
|
|
|
|
|
|
|
|
|
|
|
|
|
Public Type pe_section_header |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
4.3. Упаковка файла. |
|
|
section_name As String * 8 ' Имя секции [8 байт] |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
4.4. Предоставление служебных |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
section_size As Long |
' Размер секции в памяти |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
функций для проверки регистрацион- |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
section_rva As Long |
' Адрес загрузки секции в памяти |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ных ключей и многое другое. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
5. VmProtect – защита, основанная |
|
section_size2 As Long |
' Размер секции в файле |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
section_start As Long |
' Смещение начала секции в файле |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
на превращении нужного кода в псев- |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reserved As String * 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
докод (код, который интерпретируется |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
section_flags As Long |
' Флаги секции |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
виртуальной машиной), который за- |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
тем интерпретируется мощной вирту- |
|
End Type |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
альной машиной. Достоинства: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
5.1. Применение мощной виртуаль- |
|
Структуры, подобные приведенной выше, идут одна за другой, а их |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ной машины, для которой очень слож- |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
количество равно числу секций в файле. |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
но написать декомпилятор (преобра- |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
зователь из псевдокода в стандарт- |
|
Нижеприведенная структура идентична для UPX 1.24 и 1.90, а так- |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ный машинный код) псевдокода. |
|
же вряд ли поменяется в следующих версиях упаковщика, и я ду- |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
5.2. Защита бесплатна. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
маю, что можно смело пользоваться данной структурой. Так вот, |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сама структура содержит в себе поля, необходимые для нормаль- |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ной распаковки файлов UPX'ом и всегда начинается с "UPX!". Этим |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
мы и воспользуемся для нахождения адреса начала сигнатуры. |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Public Type UPX_STRUCT |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxMagic As String * 4 |
' Символы "UPX!" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxVersion As Byte |
' Версия UPX'а (например: 0C значит 1.24, 0D - 1.90) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxFormat As Byte |
' Определяет формат файла (PE, ELF, DOS и т.д.) PE - 09 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxMethod As Byte |
' Метод сжатия (если NRV или UCL, то 02) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxLevel As Byte |
' Степень сжатия (от 0 до 10) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxU_adler As Long |
' CRC части экзешника в распакованном виде |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxC_adler As Long |
' CRC части экзешника в запакованном виде |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxU_len As Long |
' Размер части экзешника в распакованном виде |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxC_len As Long |
' Размер части экзешника в запакованном виде |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxU_file_size As Long |
' Размер распакованного экзешника. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxFilter As Integer |
' Метод распаковки |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
upxCRC As Byte |
' CRC сигнатуры |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Среди клиентов StarForce числятся такие компании, как 1С и |
|
End Type |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
"МедиаХауз" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ХАКЕРСПЕЦ 08(57) 2005

О! Это целое искусство. Существует множество аспектов, от которых зависит качество защиты приложения.
И вот мы добрались до долгожданных скрэмблеров. Я уже объяснил, что это такое и зачем оно нужно, но не сказал, что существуют разные скрэмблеры: одни просто исправляют
Итак, dongle (ключ), компонента многих защит, используется, как
Прежде чем приступить к рассказу о внутренностях ключей защиты, разрешим вопрос о том, что именно подталкивает разработчиков защит к их выбору? Основная причина оче- видна – простота. У разработчика появляется возможность не писать защиту самостоятельно, не будучи профессионалом в этой области, а просто купить "коробку", которая вроде бы несложным образом подключится к его программе и защитит это детище. За ведущими разработчиками ключей стоит специализация в области защиты и отличная репутация как результат хорошей маркетинговой политики. Именно по этим причинам рынок аппаратных ключей защиты расширяется не по дням, а по часам. Разработ-
Перейдем к построению общей схемы алгоритмов и компонент защищенного программного продукта. Нач- нем с защищаемого кода. Пусть имеется "нетронутый" защитой build release разработчика. Назовем его prog.exe. Его необходимо защитить аппаратным ключом таким образом, чтобы было очень сложно (а лучше невозможно) использовать функциональность prog.exe в отсутствие клю-
Перейдем к следующему критич- ному участку защиты - обмену данными между prog.exe и драйвером защиты driver.sys. Почему обмен данными не может быть выполнен напрямую с ключом из prog.exe? По многим при- чинам, например по такой: времена DOS давно прошли, и выполнять машинные команды для общения с устройствами (ins/outs) из кода уровня приложения просто невозможно. К тому же в более-менее серьезной операционной системе весь обмен с внешними устройствами реализуется только в драйверах (уровни абстракции), и она не только запрещает обращение к устройствам из user-кода (NT-системы), но и часто предоставляет весьма удобный механизм перехвата таких обращений из user-кода (9xсистемы), что может существенно облегчить работу реверсера.
Перейдем на следующий уровень комплекса защиты и рассмотрим, что происходит в драйвере защиты. Для начала необходимо определить их наличие. Наверное, из стыда защитникам хотелось бы скрыть от пользователя наличие драйвера, но система им этого особо не позволяет, поэтому меню "Установка драйвера защиты" действительно означает то, что в нем указано. Список драйверов можно посмотреть в стандартных настройках Win, а детально рассмотреть его, например, при помощи команды "driver <имя_драйвера>" в SoftIce.