програми за защита чрез разглобяване
Може би всеки от вас се сблъскват с проблема, че разлика в някаква странна прог. Ако това, предвижда проста замяна на информация, тогава вие не мислите, стартирайте вашия любим HEX зрителя и да се промени всичко това е възможно. Не винаги се постигне резултат, успя да запази размера на програмата. Но дори и тогава се охлади програмистът не спира и да започнете да си Disassembler (демонтаж - процес, чрез който програмата можете да получите изходния код на асемблер ... :). Ха днес известен tueva hucha приличен д / а, като IDA, Periscope, Bubble
Състав, Sourcer и т.н ...). Ако имате това все още, предлагам като се започне с IDA (Interactive Disassembler Pro), който можете да получите на
www.datarescue.com/idabase. Освен това, в резултат на ASM файлове се променят, което е необходимо, и след това се оформят отново
изпълнение на програма. Най-напредналите програмисти често, получени от източници, които се опитват да съставят програми за езици от високо ниво, независимо дали C, Fortran или Basic или Pascal. Този процес се нарича декомпилиране, защото на неговата сложност автоматично изпълнение са изключително редки. Декомпилира обикновено на ръка, докато търсите функции в началото и края. Например, низът се натъкват на "пуш ЕВР; Mov ЕВР, особено "може да се каже че това е началото на функцията, а" поп ЕВР; на забавяне "- неговия край. Така съвременните дизасемблер като IDA, които вече предоставят всички функции и задачата е възложена само да се разбере това, което правят.
Но ти започна да демонтира програмата и ... се не види :(. Вашият прог е издала много малко код и изпълнен с някои db с неразбираеми числа. В този случай, вие очевидно подозира, че нещо не е наред. Ако програмата е криптирана или защитени с нещо много страшно, не веднага трябва да го изхвърли и крещи "аз съм толкова отвратително и на препис! за сто години.", това е достатъчно, за да реализира това, което щеше да бъде не една програма е кодирана, тя себе си декодира да работят. добре. и след това просто трябва да се действа. Ако самата програма декриптира / декомпресира или esche_h_znaet_cht . _delaet, че е възможно част от програмата да се движи и да отнеме повече време, за да разопаковате КОД Има и друг подход по принцип не се различава от предишната: да стартирате програмата, както и по време на изпълнението рекорд използва паметта й на диск.
Обикновено, кодирани програми, включително и полиморфни вируси :) шифроват няколко пъти, и те могат да се движат или дори да променят кода си, работят декодираната информация за по-нататъшно разопаковане, добре, както и да използва други подходи са объркващи. От това следва, че използването на Disassembler е нерентабилно. За тази цел програмата изглежда изгодна последователно изпълни една инструкция (т.нар проследяване - следи) или извършване на инструкциите на програмата за предварително определен / памет. Тези функции са почти всички дебъгерите (дебъгерите). Не ми казвай, че имате такива. Дори и в DOS (и mastdayke вкл) е програма, отстраняване на грешки - най-проста дебъгер. Но, за съжаление, 16-битов, и като цяло, не отговаря на изискванията на програмисти стръмни. Като цяло, почти всеки език за програмиране има дебъгер. В Borlandovskih (Turbo Assembler (TASM), Borland на C ++) - серия от TD (Turbo Debugger). TD - за програмите си DOS, TDW - за vindovskih. TDW но често не вземат програмата с PE / NE заглавна 32bit. След това смело започнете TD32. Да не забравяме и Microsoft. Техните продукти (Microsoft Assembler, MASM) могат да бъдат намерени CodeView дебъгер (CV, CVW). Сравнително наскоро се появи NuMega комунални услуги пакет компания Compuware, вижте
www.numega.com. Debugger NuMega SoftICE (winice) позволява debaggit дори ядрото, както и лесно да преглеждате всички нишки са процеси и прозорци. Той често идва в комплект BoundsChecker.
Сега имаме всичко, за да се прекъсне. Вие работите с програма в дебъгер е необходимо, и да изпълни в съответствие с инструкциите ... 🙂 terpezha ако не е достатъчно, след това сложи точка на прекъсване на изхода от цикъла и стартирайте програмата от мястото, където сте спрели. Програмата ще прехвърли контрола на дебъгер, преди да изпълни инструкциите отбелязани breakpointom. В повечето breakpointy представляват прекъсване (по-точно, в капана), който замени маркирана инструкция. Защо пиша това. - просто
пазете се, че програмата не замества инструкциите на която точка на пречупване, след което той може
. Изгубени и програмата ще продължи до края :-( Добре, да кажем, че сме достигнали точката, където започва действителното декомпресира програмата ... поне колкото си мислиш, но в действителност това може да бъде продължение на декодера :. D Сега можете да запишете всички получени каша като EXEshnik. Но просто не забравяйте вашата нова входна точка, и
Уверете се, че да се регистрирате стойността на запазена ... и изведнъж те ще продължат да се използват. Заглавие можете да видите с помощта на хладно полезност HIEW (хакера View), като SEN (ftp.kemsc.ru/pub/sen). Ако прог дос твърди - MZ хедър vindovskaya на - най-вече PE.
Сега да разгледаме някои начини за защита на програми от обратен инженеринг. Ако сте - на хладно програмист, да направи една готина прог, а по някаква причина искате да скриете своя код (и може би някой ще забележите, че е любимата ми troyanchika.), След това първото нещо, което идва на ум - да го криптирате. Тук можете да разглежда книгите по криптография, смешно, но в крайна сметка осъзнават, че аспиратор е твърде проста. Също така мога да само да не предлагат криптирана, но също така се опаковат Стар. Ако не знаете нещо - първото нещо, което ще излезе, ще RunLengthEncode, но те се опаковат кода - мъртъв стая. По-добре е да използвате някои модификации на алгоритъма LZW. Той, или по-скоро неговите модификации се използват в много архиватори (RAR, ZIP), графичен файл във формат GIF, дори PDFah те опаковат EXEshniki (PKLite). Сега, когато е в основата на, мисля за това как да развалят любителите на живот, за да отворите програмата. Първо, можете да шифровате част от unpacker, като цяло, така че да може да криптира парче по парче програма, както и няколко пъти шифроват transcribers :), а след това друг, криптиране на всички заедно :))). Можете лесно да се смесват части от програмата, който също може да доведе до объркване.
В допълнение, можете да излезе с по-ефективни начини за защита. Смятате ли, че ще бъде в регистрите след изпълнение на следващия раздел код:
Label1: Mov брадва, 1ab8h
Mov BX, 06bbh
Mov CX, 00b9h
Mov DX, 01bah
Mov си, 0ffbeh
Mov ди, 32bfh
JMP Label1 + 1
Правилният отговор е: BX = 0x0b906; CX = 0x0ba00; DX = 0x0be01; Si = 0x0bfff; ди = 0x0eb32. Те не разбират защо. След това и protrassiruyte компилирате. За да премахнете предупреждение breakpointy изпълним код може да бъде променена, например, увеличаване или намаляване на следното твърдение може да се постави на техните маски, сгъване, или просто презапишете. По този начин всеки път, когато последващо обучение може да се промени:
натиснете CS
поп DS
Mov гл, 0ebh
Mov ESI, офсет $ или LABEL2: Mov ESI, офсет LABEL2
добавете байт PTR [ESI + 07] 08
под байт PTR [ESI + 10], 5
db отн
Този фрагмент се извършва по отношение на прехода към отн байта (еквивалентни на Jmp кратко PTR отн). Можете да (трябва) да се защитят от програмата ... проследяване. Да, това е чрез проследяване. Е, няма мозък, че проследяването е много по-дълго от нормалното изпълнение на програмата. Той също така може да се използва. По-долу съм се осигури фрагмент, който причинява получите функция DOS "
Време ":
Mov ах, 2 канала; Get Time
Int 21h; обадете DOS услуги
натиснете DX; DH - секунди, DL - стотни от секундата (0-99)
Mov ах, 2 канала; Get Time
Int 21h; обадете DOS услуги
поп брадва; ах - секунди
СМР DH, ах
JZ продължи
; Пипнах.
Ако времето не се е променило в секунди, можете да пропуснете етикета продължи, в противен случай програмата продължава. Ами ... тук можете да сложите и на ниско ниво форматиране на диск 80H (Е, C: Искам да кажа ...). Това е особено вредно за хора като мен: р, а останалите ... Съветвам ви просто блокира и операционната система.
Дори по-горе фрагмент, в действителност, може да го проследи много по-бързо на второ място, за да мога да ви посъветва да вмъкнете запитвания време в различни части на програмата,
можете дори да различен опаковани като разопаковате много по-бързо проследяване.
Освен това, сравнение на секунди може да бъде отложено до следващия раздел на код, така че да не се открояват особено, и веднага след това заподозрян: първо изглеждаше много време, а след това да се сравни с нещо, и защо. ... Често много бисквити (включително и аз) да предизвикат подозрения условни клон на инструкции, така че би било по-добре да го напиша всичко, без да ги:
В действителност, вие все още може да излезе с начини да Tuyev huchu прах мозъци крадци, така, че някой в тази много :). Ние вярваме, че програмата е добре криптиран. Остава да го направи на практика. Надявам се, че не е нужно желанието да се опаковат EXEshnik изцяло. Е, ако това е така, и ти не си мисли как да го направя, подсказва: в EXEshnikov може да промени входната точка ... т.е. да вместите Стария компилиран и декодер прикачвате долу :). Вие не искате да? Просто? Моля, - знам, например,
C ++ Buildere на такава функция за съставяне на файла си в ... монтаж източник (той се е ползвал), така че не се колебайте да Arm асемблер и напред. Е, един от най-забавните начини - опаковат отделна процедура, просто поставете монтаж код в програмата ... В крайна сметка, можете да създадете * .lib, * .obj или * .dll файл и извратил над тях. Има някой, който повече
като. Основното нещо, което gimor по-малки и ... работи!
Покажете тази статия на приятел: