Уроци по напукване
Въведение в кракване от нулата с помощта 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