Weitere ähnliche Inhalte Ähnlich wie распаковка Asprotect (20) распаковка Asprotect1. сп ковк прогр мм,
з щищенных Asprotect
© <2009> < екрылов лентин>
Note:
To change the product logo for your own print manual or
PDF, click "Tools > Manual Designer" and modify the print
manual template.
2. Title page 1
Use this page to introduce the product
by vnekrilov
This is "Title Page 1" - you may use this page to introduce
your product, show title, author, copyright, company logos,
etc.
This page intentionally starts on an odd page, so that it is on
the right half of an open book from the readers point of view.
This is the reason why the previous page was blank (the
previous page is the back side of the cover)
3. сп ковк прогр мм, з щищенных
Asprotect
© <2009> < екрылов лентин>
All rights reserved. No parts of this work may be reproduced in any form or by any means - graphic, electronic, or
mechanical, including photocopying, recording, taping, or information storage and retrieval systems - without the
written permission of the publisher.
Products that are referred to in this document may be either trademarks and/or registered trademarks of the
respective owners. The publisher and the author make no claim to these trademarks.
While every precaution has been taken in the preparation of this document, the publisher and the author assume no
responsibility for errors or omissions, or for damages resulting from the use of information contained in this
document or from the use of programs and source code that may accompany it. In no event shall the publisher and
the author be liable for any loss of profit or any other commercial damage caused or alleged to have been caused
directly or indirectly by this document.
Printed: ек брь 2009 in (whereever you are located)
Special thanks to:
Publisher
All the people who contributed to this document, to mum and dad
...enter name...
and grandpa, to my sisters and brothers and mothers in law, to our
Managing Editor secretary Kathrin, to the graphic artist who created this great product
logo on the cover page (sorry, don't remember your name at the
...enter name... moment but you did a great work), to the pizza service down the
street (your daily Capricciosas saved our lives), to the copy shop
Technical Editors where this document will be duplicated, and and and...
...enter name...
...enter name... Last not least, we want to thank EC Software who wrote this great
help tool called HELP & MANUAL which printed this document.
Cover Designer
...enter name...
Team Coordinator
...enter name...
Production
...enter name...
4. 4 сп ковк прогр мм, з щищенных Asprotect
Table of Contents
Foreword 7
Part I ведение 9
Part II сп ковк прогр мм, з щищенных
Asprotect 12
1 пределение версии протектор и компилятор
................................................................................................................................... 12
2 онфигур ция отл дчик и пл гинов
................................................................................................................................... 14
3 оиск OEP (SBOEP)
................................................................................................................................... 16
4 осст новление т блицы INIT
................................................................................................................................... 21
5 осст новление т блицы IAT
................................................................................................................................... 28
6 осст новление вызовов эмулируемых APIs
................................................................................................................................... 38
7 муляция APIs Asprotect
................................................................................................................................... 43
муляция APIs Asprotect в ASProtect с коротким ключом (версии 2.xx SKE)
.......................................................................................................................................................... 43
муляция APIs Asprotect в ASProtect с длинным ключом (версии 1.xx)
.......................................................................................................................................................... 47
муляция APIs Asprotect, вызыв емых из Asprotect.dll
.......................................................................................................................................................... 53
муляция APIs Asprotect, вызыв емых из код прогр ммы
.......................................................................................................................................................... 56
8 стр нение проверок целостности код (CRC) в
р сп ...................................................................................................................................
ков нной прогр мме 56
9 осст новление подпрогр мм с эмулиров нными
инструкциями
................................................................................................................................... 58
олучение ф.......................................................................................................................................................... 61
йл Asprotect.dll из р сп ковыв емой прогр ммы
олучение т .......................................................................................................................................................... 61
блицы соответствия первого б йт опкод эмулиров нных инструкций для р сп ковыв емой про
олучение т .......................................................................................................................................................... 71 сп ковыв ем
блицы соответствия з головк м ссив д нных для эмулиров нных инструкций в р
олучение т .......................................................................................................................................................... 74
блицы р сположения д нных в м ссиве д нных для эмулиров нных инструкций
олучение т .......................................................................................................................................................... 84
блицы р сположения д нных в м ссиве для эмулиров нных инструкций, выполняемых во второ
олучение т .......................................................................................................................................................... 87
блицы идентифик торов эмулиров нных инструкций, выполняемых во второй VM
орректировк код VM для восст новления эмулиров нных инструкций в коде прогр ммы
.......................................................................................................................................................... 88
осст новление подпрогр мм с эмулиров нными инструкциями
.......................................................................................................................................................... 89
10 осст новление секции импорт в р сп ковыв емой
прогр мме
................................................................................................................................... 91
осст новление секции импорт с помощью скрипт “ осст новление секции импорт (.idata) в р сп ков нны
.......................................................................................................................................................... 91
осст новление секции импорт с помощью утилиты Import REConstructor
.......................................................................................................................................................... 98
11 орьб с переносом код в специ льные обл сти п мяти
................................................................................................................................... 101
оиск подпрогр ммы дрес ции прыжков в обл сти п мяти Asprotect и созд ние т блицы прыжков
.......................................................................................................................................................... 102
оиск дресов м ссивов д нных с эмулиров нными инструкциями в обл стях п мяти Asprotect с укр денным
.......................................................................................................................................................... 104
бъединение всех обл стей со Stolen Code в одну секцию ф йл
.......................................................................................................................................................... 109
12 борк р сп ков нного ф йл
................................................................................................................................... 111
одготовк ф йл dumped.exe к прикручив нию секции с укр денным кодом
.......................................................................................................................................................... 112
рикручив ние секции с укр денным кодом к ф йлу dumped.exe
.......................................................................................................................................................... 115
осст новление секции ресурсов .rsrc
.......................................................................................................................................................... 116
ере дрес ция прыжков из код прогр ммы н секцию с укр денным кодом .aspr
.......................................................................................................................................................... 118
стр нение .......................................................................................................................................................... 119
проверок целостности код второго тип
13 чистк обл стей со Stolen Code от мусорного код
................................................................................................................................... 121
© <2009> < екрылов лентин>
5. Contents 5
Part III р ктик р сп ковки прогр мм 125
1 сп ковк прогр ммы Sticky Password v4.0.0.148
................................................................................................................................... 125
пределение протектор и язык прогр ммиров ния
.......................................................................................................................................................... 125
пределение опций з щиты прогр ммы
.......................................................................................................................................................... 126
осст новление т блицы IAT и вызовов эмулиров нных APIs
.......................................................................................................................................................... 127
стр нение .......................................................................................................................................................... 128
проверок целостности код CRC) прогр ммы
муляция APIs Asprotect, вызыв емых из код прогр ммы
.......................................................................................................................................................... 128
осст новление секции импорт в р сп ков нной прогр мме
.......................................................................................................................................................... 128
оиск обл стей со Stolen Code и восст новление в них эмулиров нных инструкций
.......................................................................................................................................................... 131
одготовк .......................................................................................................................................................... 131
ф йл dumped.exe к восст новлению секции ресурсов
осст новление секции ресурсов .rsrc
.......................................................................................................................................................... 134
мпиров ние секции JCLDEBUG
.......................................................................................................................................................... 135
пуск полученного д мп прогр ммы
.......................................................................................................................................................... 136
2 сп ковк прогр ммы LanAgent v3.0.0.0
................................................................................................................................... 137
пределение протектор и язык прогр ммиров ния
.......................................................................................................................................................... 137
пределение опций з щиты прогр ммы
.......................................................................................................................................................... 138
осст новление т блицы INIT
.......................................................................................................................................................... 139
осст новление т блицы IAT и вызовов эмулиров нных APIs
.......................................................................................................................................................... 140
стр нение .......................................................................................................................................................... 141
проверок целостности код CRC) прогр ммы
муляция APIs Asprotect, вызыв емых из код прогр ммы
.......................................................................................................................................................... 141
осст новление секции импорт в р сп ков нной прогр мме
.......................................................................................................................................................... 141
оиск обл стей со Stolen Code и восст новление в них эмулиров нных инструкций
.......................................................................................................................................................... 142
еренос обл сти SBOEP н место секции ф йл .rsrc
.......................................................................................................................................................... 143
одготовк .......................................................................................................................................................... 143
ф йл dumped.exe к его сборке
рикручив ние секции с укр денным кодом к ф йлу dumped.exe
.......................................................................................................................................................... 146
осст новление секции ресурсов .rsrc
.......................................................................................................................................................... 147
ере дрес ция прыжков из код прогр ммы н секцию с укр денным кодом .aspr
.......................................................................................................................................................... 149
чистк мусорного код в секции ф йл с укр денным кодом .aspr
.......................................................................................................................................................... 150
ыявление причины появления ошибки при з пуске р сп ков нной прогр ммы
.......................................................................................................................................................... 150
3 сп ковк прогр ммы Asprotect v2.5 SKE build 04.08 Demo
................................................................................................................................... 152
пределение протектор и язык прогр ммиров ния
.......................................................................................................................................................... 153
пределение опций з щиты прогр ммы
.......................................................................................................................................................... 154
осст новление т блицы INIT
.......................................................................................................................................................... 155
олучение ф йл Asprotect.dll
.......................................................................................................................................................... 156
олучение т.......................................................................................................................................................... 157
блиц соответствия для корректировки VM
орректировк код VM для восст новления подпрогр мм с эмулиров нными инструкциями 160
..........................................................................................................................................................
осст новление код подпрогр мм с эмулиров нными инструкциями
.......................................................................................................................................................... 161
муляция APIs Asprotect, вызыв емых из код прогр ммы
.......................................................................................................................................................... 162
стр нение .......................................................................................................................................................... 162
проверок целостности код прогр ммы
осст новление секции импорт прогр ммы
.......................................................................................................................................................... 162
оиск обл стей со Stolen Code и восст новление в них эмулиров нных инструкций
.......................................................................................................................................................... 163
еренос обл сти SBOEP н место секции ф йл .rsrc
.......................................................................................................................................................... 164
одготовк .......................................................................................................................................................... 165
ф йл dumped.exe к его сборке
рикручив ние секции с укр денным кодом к ф йлу dumped.exe
.......................................................................................................................................................... 167
осст новление секции ресурсов .rsrc
.......................................................................................................................................................... 168
ере дрес ция прыжков из код прогр ммы н секцию с укр денным кодом .aspr
.......................................................................................................................................................... 170
Part IV пилог 173
© <2009> < екрылов лентин>
5
6. 6 сп ковк прогр мм, з щищенных Asprotect
Index 0
© <2009> < екрылов лентин>
7. Foreword 7
Foreword
This is just another title page
placed between table of contents
and topics
© <2009> < екрылов лентин>
9. ведение 9
1 ведение
рошло более полугод с того времени, когд я н форуме CRACKL@B выложил
цикл ст тей по р сп ковке прогр мм, уп ков нных протектором ASProtect. этих
ст тьях был опис н процесс р сп ковки прогр мм, уп ков нной этим протектором,
т кже к ним был приложен комплект скриптов, который, собственно говоря, и
выполнял процесс р сп ковки прогр ммы. это время р зр ботчики выложили
новые версии протектор ASProtect – 1.51 build 09.22 и 2.51 SKE build 09.22
(сентябрь 2009 г.). роме того, з это время я получил много вопросов по р зным
спект м р сп ковки прогр мм, уп ков нных Asprotect, з меч ния по р боте
скриптов, д и с м р сп ков л нем ло прогр мм, уп ков нных этим протектором.
оэтому я решил подготовить второй выпуск цикл ст тей. ожно было бы, конечно,
сдел ть небольшие примеч ния к предыдущему циклу ст тей, чтобы сокр тить объем
изл г емого м тери л , но немного подум в, я пришел к выводу о том, что
повторение – это м ть учения, и лучше всего сдел ть полный цикл ст тей, хотя он, во
многом, будет повторяться с предыдущим изложенным м тери лом. роме того, кто
впервые столкнется с этим циклом ст тей, не будет лихор дочно иск ть, где можно
дост ть первый цикл ст тей.
еще одно. зр бот нные скрипты для р сп ковки прогр мм, з щищенных
Asprotect, тестиров лись мной н нескольких десятк х прогр мм. уже счит л, что
они будут р бот ть везде, без к ких-либо сбоев. , когд уже был готов к отпр вке
эт ч сть ст тьи, мне поп л сь прогр мм , н которой не ср бот л скрипт для
восст новления эмулиров нных инструкций в обл стях п мяти со Stolen Code.
н ч л р збир ться с причиной этого сбоя и н шел тот случ й, о котором д же и не
подозрев л. ело в том, чтобы скрипт случ йно не з тер нужный код кодом
восст новленных инструкций, я предусмотрел в скрипте смещение от н ч л
свободного мест н 20h б йтов. в этой прогр мме ок з лось, что имеется
свободного мест в конце обл сти п мяти со Stolen Code только 0Ah б йтов.
стественно, что скрипт, при приб влении 20h б йтов к н йденному дресу
свободного мест , вычислил дрес з предел ми обл сти п мяти со Stolen Code
(которой т м нет). , естественно, произошел сбой в р боте прививки. не пришлось
вводить проверку н личия не менее 20h б йтов свободного мест в дв скрипт : для
восст новления эмулиров нных инструкций в обл стях п мяти со Stolen Code, и для
перенос обл стей п мяти со Stolen Code н место секций ф йл .rsrc или .adata.
оэтому, если произошел сбой в р боте к кого-либо скрипт , нужно н йти причину
этого сбоя, и сдел ть соответствующие корректировки, поскольку они, к к пр вило,
небольшие.
второе. р зр бот нные мной скрипты, в случ ях, когд не н ходится к к я-либо
цепочк б йтов, я ввел ди гностические сообщения, которые позволят быстро н йти
место сбоя в скрипте. лее м нужно определить, почему скрипт не н шел д нной
цепочки б йтов, и, при необходимости, ввести в скрипт поиск нужной цепочки
б йтов, чтобы получить дрес той или иной подпрогр ммы, котор я н м нужн для
© <2009> < екрылов лентин>
10. 10 сп ковк прогр мм, з щищенных Asprotect
выполнения определенных процедур для р сп ковки прогр ммы.
к известно, протектор выполняет многоуровневую з щиту прогр мм:
- протектор может з щищ ть ригин льную точку вход прогр ммы (OEP) путем
выполнения ч сти код в специ льной обл сти п мяти (Stolen Bytes OEP, или
SBOEP);
- может быть з щищен т блиц импорт (IAT) путем применения специ льных
подпрогр мм, которые определяют, к кие APIs эмулиров ны протектором, и
выполняют ч сть код этих APIs в специ льных обл стях п мяти прогр ммы;
- в прогр мм х, н пис нных н Delphi, протектор шифрует т блицу иници лиз ции
прогр ммы (INIT), которую выполняет, по мере необходимости;
- шифрует ч сть код прогр ммы, и выполняет эти з шифров нные ч сти код в
специ льных обл стях п мяти протектор ;
- применяет эмуляцию код целых подпрогр мм, и эмулиров нные инструкции
выполняет в специ льных подпрогр мм х. к пр вило, р зр ботчики прогр мм
применяют эту опцию для з шифровки подпрогр мм, связ нных с регистр цией
прогр ммы, что зн чительно з трудняет процесс определения корректного
регистр ционного код .
ороче говоря, протектор дел ет множество г достей, которые зн чительно
усложняют жизнь cracker's.
тери л этой ст тьи р збит н несколько ч стей, в которых будет поэт пно изложен
процесс р сп ковки прогр мм, уп ков нных ASProtect.
втор д нного тутори л - vnekrilov ( екрылов
лентин)
e-mail: vnekrilov@yandex.ru
© <2009> < екрылов лентин>
12. 12 сп ковк прогр мм, з щищенных Asprotect
2 сп ковк прогр мм, з щищенных Asprotect
тот м тери л р зделен н две ч сти. первой ч сти пок з ны основные действия,
которые нужно выполнить при р сп ковке прогр мм, з щищенных Asprotect. о второй
ч сти р ссмотрены примеры р сп ковки конкретных прогр мм, з щищенных Asprotect.
рогр мм для р сп ковки: ASProtect SKE v2.51 build 09.22
пис ние прогр ммы: кер/ ротектор исполняемых ф йлов
нструменты: OllyDbg 1.10, PhantOm v1.54, PEiD v0.95, PE Tools
v1.8.800.2006 RC7, Hex Workshop v5.00.2511, Plugin
OdbgScript
v1.78.1,
Import
REConstructor F, DiE v0.64 by
v1.6
Hellsp@wn, Resource Binder v3.1
ложность: ля опытных crackers
щит : ASProtect SKE v2.51 build 09.22
ель: сп ковк прогр мм, уп ков нных ASProtect
2.1 пределение версии протектор и компилятор
еред р сп ковкой прогр ммы всегд нужно выяснять версию протектор и
компилятор прогр ммы, поскольку по этим п р метр м можно определить
н пр вление д льнейшей р боты. к, н пример, если прогр мм скомпилиров н
компилятором Delphi, то в ней, к к пр вило, будет з криптов н т блиц
иници лиз ции прогр ммы (INIT), которую н м нужно р скриптов ть н ее родное
место в прогр мме. рогр ммы, скомпилиров нные н C/C++, не имеют т блицы
иници лиз ции, поэтому р бот по восст новлению т блицы INIT не выполняется.
ля выяснения, уп ков н ли прогр мм , или нет, можно использов ть н лиз торы
ф йлов PEiD v0.95, DiE v0.64 или RDG Packer Detector v0.6.6. ообще имеется
большое число всяки н лиз торов ф йлов, но, н мой взгляд, дост точно
использов ть эти три н лиз тор ф йлов.
н ч л про н лизируем прогр мму
в PEiD v0.95.
© <2009> < екрылов лентин>
13. сп ковк прогр мм, з щищенных Asprotect 13
к видим, прогр мм уп ков н ASProtect 1.2x - 1.3x [Registered]. опробуем
уточнить версию п кер , для чего применим прекр снейшую утилиту ASPrINF v1.6
Beta:
т утилит считыв ет д нные о п кере из с мой прогр ммы, и пок зыв ет точную
версию протектор . десь, к к мы видим, прогр мм уп ков н с м собой. нные о
точной версии протектор н м пон добятся при восст новлении оригин льного код
эмулиров нных подпрогр мм, поскольку к жд я версия протектор применяет свою
индивиду льную схему з криптовки код подпрогр мм. о об этом мы поговорим в
соответствующей ч сти д нного м тери л .
оскольку н ми определен п кер, которым з щищен н лизируем я прогр мм , н м
ост лось определить компилятор, которым скомпилиров н прогр мм . ля этих
целей будем использов ть утилиту DiE v0.64:
© <2009> < екрылов лентин>
14. 14 сп ковк прогр мм, з щищенных Asprotect
, н конец, про н лизируем прогр мму в RDG Packer Detector v0.6.6:
к видим, н лиз ф йл в н лиз тор х DiE v0.64 или RDG Packer Detector v0.6.6
позволил н м определить компилятор, которым скомпилиров н исследуем я
прогр мм – это Borland Delphi. оскольку прогр ммы, скомпилиров нные этим
компилятором, имеют т блицу INIT, то, со зн чительной степенью вероятности,
можно предположить, что п кер з криптов л эту т блицу, и н м придется ее
восст н влив ть.
2.2 онфигур ция отл дчик и пл гинов
еред з грузкой прогр ммы в отл дчик OllyDbg v1.10, нужно предв рительно
выполнить его конфигур цию н вкл дке “ сключения”:
© <2009> < екрылов лентин>
15. сп ковк прогр мм, з щищенных Asprotect 15
, т кже сконфигуриров ть plugin PhantOm v1.54:
© <2009> < екрылов лентин>
16. 16 сп ковк прогр мм, з щищенных Asprotect
2.3 оиск OEP (SBOEP)
т к, з груж ем прогр мму в отл дчик:
то – тр диционн я точк вход прогр мм, уп ков нных Asprotect. нструкция
PUSH 5C5001 отсыл ет н с в предпоследнюю секцию ф йл .data, котор я содержит
в уп ков нном виде код прогр ммы, код Asprotect.dll, и все д нные (которые
хр нятся в м ссив х), необходимые для р сп ковки прогр ммы в п мять компьютер .
меется много ст тей р зных второв (в том числе и мои ст тьи), в которых
подробно описыв ется процесс р сп ковки прогр ммы в п мять компьютер ,
поэтому я не буду здесь повторять все то, что было н пис но р ньше. десь я хочу
только отметить, что с мой первой р сп ковыв ется Asprotect.dll, котор я упр вляет
процессом д льнейшей р сп ковки прогр ммы в п мять компьютер , обеспечив я ее
корректную р боту. еще одно! есмотря н большое число версий д нного
протектор , Asprotect.dll пр ктически не меняется от версии к версии, что позволяет
зн чительно облегчить процесс р сп ковки прогр мм, уп ков нных р зными
версиями Asprotect. незн чительных отличиях р зных версий Asprotect.dll будет
ук з но в соответствующих р здел х д нной ст тьи.
ст новк прогр ммы н коде Asprotect.dll
т к, к к ук з л выше, процессом р сп ковки прогр ммы упр вляет Asprotect.dll,
поэтому н шей з д чей является, при з пуске прогр ммы в отл дчике, ост новить
выполнение прогр ммы после р сп ковки Asprotect.dll в п мять компьютер .
онечно, можно идти по цикл м р сп ковки, к к это опис но в ст тьях р зных
второв (в том числе и моих ст тьях), одн ко можно и зн чительно упростить этот
процесс, используя следующий прием. Asprotect.dll – это библиотек , котор я имеет
все секции, присущие библиотек м .dll, т.е. секции код , импорт , экспорт , и т.д.
(кроме PE-з головк , который обычно имеет вирту льный р змер в 1000h б йтов).
есто з головк этой библиотеки Asprotect.dll в п мяти компьютер з полнено
нолями (хотя некоторые р зр ботчики прогр мм используют эти 1000h б йтов код
для з писи н ч льного код прогр ммы, и р змещ ют библиотеку Asprotect.dll в
предпоследней секции ф йл ). к и люб я прогр мм , при своем з пуске, Asprotect.
dll вызыв ет API GetSystemTime из kernel32.dll, и вызов этой API можно
использов ть для ост новки прогр ммы в обл сти код Asprotect.dll:
© <2009> < екрылов лентин>
17. сп ковк прогр мм, з щищенных Asprotect 17
к видно из приведенного рисунк , после выполнения API GetSystemTime, мы
поп д ем в обл сть код Asprotect.dll. очк вход Asprotect.dll имеет следующий
вид:
нее можно пройти, н ж в несколько р з кл виши Ctrl+F9, после ост новки
прогр ммы н выполнении API GetSystemTime.
огд прогр мм ост новил сь н коде Asprotect.dll после выполнения API
GetSystemTime, то еще не выполнен р сп ковк код прогр ммы, т блиц IAT и
INIT, и других ч стей код прогр ммы. оэтому, мы можем, проходя н
соответствующие подпрогр ммы в Asprotect.dll, упр влять процессом р сп ковки
код прогр ммы в п мять компьютер т ким обр зом, чтобы получить код
прогр ммы, дост точный для выполнения р бочего д мп п мяти прогр ммы.
рогр мм полностью р сп ков н в п мять компьютер , когд он ост новлен н
OEP или SBOEP, поэтому н м н до сн ч л определиться, своров н ли п кером
ч сть код из обл сти OEP, или нет. ля этого н м нужно пройти н OEP
прогр ммы, и определить, что мы здесь имеем – OEP или SBOEP.
рохождение н OEP – SBOEP прогр ммы
к я уже пис л выше, Asprotect.dll не сильно отлич ется в р зных версиях
протектор , поэтому имеются некоторые волшебные точки, один ковые для всех
версий Asprotect.dll, и которые можно использов ть для поиск OEP или SBOEP
прогр ммы. дной из т ких волшебных точек является следующий код:
© <2009> < екрылов лентин>
18. 18 сп ковк прогр мм, з щищенных Asprotect
дрес 00CB1CB8 – это очень интересный дрес. нем з пис н дрес SBOEP
прогр ммы (если п кер своров л ч сть код из OEP прогр ммы), и в этом дресе
з пис ны 00000000, если р зр ботчик прогр ммы не з щитил OEP своей прогр ммы.
тот уч сток код Asprotect.dll можно легко н йти, выполнив поиск инструкции
MOV BYTE PTR DS:[EAX],0E1:
ледует отметить, что в некоторых версиях Asprotect.dll (н пример, версии 1.32),
применяется инструкция - MOV DWORD PTR DS:[EAX],0E1.
зличие этих двух инструкций з ключ ется только в р змер х опер ндов – BYTE
или DWORD.
з тем, н чин я от предыдущей н йденной инструкции, н м н до н йти следующие
две инструкции:
00C9FFA3 A1 B81CCB00 MOV EAX,DWORD PTR DS:[CB1CB8]
00C9FFA8 894424 04 MOV DWORD PTR DS:[ESP+4],EAX
© <2009> < екрылов лентин>
19. сп ковк прогр мм, з щищенных Asprotect 19
оскольку дрес конст нт и регистров в р зных прогр мм х будут р зными, то
поиск этого мест выполняем по м ске “A1????????894?”.
бр тите вним ние н то, что при поиске этих двух инструкций, необходимо снять
фл жок с опции “ есь блок”.
личие этой волшебной точки позволяет н пис ть скрипт, который с м н ходит
OEP (SBOEP) н любой прогр мме, уп ков нной Asprotect.
ктически скрипт должен сдел ть следующее:
1. ройти н дрес API GetSystemTime н н шей м шине.
2. йти инструкцию MOV BYTE PTR DS:[EAX],0E1 (или MOV DWORD PTR
DS:[EAX],0E1).
3. йти инструкцию MOV EAX,DWORD PTR DS:[CB1CB8].
4. пустить прогр мму до этой инструкции, и прочит ть зн чение SBOEP.
зр бот нный мной скрипт “ оиск OEP (SBOEP).osc” построен н этой логике
р боты. дн ко он сн бжен рядом дополнительных функций, которые позволяют
т кже определить основные опции з щиты, которые использов л прогр ммист для
з щиты р зр бот нной им прогр ммы. то позволяет, н с мом первом
предв рительном н лизе з щищенной прогр ммы, определить, с чем н м придется
р бот ть.
здесь я не могу не ск з ть о том, что р зр ботчики протектор весьм ревниво
относятся к з щите код Asprotect.dll, встр ив я в него несколько проверок его
целостности (CRC). к, н пример, если мы уст новим обычную BreakPoint н
дрес инструкции MOV BYTE PTR DS:[EAX],0E1, и попыт емся з пустить
прогр мму, то получим следующее сообщение:
© <2009> < екрылов лентин>
20. 20 сп ковк прогр мм, з щищенных Asprotect
т ких проверок в коде Asprotect.dll, имеется дост точно много. оэтому одни
проверки приходится обходить, используя Hardware BreakPoint вместо обычных
BreakPoint, другие проверки приходится обходить путем принудительного перенос
регистр EIP н необходимый дрес прогр ммы. третьи проверки приходится
обходить путем принудительной перез писи имеющегося контрольного зн чения н
нужное контрольное зн чение.
се это можно посмотреть в коммент риях к скрипту “ оиск OEP (SBOEP).osc”,
который приложен к д нной ст тье. о предложению r-e я вырез л ч сть
коммент риев, которые з громожд ют скрипт, и ост вил только основные
коммент рии, которых вполне дост точно для того, чтобы понять логику р боты
скрипт , и позволяют, в случ е необходимости, быстро н йти причины сбоев его
р боты. росм трив ть этот скрипт лучше всего в ред кторе скриптов Olly Debugger
Script Editor v1.2 от Guru.exe, или используя ред ктор скриптов OllySubScript v1.4.1
by Sub Xero (мне больше понр вился этот ред ктор скриптов).
пустив этот скрипт, мы довольно быстро ок зыв емся здесь:
к видим, в этой прогр мме мы ост новились н SBOEP. это озн ч ет, что
вполне возможно, прогр ммист з щитил свою прогр мму, используя криптов ние
т блицы INIT, пере дрес цию импорт , и, вполне вероятно, весь н бор г достей,
которые предост вляет этот протектор.
© <2009> < екрылов лентин>
21. сп ковк прогр мм, з щищенных Asprotect 21
этом рисунке приведен результ т р боты скрипт при прохождении н OEP
прогр ммы, у которой не з щищен оригин льн я точк вход . сли мы посмотрим
н “волшебную” обл сть код , то увидим следующее:
к видим, по интересующему н с дресу з пис ны ноли, что ук зыв ет н
нез щищенность протектором OEP прогр ммы.
риложение: крипт для проход н OEP (SBOEP) прогр ммы - “ оиск OEP
(SBOEP).osc”
PS. хотел бы побл год рить r-e з его ценные з меч ния по изменению текст
скриптов, которые помогли сдел ть их более н глядными, и удобными в р боте.
2.4 осст новление т блицы INIT
сли прогр мм н пис н н Borland Delphi, то он имеет т к н зыв емую т блицу
иници лиз ции (т блиц INIT), котор я содержит дрес подпрогр мм,
выполняемых при з пуске прогр ммы. ротектор Asprotect полностью шифрует
т блицу INIT, и выполняет ее в специ льно выделенной обл сти п мяти, обл сть в
коде прогр ммы, где р ньше н ходил сь эт т блиц , протектор з полняет мусорным
кодом.
в йте немного подробнее р ссмотрим т блицу INIT. сли мы посмотрим н Entry
Point (EP) неуп ков нной прогр ммы, н пис нной н Borland Delphi, то увидим
следующее:
© <2009> < екрылов лентин>
22. 22 сп ковк прогр мм, з щищенных Asprotect
рисунке стрелкой пок з н дрес р сположения т блицы INIT в прогр мме.
нижнем рисунке приведен фр гмент т блицы INIT:
р сным цветом выделено число подпрогр мм, содерж щихся в этой т блице INIT (
112h), елтым цветом выделен ук з тель н дрес первой подпрогр ммы т блицы
INIT, рко-зеленым цветом выделены дрес подпрогр мм иници лиз ции, и
ирюзовым цветом выделены дрес подпрогр мм деиници лиз ции.
теперь д в йте посмотрим н т блицу INIT уп ков нной прогр ммы. м мы
видим следующее:
десь мы видим, что вместо числ подпрогр мм, содерж щихся в этой т блице INIT,
з пис но зн чение 01h (выделено р сным цветом), елтым цветом выделен
ук з тель н дрес подпрогр мм CALL, в которых выполняются з криптов нные
подпрогр ммы иници лиз ции (выделен рко-зеленым цветом), и
деиници лиз ции (выделен ирюзовым цветом). ст льн я же ч сть т блицы INIT
з полнен мусорным кодом.
чевидно, что т блицу INIT лучше всего восст н влив ть до восст новления
© <2009> < екрылов лентин>
23. сп ковк прогр мм, з щищенных Asprotect 23
т блицы IAT и пере дресов нных вызовов APIs, поскольку после восст новления
т блицы IAT и пере дресов нных вызовов APIs, прогр мм полностью р сп ков н
в п мять м шины, ее можно уже д мпиров ть.
же с первой ч сти д нного цикл ст тей можно предположить, что и здесь можно
н йти волшебный код, который позволит н м восст новить т блицу INIT,
з криптов нную протектором Asprotect. о всех версиях Asprotect.dll имеется одно
очень интересное место, которое н ходится чуть выше код ошибки “60”:
рисунке р сным цветом выделен т волшебн я точк , котор я определяет,
з криптов н ли т блиц INIT, или нет. сли т блиц INIT з криптов н
протектором, то условный прыжок “JE XXXXXXXX” не выполняется (зн чение
фл жк Z р вно 0), и это озн ч ет, что н м н до будет восст н влив ть т блицу INIT.
выполнив инструкцию CALL 00BDABD0, р сположенную н дресе 00BDD8F4,
можно получить все д нные, которые необходимы для восст новления т блицы
INIT.
сли же т блиц INIT не з криптов н , или он отсутствует (для прогр мм,
н пис нных н других язык х прогр ммиров ния), зн чение фл жк Z р вно 1,
выполняется условный прыжок JE SHORT 00BDD907, и пропуск ется выполнение
инструкции CALL 00BDABD0.
стественно, что для поиск этой волшебной точки нужно использов ть строку
ASCII “60”, котор я, к к я отметил выше, имеется во всех версиях Asprotect.dll.
се д нные, которые необходимы для получения дрес подпрогр ммы, котор я
н ходится в т блице INIT, протектор хр нит в м ссиве д нных, выполненном в виде
двух т блиц – блицы и блицы .
© <2009> < екрылов лентин>
24. 24 сп ковк прогр мм, з щищенных Asprotect
блиц имеет следующий вид:
ротектор под эту т блицу выделяет отдельную обл сть п мяти, в н шей случ е –
02020000.
блиц выглядит т к:
ротектор под эту т блицу т кже выделяет отдельную обл сть п мяти, в н шей
случ е – 02030000.
к видно, м ссивы д нных, н ходящиеся в т блиц и , н м ничего не говорят,
но именно они д ют ук з ние протектору, сколько нужно подсчит ть б йтов в
специ льно выделенной обл сти п мяти, чтобы получить дрес подпрогр ммы,
н ходящейся в т блице INIT. т обл сть п мяти н ходится здесь, и имеет вид
мусорного код :
бр тите вним ние н то, что все эти обл сти п мяти идут подряд: 02020000,
02030000 и 02040000. именно в этой обл сти п мяти н ходится инструкция CALL
REG, котор я и выполняет р скриптов нную подпрогр мму:
© <2009> < екрылов лентин>
25. сп ковк прогр мм, з щищенных Asprotect 25
к честве REG может быть любой регистр: EAX, ECX, и т.д. чевидно, что в этой
обл сти п мяти нельзя уст н влив ть прогр ммные BreakPoint и изменять код,
поскольку это приведет к неверным результ т м при подсчете б йтов в этой обл сти
п мяти, и, соответственно, к сбою прогр ммы. динственно, что здесь можно дел ть
– это уст н влив ть Hardware BreakPoint. менно н этом принципе и был
построен скрипт для восст новления т блицы INIT, опис нный в первом выпуске
д нного цикл ст тей.
дн ко этот скрипт р бот ет медленно, и требуется несколько минут, чтобы
восст новить т блицу INIT. VolX в своих скрипт х предложил более лучший
в ри нт – это предв рительно, с помощью специ льной прививки, вычислить хэш
к ждой подпрогр ммы т блицы INIT, используя д нные, н ходящиеся в т блиц х
и . ри вычислении хэшей, естественно, используется обл сть п мяти, где з пис н
CALL REG. ычисленные хэши з писыв ются в специ льно выделенную обл сть
п мяти, и з тем, с помощью конст нты, имеющейся в обл сти п мяти CALL REG,
р скриптовыв ются дрес подпрогр мм, которые были з пис ны в оригин льной
т блице INIT. еперь здесь можно изменять код, дописыв ть свой код, и дел ть с
ним любые действия, к кие мы пожел ем. ти изменения уже не будут влиять н
результ ты н шей р боты.
сли мы возьмем, н пример, с мые первые д нные из т блиц и , и вычтем из
зн чения т блицы B зн чение т блицы A, то получим следующий результ т:
7383E5FF - 7383E2EE = 00000311
если к этому результ ту мы приб вим ImageBase обл сти п мяти, где н ходится
CALL REG, то получим следующий результ т:
00000311 + 02040000 = 02040311
десь мы получили нижний порог обл сти п мяти, н котором мы должны з кончить
процесс вычисления хэш для первого зн чения т блицы .
лее обнуляется регистр EAX, и из него вычисляются первые 4 б йт , н ходящиеся
в н ч ле обл сти п мяти, где н ходится CALL REG:
00000000 - 02EBF352 = FD140CAE
© <2009> < екрылов лентин>
26. 26 сп ковк прогр мм, з щищенных Asprotect
тем из этой обл сти п мяти мы берем очередные 4 б йт , н которые ук зыв ет
зн чение смещения выборки, и вычит ем их из полученного зн чения регистр EAX:
FD140CAE - CD02EBF3 = 301120BB
тот цикл вычислений продолж ется до тех пор, пок не будет достигнут нижний
порог обл сти п мяти для этой подпрогр ммы т блицы INIT – 02040311. огд
достигнут этот порог, то к вычисленному зн чению регистр EAX приб вляется
зн чение из т блицы , и мы получ ем хэш первой подпрогр ммы из т блицы INIT:
8CFE4BBA + 7383E2EE = 00822EA8
ычисленные хэши подпрогр мм т блицы INIT, после выполнения код прививки,
выглядит т к:
к видно из приведенного рисунк , вычисленные хэши ст ли более похожи н
дрес подпрогр мм, одн ко они еще не являются ими.
ля р скриптовки зн чения хэш используются три конст нты - C1FF0493,
C281A541 и 4E. м процесс р скриптовки выглядит следующим обр зом:
00822EA8 + C1FF0493 = C281333B
C281333B - C281A541 = FFFF8DFA
1 - FFFF8DFA = 00007206
00007206 + 4E = 00007254
теперь, если мы приб вим к вычисленному зн чению ImageBase прогр ммы
00400000, то получим требуемый дрес подпрогр ммы из т блицы INIT:
00007254 + 00400000 = 00407254
ля р скриптовки хэшей подпрогр мм из т блицы INIT, применяется специ льн я
прививк , котор я, для своей р боты, использует код в обл сти п мяти 02040000.
осле выполнения этой прививки мы получ ем следующее:
© <2009> < екрылов лентин>
27. сп ковк прогр мм, з щищенных Asprotect 27
к видно из рисунк , н ми получен полностью восст новленн я т блиц INIT,
котор я з пис н в специ льно выделенной обл сти п мяти, и теперь н м н до
перенести н ее родное место в ф йле, что легко дел ется с помощью небольшой
прививки.
этой ч сти ст тьи мной приложен скрипт “ осст новление т блицы INIT.osc”.
сож лению, этот скрипт получился дост точно большим по р змеру, поскольку
зн чительный объем з ним ет вычисление инструкций, н ходящихся после CALL
REG, и которые мы должны перенести в обл сть код прививки. ело з ключ ется в
том, что мы должны н месте инструкции CALL REG з пис ть безусловный прыжок
в прививку, который имеет р змер 5h б йтов. нструкция CALL REG имеет р змер
2h б йт , и н м н до з нять еще три б йт у инструкций, р сположенных ниже
инструкции CALL REG. о поскольку ниже этой инструкции р сположен мусорный
код, который все время меняется, при к ждой перез грузке прогр ммы, то
приходится в скрипте учитыв ть все эти изменения.
дн ко полученный скрипт р бот ет очень быстро, и полностью восст н влив ет
т блицу INIT во всех версиях Asprotect.dll. осст новленн я т блиц INIT может
быть вст влен н свое родное место, после восст новления т блицы импорт (IAT)
и пере дресов нных вызовов APIs, перед д мпиров нием п мяти прогр ммы.
дн ко восст новленную т блицу INIT можно вст вить н ее родное место, и в
полученный д мп п мяти прогр ммы, что з висит только от жел ния cracker's.
оэтому, чтобы выполнить эту р боту, н м необходимо з пис ть, для п мяти, все
д нные о т блице INIT. ти д нные скрипт з писыв ет в журн л регистр ции
отл дчик , при з вершении своей р боты, в следующем виде:
мп т блицы INIT скрипт сохр няет с именем “table_INIT.bin”, который н ходится
в той же п пке, где н ходится и уп ков нн я прогр мм .
сли мы посмотрим н т блицу INIT после р боты скрипт , то увидим следующее:
© <2009> < екрылов лентин>
28. 28 сп ковк прогр мм, з щищенных Asprotect
рисунке мы видим полностью восст новленную т блицу INIT, в
р сп ковыв емом ф йле.
риложение: крипт для восст новления т блицы INIT прогр ммы - “
осст новление т блицы INIT.osc”.
2.5 осст новление т блицы IAT
этой ч сти мы р ссмотрим восст новление т блицы IAT и инструкций вызовов
эмулируемых APIs. о, предв рительно, р ссмотрим немного теории. се функции из
р зных DLL, которые нужны для р боты прогр ммы, компиляторы собир ют в одном
месте, и это место н зыв ется блицей мпортируемых дресов, или просто
блицей IAT. сли мы посмотрим н н т блицу IAT к кого-либо не уп ков нного
ф йл , то т м увидим следующее (для пример я взял прогр мму DeDe, котор я
н пис н н Borland Delphi):
если мы изменим форм т отобр жения, то это место будет выглядеть т к:
десь мы видим функции из двух библиотек – ntdll.dll и kernel32.dll, дрес которых
привяз ны к конкретной (моей) м шине. .е., в к ждой ячейке этой т блицы IAT
з пис н дрес используемых прогр ммой APIs, н н шей м шине.
© <2009> < екрылов лентин>
29. сп ковк прогр мм, з щищенных Asprotect 29
если мы немного прокрутим код вверх, в с мое н ч ло этой обл сти п мяти, то
увидим т к н зыв емую Import Table ( блицу мпорт ):
этом рисунке я р зными цвет ми выделил д нные для р зных библиотек,
используемых прогр ммой DeDe. екоторые пользов тели пут ют эти дв понятия -
блиц IAT и блиц мпорт . сылк н блицу мпорт имеется в PE-
з головке ф йл , вот н т блицу IAT ссылок в PE-з головке ф йл - нет, но н нее
к к р з имеются ссылки в блице мпорт . ст ти, н к ждую библиотеку в
блице мпорт отводится место в 14h б йтов.
еперь д в йте р ссмотрим, что озн ч ют дв зн чения, которые н ходятся в
блице мпорт для к ждой библиотеки. озьмем, к примеру, первую библиотеку,
котор я выделен рко-зеленым цветом:
этом рисунке р сным цветом выделен дрес, который ук зыв ет н то место, где
з пис но имя библиотеки, ишневым цветом выделен первый дрес в т блице IAT
, в котором з пис ны дрес APIs из этой библиотеки н н шей м шине. ( десь
з пис ны зн чения VirtualOffset этих дресов, чтобы получить зн чения
VirtualAddress, к зн чениям VirtualOffset н до приб вить зн чение ImageBase
прогр ммы). в йте перейдем н дрес 005B1A28 (VirtualOffset = 001B1A28):
этом рисунке озовым цветом выделен последний дрес API в т блице IAT,
елтым цветом – р зделительные ноли в конце т блицы IAT, ирюзовым цветом –
имя DLL (kernel32.dll), олотистым цветом – имен APIs, которые входят в эту
библиотеку, и иреневым цветом – дрес из блицы мпорт .
теперь д в йте перейдем н дрес 005B11B8 (VirtualOffset = 001B11B8):
© <2009> < екрылов лентин>
30. 30 сп ковк прогр мм, з щищенных Asprotect
этом рисунке ирюзовым цветом выделены последние 14h б йтов блицы
мпорт , которые з полнены нолями. поскольку прогр мм скомпилиров н н
Borland Delphi, то после блицы мпорт идет блиц IAT. рко-зеленым
цветом выделен обл сть т блицы IAT, котор я содержит дрес APIs из библиотеки
kernel32.dll, и иреневым цветом – дрес из блицы мпорт .
если мы посмотрим н это место в исполняемом ф йле, то увидим следующее:
нем вместо дресов APIs н н шей м шине мы видим VirtualOffset н их имен .
немного ниже мы видим:
е обр щ йте вним ния н то, что мы видим другие дрес . ело в том, что эти
дрес н ходятся в с мом исполняемом ф йле, который не з гружен в п мять
компьютер . ри з грузке же ф йл в п мять компьютер , все секции ф йл
р спол г ются по вирту льным дрес м, ук з нным в PE-з головке ф йл , и тогд
мы увидим эти дрес н их родном месте.
ким обр зом, в прогр мм х, н пис нных н Borland Delphi, импорт APIs
орг низов н следующим обр зом:
- сн ч л идет т блиц мпорт ;
- з тем идет т блиц IAT;
- и после нее р сположен обл сть с имен ми DLLs и APIs.
оэтому компилятор Borland Delphi выделяет для импорт APIs отдельную секцию
ф йл , которую он н зыв ет .idata.
емного ин че орг низов н импорт в прогр мм х, н пис нных, н пример, н
Microsoft Visual C++ | C/C++. к, н пример, в ф йле Mtk_Res1.4.exe, т блиц IAT
р сположен в н ч ле секции .rdata:
© <2009> < екрылов лентин>
31. сп ковк прогр мм, з щищенных Asprotect 31
блиц мпорт р сположен в этой же секции ф йл , но н много ниже т блицы
IAT:
этом рисунке рко-зеленым и ирюзовым цвет ми выделены блок д нных в
т блице мпорт о первых двух DLLs, используемых этой прогр ммой.
онец т блицы мпорт выделен иреневым цветом. тем идет блок ук з телей н
Original First Thunk, уже после блок этих ук з телей, идет обл сть с имен ми
DLLs и APIs:
десь, к к мы видим, т блиц мпорт немного отлич ется от т блицы мпорт
прогр мм, н пис нных н Borland Delphi. т т блиц вн ч ле содержит ук з тель
Original First Thunk, который в свою очередь ук зыв ет н п р метр Hint,
н ходящийся перед именем API:
© <2009> < екрылов лентин>
32. 32 сп ковк прогр мм, з щищенных Asprotect
этом рисунке р сным цветом выделен п р метр Hint, ирюзовым цветом –
имя API.
ким обр зом, в прогр мм х, н пис нных н Microsoft Visual C++ | C/C++, импорт
APIs орг низов н следующим обр зом:
- сн ч л идет т блиц IAT;
- з тем идет код прогр ммы;
- д лее идет т блиц мпорт ;
- з ней идет блок ук з телей н Hint;
- и после этого блок ук з телей р сположен обл сть с имен ми DLLs и APIs.
уделил этому столько вним ния потому, что это н м пон добится при
восст новлении секции импорт в р сп ковыв емой прогр мме. об этом мы
поговорим в соответствующей ч сти д нного цикл ст тей.
прогр мм х, скомпилиров нных другими компилятор ми, т блиц IAT и т блиц
мпорт могут н ходиться в р зных секциях ф йл , но принципы их построения
обусловлены требов ниями к форм ту PE-ф йлов, и поэтому они один ковы.
ротектор Asprotect, к к пр вило, не трог ет т блицу мпорт , но полностью
з полняет мусорным кодом обл сть имен DLL и APIs, и в зн чительной мере
поврежд ет т блицу IAT. ри этом, протектор з криптовыв ет имен всех APIs,
используя р зные конст нты для их з криптовки, и сохр няет эти имен в
специ льных м ссив х д нных.
еперь перейдем к н шей теме – восст новление т блицы IAT в прогр мм х,
з щищенных Asprotect. ля выполнения этой р боты, н м н до выяснить, к ким
обр зом ASProtect з полняет т блицу IAT дрес ми APIs.
сли мы пройдем н OEP (SBOEP) прогр ммы, уп ков нной ASProtect, и посмотрим
н т блицу импорт (IAT), то увидим т м следующее:
этом рисунке мы видим поврежденную протектором т блицу IAT.
© <2009> < екрылов лентин>
33. сп ковк прогр мм, з щищенных Asprotect 33
зделительные ноли перед н ч лом т блицы IAT выделены озовым цветом;
ирюзовым цветом выделены APIs, которые прин длеж т первой DLL (kernel32.dll),
елтым цветом выделены APIs, которые прин длеж т второй DLL (user32.dll).
зделительные ноли между этими DLL выделены еленым цветом, иреневым
цветом выделены эмулируемые APIs, ре льные дрес которых з полнены мусорным
кодом. дрес н ч л т блицы IAT выделен олотистым цветом.
в йте кр тко р ссмотрим процесс з полнения т блицы IAT. к известно, при
з пуске прогр ммы, протектор Asprotect р сп ковыв ет код прогр ммы и т блицу
импорт (IAT) с помощью Asprotect.dll.
се д нные о т блице IAT прогр ммы хр нятся в з криптов нном виде в
специ льном м ссиве д нных. ри з пуске прогр ммы, протектор извлек ет эти
д нные из м ссив , и з писыв ет их по соответствующим дрес м т блицы IAT. ри
этом ч сть т блицы IAT з полняется ф ктическими дрес ми APIs (применительно к
конкретной м шине), ч сть т блицы IAT з полняется мусорным кодом, что и было
пок з но н предыдущем рисунке.
в йте теперь посмотрим н м ссив д нных, который содержит информ цию,
необходимую для з полнения т блицы IAT. тот м ссив содержит з криптов нные
имен всех APIs, которые используются в д нной прогр мме, причем APIs в этой
т блице сгруппиров ны по соответствующим DLLs, в которых н ходятся эти APIs.
р гмент т кого м ссив д нных приведен н следующем рисунке:
этом рисунке ирюзовым цветом выделен р змер всего м ссив д нных о т блице
IAT, ерым цветом выделены ук з тели н типы з криптовки имен APIs,
применяемые в этом м ссиве д нных. рко-зеленым цветом выделен дрес т блицы
IAT, по которому должн н ходиться перв я API (этот дрес ч сто является н ч лом
т блицы IAT, но не всегд ). иреневым цветом выделен р змер д нных для первой
DLL, з тем идут дв б йт , которые идентифицируют конкретную DLL в м ссиве
д нных, и они выделены озовым цветом. этими двумя б йт ми идет не
з криптов нное имя DLL, которое выделено олотистым цветом. , н конец,
оричнево-зеленым цветом выделено з криптов нное имя первой API.
еперь д в йте посмотрим н з криптов нное имя API:
© <2009> < екрылов лентин>
34. 34 сп ковк прогр мм, з щищенных Asprotect
этом рисунке оричнево-зеленым цветом выделен тип з криптовки имени API,
р сным цветом выделен уник льный идентифик тор з криптов нной API, рко-
зеленым цветом выделен р змер з криптов нного имени API, и ирюзовым цветом
выделено с мо з криптов нное имя API.
ип з криптовки имени API имеет большое зн чение для процесс з полнения
протектором т блицы IAT. з висимости от его зн чения, протектор или
з писыв ет в т блицу IAT ф ктический дрес API, или же з полняет этот дрес
мусорным кодом.
еперь н м н до определить ту волшебную точку, котор я позволит н м з полнить
т блицу IAT ф ктическими дрес ми APIs н н шей м шине. оскольку
подпрогр мм з полнения т блицы IAT дрес ми APIs пр ктически не меняется в
р зных версиях Asprotect.dll, то т кой волшебной точкой является следующий дрес:
тот дрес легко н ходится по б йт м опкод инструкций "INC EAX", "MOV
DWORD PTR DS:[EBX],EAX" и "ADD EDI,4", р сположенных в подпрогр мме
з полнения т блицы IAT дрес ми APIs.
одпрогр мм з полнения т блицы IAT дрес ми APIs является один ковой для всех
версий Asprotect.dll, з исключением версии 1.32, поскольку в версии 1.32
используется друг я строк конст нты для р скриптовки з криптов нных имен APIs.
то отличие используется для ук з ния необходимого код прививки, применяемой
для р скриптовки з криптов нных имен эмулируемых APIs, что видно н
приведенном фр гменте скрипт для восст новления т блицы IAT:
ледует отметить, что р зр ботчики этого протектор много вним ния уделяют
выявлению н рушений целостности код прогр ммы, и встроили в Asprotect.dll
много ловушек, которые не позволяют восст новить т блицу IAT. десь я хочу
© <2009> < екрылов лентин>
35. сп ковк прогр мм, з щищенных Asprotect 35
пок з ть эти ловушки:
1-я ловушк (в некоторых версиях, протектор дв жды использует этот вид ловушки):
этом рисунке ср внив ется зн чение регистр EAX с з д нным контрольным
зн чением, после чего выполняется или не выполняется условный прыжок. м
н до, чтобы этот прыжок выполнялся всегд , поэтому скрипт меняет условный
прыжок JE SHORT 00F064B0 н безусловный прыжок JMP SHORT 00F064B0,
после восст новления т блицы IAT, он все возвр щ ет н з д условный прыжок JE
SHORT 00F064B0.
2-я ловушк :
ри восст новленной т блице IAT (при этом д же не з тронуты вызовы
эмулиров нных APIs), в регистре ESI появляется зн чение, отличное от ноля,
условный прыжок JE SHORT 00F1008B не выполняется, и мы получ ем
тр диционное сообщение о повреждении прогр ммы. десь решение з ключ ется в
принудительном обнулении регистр ESI, что и дел ет скрипт.
стр нение этих двух проверок позволяет норм льно з пуститься прогр мме с
восст новленной т блицей IAT и восст новленными вызов ми эмулиров нных
APIs.
еще один момент. ля р боты протектор нужны APIs RaiseException и
GetProcAddress. ти APIs протектор т кже эмулирует, но очень хитро, и, н пример,
эмулиров нн я API RaiseException выглядит т к:
© <2009> < екрылов лентин>
36. 36 сп ковк прогр мм, з щищенных Asprotect
йти дрес р сположения эмулиров нных APIs RaiseException и GetProcAddress
можно легко, выполнив поиск по м ске следующей цепочки б йтов – “Eb01??
B8????????”:
если мы пройдем по мусорному прыжку JMP SHORT 00F06471, то увидим:
десь рко-зеленым цветом выделен дрес р сположения эмулиров нной API
RaiseException.
сли имеется одн цепочк вышеук з нных б йтов, то протектор эмулирует только
API RaiseException, если имеется две т ких цепочки б йтов, то протектор
эмулирует обе APIs - RaiseException и GetProcAddress. ричем сн ч л ук з н дрес
API RaiseException, з тем дрес API GetProcAddress.
не буду здесь описыв ть р боту скрипт по восст новлению т блицы IAT,
поскольку он сн бжен подробными коммент риями, и не нужд ется в к ких-либо
дополнительных пояснениях. динственное, что я хочу отметить, т к это то - что
дрес р сположения всех APIs в т блице IAT, и соответствующие идентифик торы
APIs (по которым протектор определяет тип вызыв емой API), скрипт з носит в
т блицу, созд в емой в специ льно выделенной обл сти п мяти. нные этой
т блицы используются для восст новления вызовов эмулируемых APIs, используя
при этом зн чения идентифик торов з криптов нных APIs в м ссиве д нных для
т блицы IAT.
© <2009> < екрылов лентин>