Уроци по напукване

Въведение в кракване от нулата с помощта OllyDbg - Глава 25 [Рикардо Narvaha, транс. Aquila]

В тази глава ние смятаме да обработи изключенията, които обикновено са препъни-камък за начинаещи, но всъщност не е твърде сложно тема, макар и малко в нея, за да отидем по-надълбоко.







Изключение се създава програма, когато процесорът извършва неправилна експлоатация. Ще видите различни примери за това как това се случва в OllyDbg, защо отворен krekmi CrueHead "а.

Ние се намираме в точката на влизане и на първия ред ще пиша различни инструкции асемблер, които водят до изключения. Ние ще използваме начинаещи н Silver'a изключения и за илюстриране на конкретни примери от миналото.

Няма достъп до паметта. Това се случва, когато една нишка се опитва да получите достъп до паметта не е в режим, до които има права. Този вид изключение, като може да се случи, ако потокът ще се опита да напише нещо в клетката на паметта има само правото да я прочете.

OllyDbg пишат на следващия ред.

Всяка секция има първоначални настройките за достъп, съхранявани в заглавната част, преди програмата да не изпълнява функция на API, например VirtualProtect. което позволява да се променят настройките за достъп, определени първоначално, по време на изпълнение.

OllyDbg където можем да видим първоначалните параметри за достъп за всеки раздел и промени, ако е необходимо?

За да направите това, натиснете до бутона M.

Уроци по напукване

Виж, че точка, т.е., като се започне с 400 000 Първата, която е начело PE (изпълним файл), има малък размер 1000 байта, в които се съхраняват секции за данни, име, размер, като цяло, цялата необходима информация за файла се движат.

Разположен на глава чрез сметище.

Уроци по напукване

Уроци по напукване

В OllyDbg има опция за тълкуване на по-голямата част от заглавните параметри. Да бъдеш в сметище. щракнете с десния бутон на мишката.

Уроци по напукване

Уроци по напукване

Виждаме, че ние OllyDbg покаже разнообразието на информация, съдържаща се в заглавната си част.

Ако започнете да се понижат, първото нещо, което ще се срещнем - това е PE подпис. е стойността, която ни казва къде наистина е информацията в заглавието. Ние виждаме, че той съдържа 100, така че трябва да добавите този номер, за да се получи 400 000 и 400100. там.

Уроци по напукване

Както можете да видите, не се заблуждавайте - това е от тук, че важна информация за програмата.

Нека обясним по-подробно какво се има предвид някои от тези параметри.

Уроци по напукване

Уроци по напукване

Добре, продължавай титлата.

секции данни започват тук, ще видим, че секцията стартира в позиция 1000. т.е. 401000. и неговите характеристики са на кода. Се изпълни и да чете.

Ако искаме да имаме този раздел има разрешение за записване, трябва да промените стойността на това поле за 60000020 E0000020. Този номер се посочва правото на правото на всичко, хехе, ние се опитваме.

Уроци по напукване

Уроци по напукване

Добре, сега спаси стойностите, използвайки обичайната процедура.

Уроци по напукване

Уроци по напукване

Уроци по напукване

Промяна на името на CRACKME 3. да се знае, че това е модифицирана версия на нас.

Сега отворете тази crackme 3 OllyDbg.

Уроци по напукване

Уроци по напукване

Възстановяване на нормалния режим на показване DUMP "а.

Сега нека инструкцията, която е предизвикала грешка по време на запис.

Друго изключение е типът:

Деленето на 0 се нарича, когато се опитват да се разделят на номер 0.

Например, пише в OllyDbg:

Тук има разделение в ECX EAX. и ако последният е нула, изключение ще бъде хвърлен.

Уроци по напукване

Не винаги OllyDbg предостави ясна информация, в този случай, тя не каза, че има деление на нула. Ние скочи през изключение.

Невалиден инструкция се опитва да тече привилегирован инструкция. Това се случва, когато процесора се опитва да изпълнява една инструкция, които не са свързани с набора, тя поддържа, например, когато среща неизвестно работа.

Този случай, че не можем да се опитаме, както OllyDbg ни държи пита указанията не са там, но програмистът да настроите така, че процесорът няма да подкрепи, а след това ще се появи съответната грешка.

Известно е също много INT 3. който генерира изключение, и се използва от дебъгер, когато един нормален набор BPX. за спиране на програмата и да прехвърли управлението му до мястото, където INT 3 е наречен.

Също така, някои програми да причинят INT 3 пряко, това изключване е един от най-голям потенциал.

Има много други изключения, и ние няма да се разгледа. Ето един прост пример.

Сега знаем, че програмата може да генерира изключения, но това, което ако това се случи? Да разгледаме следната схема:

Уроци по напукване






На тази диаграма, която извади от урок SILVER'a, изобразен като изключение, при условие, че процесът е в процес на отстраняване на грешки.

Ако програмата е в процес на отстраняване на грешки контрол получава дебъгер, че (както е показано на снимката, изглежда, за да се види дали той може да контролира изключение или не, е почти винаги отговорът е да, и след това, ако опцията е активирана в отстраняване на грешки заведения за изключения за пропускане през този тип изключение, управлението се връща в програмата, ако не е включена, тя трябва да натиснете SHIFT + F9. т.е. на графиката, която казва CONTROLA LA EXCEPCION-SI няма снимка, показваща процеса на вземане на решения, за да спре или да продължи изпълнението на около гр в зависимост от по-горните варианти. Вижте следната схема.

Уроци по напукване

Тук ние виждаме целия процес напълно - добавя червената стрелка. След се прави определяне CONTROLAR LA EXCEPCION дали съответната опция, ако има спирка, ние с нетърпение очакваме да натиснете SHIFT + F9 дали да спрете или да продължите е необходимо за изпълнението на програмата, в зависимост от това, дали сте активирали.

На следващо място, ние виждаме, че когато се върнем от OllyDbg той се проверява дали инсталираната SEH. Ако отговорът е да, тогава отидете в него, ако не е, използвайте SEH по подразбиране. Тя може да изглежда сложно, но всъщност не е така. Нека обясня по-подробно.

SEH или структурирана Изключение Работа - е манипулатор, който се използва, за да се гарантира, че програмата е била в състояние да се възстанови от грешката, която е, ако не сте задали своя SEH -obrabotchik, когато възникне грешка, системата работи на водача, който показва съобщение за нас за тази грешка в заявлението, програма се затваря, и сбогом. С инсталирането на клиента SEH -obrabotchik на, ние можем да хване грешката, тя процес, и да се върне контрол на програмата, който вместо да изключите и досадни съобщения от системата ще продължи да работи.

Също така, въпреки че не са обмисляли сериозно конци, това е минимално определение на понятието: това е "нишки" на програмата или за части, които могат да работят едновременно, съответно, всяка нишка има своя собствена изключение манипулатор, който е, ако търговията го инсталирате, след това последният ще бъде извършва само в него, но не и в други.

Как да зададете изключение манипулатор

Добре, отново отвори krekmi CRUEHEAD'a и да видим стека.

Уроци по напукване

Това е SEH инсталирана система по подразбиране манипулатор, и тя ще работи при всяка грешка толкова дълго време, докато не бъде заменен от нашата собствена, като зловещо съобщение за грешка. Да видим къде са указатели към системата SEH-манипулатор.

Както можем да видим, в ПП: [0] е указател към текущия изключение манипулатор може да отиде тук в сметището.

Уроци по напукване

Уроци по напукване

Уроци по напукване

Уроци по напукване

И ако нека да преминем на VIEW-SEH ВЕРИГА:

Уроци по напукване

От krekmi CRUEHEAD'a не sobtsvennyh комплекти обработи изключенията, използваме примерната програма, наречена Smartmouse. който е прикрепен към тази глава.

Заредете в OllyDbg.

Уроци по напукване

Ottrassiruem стъпките и да обясни всеки един от тях.

Уроци по напукване

Следващият ред движи действителната стойност на FS: [0] битове на EAX. Да видим какво ще се равнява на FS: [0] чрез сметище.

Уроци по напукване

Уроци по напукване

Виждаме, че FS: [0] е 12ffe0. Можем да видим това, което е предвидено вид информация в това отношение OllyDbg.

Сега ние продължаваме тази линия.

Уроци по напукване

Преместване на тази стойност бита на EAX.

Сега като ги натиснете с тази стойност.

Уроци по напукване

SEH ВЕРИГА означава, че тя е верига. Съхранена стойност показва предишния треньор, който е активен в момента.

Последният ред променя съдържанието на FS: [0]. което поставя съдържанието на ESP. посочвайки, където новата структура.

Уроци по напукване

Уроци по напукване

След приключване на линия:

Уроци по напукване

Уроци по напукване

Това означава, че това е, което се случва, когато има изключение:

Уроци по напукване

Ако погледнем SEH верига. Сега ние виждаме:

Уроци по напукване

Виждаме, че там присъстват като активен манипулатор, задайте нас, и системата, която в момента не е действащ.

Повишаване на изключения в програмата.

Уроци по напукване

Промяна на тази линия, за да:

Уроци по напукване

Тя показва грешка и програмата се прекратява.

Сега програмата трябва prodozhit изпълнение с SEH-манипулатор, опитвайки се да се възстанови от грешката.

Уроци по напукване

Както можете да видите, OllyDbg винаги ни казва всичко, хехе, натиснете SHIFT + F9. да продължи програмата.

Както можете да видите, ще спрем в манипулатора. Ние знаем, какво прави и дали той може да се възстанови от сериозна грешка като промяна на програмния код.

Уроци по напукване

Виждаме, че не можем да продължим и да преминете към процесора на системата.

Уроци по напукване

Това се случи, защото грешката е много сериозно, че програмата не е в състояние да преодолее системата и предава управлението на манипулатора, който показа зловещо послание кутия и затваряне на приложението.

Очевидно е, че водачът е изключение, задаване на програмата се предвижда различен вид изключение, а не този, който е причинена в резултат на промени в кода, но да видим какво ще стане, ако има неконтролирано изключение.

За да се помисли за друг случай, в който изключение се обработва успешно, вижте krekmi SDUE. който е прикрепен към тази глава.

Отворете го в OllyDbg дебъгер и съобщение, че приложението може да samomodifitsirovatsya т.н. и т.н. Той ни казва, че krekmi опаковани.

Премахване на всички отметки, с изключение на първите в отстраняване на грешки заведения изключения.

Уроци по напукване

Спираме на изключването.

Къде е най-манипулатор:

Определете тук BP.

Определете тук BPX.

Спрете да отидете на процесора, което, ако няма странни промени трябва да бъдат отново на линия, следваща тази, която е предизвикала изключение, а след това програмата продължава.

BP ще се инсталира върху следния ред след този, в който се хвърля изключение, и кликнете следващия да се изпълнява.

Ние виждаме, че грешката е била обработена и програмата продължава да работи, без никакви съобщения за грешка.

Очевидно е, че ако искаме да останем в момента, когато програмата се създава изключение манипулатор, тогава е по-добре да се създаде хардуер BPX ON пишете на FS: [0]. В много случаи, DLL и определени товарачи, след това те се отстраняват и се връща в програмата са тези, които са били преди, и по-горе, че е възможно да се контролира монтажа и отстраняването по време на изпълнение.

Добре, аз мисля, че ние сме се счита полезна информация, която ще ни позволи да се движат по-навътре в напукване. В бъдеще ние ще разгледаме подробни примери на тази тема.

[C] Ricardo Narvaha, Acad. Aquila