Премахване на паролата от тестовете и MyTestX easyQuizzy
Да започнем с това, ние се обясни най-тривиален проблем: как да получите .exe-файл от файла с тест - .mtf (говорим за MyTestX).
Вземете .exe-файл, който съдържа теста (взех копие от форума), и да го отворите в CFF Explorer. Веднага отидете на раздела "Resource Directory" в лявата колона, а след това, в списъка отдясно, търси "Resource Directory Влизане AKA :. RCDATA", отворете падащия списък и там търси "Resource Directory Влизане AKA :. МТА".
Този ресурс е всъщност .mtf-файл, който ни интересува. Сега трябва да го премахнете. За това ние се обръщаме към последното дете елемент от по-горе ресурс - "Ресурс за въвеждане на данни". Изберете го и вижте долната половина на прозореца на атрибутите си, ние сме заинтересовани в областта "OffsetToData" и "Размер".
Нека си припомним, че стойността на полето "OffsetToData" и преминаването към "Адрес Converter" в ляво. Сега, въведете стойност в полето RVA - имаме физическото преместване на ресурса от началото на файла ( "Файл отместване") на интереси.
Натиснете Debug-> Run и поднови молбата. На следващо място, щракнете с десния бутон някъде в горния ляв прозорец дебъгер. В менюто, което се показва, изберете Go притежавани до> Expression, в прозореца, който се показва, въведете ReadFile (WinAPI името функция, която е вероятно да бъдат използвани, за да се запознае със съдържанието на файла с теста) на.
В списъка по-долу изберете kernel32.ReadFile и натиснете бутона "Follow израз". Ние сме на функцията за начало ReadFile, сега трябва да се сложи точка на прекъсване, за да следите програма за лечение на функция. Сложихме точка на прекъсване, за това щракнете с десния бутон върху маркирания ред на събранията код и изберете Breakpoint-> Превключване. Като цяло, преди да сложи точка на пречупване, най-доброто за първи път през MyTestEditor предизвика отварянето на диалоговия прозорец на тест, в противен случай няма да пропуснете много обаждания (F9) към ReadFile не представлява интерес за нас, места, те могат да се определят от стойността на върха на рамката на стека (долния десен прозорец дебъгер, низ текст "Връщане от kernel32.ReadFile да."). Ние сме заинтересовани обаждане ще изглежда по следния начин:
След като хвана правилното лечение (това се случва, когато сме в тест за диалог отваряне избираме нашия тест, защитена с парола, и натиснете "Open"), се вгледате внимателно в долния десен прозорец дебъгер (в който ние виждаме, трасиране на стека), превъртете надолу до търсене низ, който представлява пълния път до файла с теста (ние се интересуваме от този комин кадрите, тъй като най-вероятно се е образувала в интерес на нас функция).
Ние продължаваме програмата (F9 или Debug-> Run). След известно време, програмата отново спре да работи нашата svezhepostavlenny хардуер прекъсване. Аз предизвика мястото изглеждаше нещо като това:
Напомнящ някои междинна функция за работа с файла, така че ние използваме няколко пъти опция Debug-> Execute до завръщане (Ctrl + F9), но все пак се намираме в код "на високо ниво", на мястото, където провала на основната обработка на файлове логиката на изпитание.
Очакваме през кода. Ние се интересуваме от всички видове разклонения (JE, JNE, JZ, jnz, и т.н.), които скачат повече или по-малко впечатляващи кодови фрагменти, казват от 5 инструкции. Някои сайтове веднага пропуснати, където, както ми се стори, направени безинтересна действие, като в този пасаж:
Напомня тестова версия на теста. Мислех, че така веднъж, но може да се види и с опит като поставя точка на прекъсване на инструкции за условен клон и промяна на стойността на Z-флаг в прозореца на регистър на правото, когато изпълнението на програмата е прекъсната на този сайт. Проходи малко надолу и се вливат в следващата група условни отрасли:
Нека челото флаг Z-промяна на всеки преход. Т.е. MyTestStudent отворим прозорец за избор на файл с теста, ще се постави точка на пречупване на един от преходите, в диалоговия прозорец, изберете тестов файл, който е защитен с парола свидетел кутия накара въвеждане на паролата, въведете в никакъв текст, тогава ние трябва да работим предварително настроен точка на прекъсване, ние променяме Z-флага и да продължи програмата натиснете F9 за.
Ние ще видим, че в горните два текста, промяна на програмата Z-флаг затваря, а след това се отвори браузър, който отвори врати на уебсайт с фрагмент от законодателството: някои самостоятелно направени "защита" от обикновен грабеж. Въпреки това, когато промените условно клон логика, която се намира точно под, можем да видим, че програмата предлага предварителен тест, но след това, програмата все още завършени работата си и да отворите браузъра.
За да отворите браузъра е вероятно да се използва функция WinAPI ShellExecute. Ние се провери нашето предположение: отново, щракнете с десния бутон някъде в най-горния прозорец ляв дебъгер, поп-меню изберете Отиди притежавани до> Expression, в прозореца, който се появява, въведете името на нашата функция, отидете в началото на функцията и да го сложи точка на прекъсване. Отново прави промени логиката на последните, ние се интересуваме от, условно разклоняване, както и нашата гранична стойност се задейства:
Ние използваме няколко пъти Debug-> Execute до връщане (или Ctrl + F9), за да се върнете от дълбините и в блока за shell32.dll MyTestEditor (следват заглавието на дебъгер прозорец, където в момента е писано "[CPU - главен нишка, модул Shell32 ] "). Почти веднага да навлезем в място като това:
Тук ние виждаме друг условен преход, че трябва да се определи (в движение, или подмяна на условен скок към абсолютната - JMP). Оказва се, че ние трябва да се коригира два условно преход, за да може да се отвори сигурен тест чрез въвеждане на всяка парола. Замяна и проверка:
Превключване към основните изпълним easyQuizzy модул дебъгер (View-> Изпълними модули, кликнете два пъти върху името на модула, се уверете, че в текста се съдържа в заглавието на прозореца: ". Модул easyQuizzy"). Щракнете с десния бутон в дебъгер и да намерите всички низови ресурси, за които има препратки в изпълнимия код.
Пред нас е даден списък на редовете, показани в една голяма маса, ние откриваме в нея съответствие с посланието за неправилна парола и ги сложете breakpoint'y.
Ние се опитваме да се отвори сигурен тест и веднага хвана breakpoint'a работа.
Ние бяхме вътре в забавна функция, където можем да наблюдаваме пас доста голям фрагмент от условна скок код, в допълнение пропускания съдържа препратка към низа "Грешна парола.".
Но тъй като всички ние се намираме в тази програмка? Обява превъртете нагоре малко и ще видите много по-интересно конвенционален едно: тя позволява дори да пропуснете функция на разговор, в който се показва диалогът ние да въведете парола.
Ние се опитваме да се промени логиката на работата си (например, чукане условен скок NOPs) - готово, сигурен тест открива без да пита за парола.
Също така аз препоръчвам четене