Крис Касперски - Фундаментальные основы хакерства. Искусство дизассемблирования
Название: | Фундаментальные основы хакерства. Искусство дизассемблирования | |
Автор: | Крис Касперски | |
Жанр: | Руководства и инструкции, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Крэкинг и реверсинжиниринг, Assembler | |
Изадано в серии: | Кодокопатель | |
Издательство: | Солон-Р | |
Год издания: | 2007 | |
ISBN: | 5-93455-175-2 | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Фундаментальные основы хакерства. Искусство дизассемблирования"
Книга, которую вы сейчас держите в руках, открывает двери в удивительный мир защитных механизмов — здесь рассказывается о том, как создаются и вскрываются защиты. Она адресована всем, кто любит захватывающие дух головоломки, всем, кто проводит свободное и несвободное время за копанием в недрах программ и операционной системы. Наконец, эта книга предназначена для тех, кто по роду своей деятельности занимается (постоянно и/или эпизодически) написанием защит и хочет узнать, как грамотно и уверенно противостоять вездесущим хакерам.
Настоящий том посвящен базовым основам хакерства — технике работы с отладчиком и дизассемблером. Здесь подробно описаны приемы идентификации и реконструкции ключевых структур исходного языка — функций (в т. ч. виртуальных), локальных и глобальных переменных, ветвлений, циклов, объектов и их иерархий, математических операторов и т. д.
Читаем онлайн "Фундаментальные основы хакерства. Искусство дизассемблирования". [Страница - 45]
 òàêîé ñèòóàöèè âçëîìùèêó íè÷åãî íå îñòàíåòñÿ, êðîìå òîãî, êàê, çàòàðèâøèñü ïèâîì, ïëîòíî çàñåñòü çà êðîïîòëèâîå èçó÷åíèå âñåãî êîäà ïðîãðàììû, ïðÿìî èëè êîñâåííî ìàíèïóëèðóþùåãî ñ êëþ÷åâîé èíôîðìàöèåé (à ýòî
ìíîãèå ìåãàáàéòû äèçàññåìáëåðíîãî ëèñòèíãà!). Åñëè êðèòè÷åñêàÿ ÷àñòü êîäà
çàøèôðîâàíà, ïðè÷åì íè â êàêîé ìîìåíò ðàáîòû ïðîãðàììû íå ðàñøèôðîâûâàåòñÿ ïîëíîñòüþ (ïðè âûõîäå â êàæäóþ ôóíêöèþ îíà ðàñøèôðîâûâàåòñÿ, à ïðè
âûõîäå çàøèôðîâûâàåòñÿ âíîâü), õàêåð íå ñìîæåò ïîëó÷èòü ãîòîâûé ê äèçàññåìáëèðîâàíèþ äàìï è áóäåò âûíóæäåí ïðèáåãíóòü ê òðàññèðîâêå. À âîò òóò
åãî áóäåò æäàòü âòîðîé ñþðïðèç!
Ñïîñîáû çàòðóäíåíèÿ àíàëèçà ïðîãðàìì
409
Êàê ïðîòèâîñòîÿòü òðàññèðîâêå
Ïðèíöèïèàëüíàÿ âîçìîæíîñòü ñîçäàíèÿ ïîäëèííî «íåâèäèìûõ» îòëàä÷èêîâ
áîëüøåé ÷àñòüþ ïðîñòî âîçìîæíîñòüþ è îñòàåòñÿ — áîëüøèíñòâî èç íèõ ïîçâîëÿåò îáíàðóæèòü ñåáÿ äàæå íåïðèâèëåãèðîâàííîìó êîäó.
Íàèáîëüøèå íàðåêàíèÿ âûçûâàåò èñïîëüçîâàíèå îäíîáàéòîâîãî êîäà 0xCC
äëÿ ñîçäàíèÿ òî÷êè îñòàíîâà âìåñòî ïîðó÷åíèÿ òîé æå çàäà÷è ñïåöèàëüíî äëÿ
ýòîãî ïðåäíàçíà÷åííûì îòëàäî÷íûì ðåãèñòðàì. Òàê ïîñòóïàþò Soft-Ice, Turbo
Debugger, Code Viewer è îòëàä÷èê, èíòåãðèðîâàííûé â Microsoft Visual Studio.
Ïðè÷åì ïîñëåäíèé íåÿâíî èñïîëüçóåò òî÷êè îñòàíîâà ïðè ïîøàãîâîì ïðîãîíå
ïðîãðàììû, ïîìåùàÿ â íà÷àëî ñëåäóþùåé èíñòðóêöèè ýòîò ïðåñëîâóòûé áàéò
0xCC.
Òðèâèàëüíàÿ ïðîâåðêà ñîáñòâåííîé öåëîñòíîñòè ïîçâîëÿåò îáíàðóæèòü ôàêò
óñòàíîâêè òî÷åê îñòàíîâà, ñâèäåòåëüñòâóþùèé îá îòëàäêå. Íå ñòîèò èñïîëüçîâàòü
êîíñòðóêöèè íàïîäîáèå if (CalculateMyCRC()!=MyValidCRC) {printf("Hello,
Hacker!\n");return;}, èõ ñëèøêîì ëåãêî îáíàðóæèòü è íåéòðàëèçîâàòü, ïîäïðàâèâ óñëîâíûé ïåðåõîä òàê, ÷òîáû îí âñåãäà ïåðåäàâàë óïðàâëåíèå íóæíîé âåòêå
ïðîãðàììû. Ëó÷øå ðàñøèôðîâûâàòü ïîëó÷åííûì çíà÷åíèåì êîíòðîëüíîé ñóììû
êðèòè÷åñêèå äàííûå èëè íåêîòîðûé êîä.
Ïðîñòåéøàÿ çàùèòà ìîæåò âûãëÿäåòü, íàïðèìåð, òàê:
Ëèñòèíã 221
int main(int argc, char* argv[])
{
// çàøèôðîâàííàÿ ñòðîêà Hello, Free World!
char s0[]="\x0C\x21\x28\x28\x2B\x68\x64\x02\x36\
\x21\x21\x64\x13\x2B\x36\x28\x20\x65\x49\x4E";
__asm
{
BeginCode:
; //íà÷àëî êîíòðîëèðóåìîãî êîäà
pusha
; //ñîõðàíåíèå âñåõ ðåãèñòðîâ îáùåãî íàçíà÷åíèÿ
lea
ebx,s0
; // ebx=&s0[0]
GetNextChar:
; // do
XOR
eax,eax
; // eax = 0;
LEA
esi,BeginCode ; // esi = &BeginCode
LEA
ecx,EndCode
; // âû÷èñëåíèå äëèíû...
SUB
ecx,esi
; // ...êîíòðîëèðóåìîãî êîäà
HarvestCRC:
; // do
LODSB
; // çàãðóçêà î÷åðåäíîãî áàéòà â al
ADD
eax,eax
; // âû÷èñëåíèå êîíòðîëüíîé ñóììû
LOOP HarvestCRC
; // until(—cx>0)
xor
[ebx],ah
; // ðàñøèôðîâêà î÷åðåäíîãî ñèìâîëà s0
inc
ebx
; // óêàçàòåëü íà ñëåä. ñèìâîë
cmp
[ebx],0
; // until (ïîêà íå êîíåö ñòðîêè)
jnz
GetNextChar
; // ïðîäîëæèòü ðàñøèôðîâêó
popa
; // âîññòàíîâèòü âñå ðåãèñòðû
EndCode:
; // êîíåö êîíòðîëèðóåìîãî êîäà
NOP
; // Safe BreakPoint here
}
410
Ñïîñîáû çàòðóäíåíèÿ àíàëèçà ïðîãðàìì
printf(s0)
return 0;
; // âûâîä ñòðîêè íà ýêðàí
}
Ïðè íîðìàëüíîì çàïóñêå íà ýêðàíå äîëæíà ïîÿâèòüñÿ ñòðîêà «Hello, Free
World!», íî ïðè ïðîãîíå ïîä îòëàä÷èêîì ïðè íàëè÷èè õîòÿ áû îäíîé òî÷êè îñòàíîâà, óñòàíîâëåííîé â ïðåäåëàõ îò BeginCode äî EndCode, íà ýêðàíå ïîÿâèòñÿ
áåññìûñëåííûé ìóñîð íàïîäîáèå: «Jgnnm."Dpgg"Umpnf#0».
Çíà÷èòåëüíî óñèëèòü çàùèòó ìîæíî, ïîìåñòèâ ïðîöåäóðó ïîäñ÷åòà êîíòðîëüíîé ñóììû â îòäåëüíûé ïîòîê, çàíèìàþùèéñÿ (äëÿ ñîêðûòèÿ ñâîåé äåÿòåëüíîñòè)
åùå ÷åì-íèáóäü ïîëåçíûì, òàê ÷òîáû çàùèòíûé ìåõàíèçì ïî âîçìîæíîñòè íå áðîñàëñÿ â ãëàçà.
Ïîòîêè âîîáùå âåëèêàÿ âåùü, òðåáóþùàÿ ê ñåáå îñîáîãî ïîäõîäà. ×åëîâåêó
î÷åíü òðóäíî ñìèðèòüñÿ ñ òåì, ÷òî ïðîãðàììà ìîæåò èñïîëíÿòüñÿ âî ìíîæåñòâå
ìåñò îäíîâðåìåííî. Ðàñïðîñòðàíåííûå îòëàä÷èêè ãðåøàò òåì, ÷òî îòëàæèâàþò
êàæäûé ïîòîê ïî îòäåëüíîñòè, íî íèêîãäà äâà è áîëåå ñðàçó. Ïðèâåäåííûé íèæå
ïðèìåð ïîêàçûâàåò, êàê ýòî ìîæíî èñïîëüçîâàòü äëÿ çàùèòû.
Ëèñòèíã 222
// Ýòà ôóíêöèÿ áóäåò âûïîëíÿòüñÿ â îòäåëüíîì ïîòîêå
// åå íàçíà÷åíèå íåçàìåòíî èçìåíÿòü ðåãèñòð ñèìâîëîâ â ñòðîêå,
// ñîäåðæàùåé èìÿ ïîëüçîâàòåëÿ
void My(void *arg)
{
int p=1;
// Óêàçàòåëü íà øèôðóåìûé áàéò
// îáðàòèòå âíèìàíèå, øèôðîâêà âûïîëíÿåòñÿ
// íå ñ ïåðâîãî áàéòà, ýòî ïîçâîëÿåò îáîéòè
// êîíòðîëüíóþ òî÷êó, óñòàíîâëåííóþ íà íà÷àëî áóôåðà
// âûïîëíÿòü äî òåõ ïîð, ïîêà íå âñòðåòèòñÿ ïåðåíîñ ñòðîêè
while ( ((char *) arg)[p]!='\n')
{
// îæèäàòü, ïîêà î÷åðåäíîé ñèìâîë íå áóäåò èíèöèàëèçèðîâàí
while( ((char *) arg)[p] --">
Книги схожие с «Фундаментальные основы хакерства. Искусство дизассемблирования» по жанру, серии, автору или названию:
Лидия Павловна Дыко - Основы композиции в фотографии Жанр: Советские издания Год издания: 1988 |
Кэти Биркенштайн, Джеральд Графф - Как писать убедительно. Искусство аргументации в научных и научно-популярных работах Жанр: Научная литература Год издания: 2014 |
Игорь Жордан - Искусство быть свидетелем, или как вести себя на допросе Жанр: Руководства и инструкции Год издания: 2015 |
Сунь Цзы - Искусство войны Жанр: Древневосточная литература Год издания: 2016 |
Другие книги автора «Крис Касперски»:
Крис Касперски - Восстановление данных. Практическое руководство Жанр: Сети Год издания: 2006 |
Крис Касперски - Компьютерные вирусы изнутри и снаружи Жанр: Компьютерная безопасность Год издания: 2006 |