Недавно сидел над парой crackme. Почерпнул для себя кое-что новое. Решил их объединить.И получилось вот что http://slil.ru/23040639/1212340730/CrackMeT.rar. Писал на MASM, поэтому там всё будет ясно. Мусорить я почти не стал (лень ), антиотладки нет (лень ). CrackMe достаточно простой, зачем было упираться всё равно крякнете. Хотя если вам понравится можно всё это добавить. Просто пара интересных (на мой взгляд) приёмов. CrackMeT.exe - 3,55 Kb. CrackMeT.rar - 1,00 Kb Нужно подобрать два пароля и вылетит MessageBox.
Нда, ну и крякми. Ща чуток осталось. Придумать Первый пасс 131313, так как после вычитания константы получим WM_GETTEXT Теперь осталось придумать 0xC байт, чтобы они образовали вызов MessageBox с кэпшэном Сообщение, и текстом Молодец
Да первый пасс 131313. Со вторым пришлось повозиться. На практике с переполнением ещё не связывался (все примеры на сях ). В crackme это редкость. Ещё лёгкий для превращения в ASC|| адрес трудно было подобрать. Спасибо на добром слове . Кстати завтра вечером уезжаю в Питер. Я поступил в институт. Комп и инет не знаю когда будут. Ищу друзей. Извините что здесь пишу. Просто здесь самая подходящая для меня компания. На все вопросы по crackme я отвечу завтра (скорее всего). Будет очередной запой с друзьями.
Вписывать с пробелом и собакой если кто не понял) PS Из всех выложенных здесь крякмисов этот пожалуй самый оригинальный, так, что молодец ТАНА.
Нда, я и не заметил этот адрес Хотя по импорту смотрю и думаю, что раз есть импорт MessageBoxA, значит и вызываться откуда-то должно.
Юзай Alt-M в ольке, в секции кода небыло MessageBox(и зашифрованных участков кода тоже, где бы он мог быть), значит он был вынесен в другую секцию, вообще лучше было бы если бы TANA вынес его в секцию .data например или хотя бы назвал ту секцию в которой он был не так навязчиво - TEXT2, а то сразу в глаза бросается.
второй пасс - переполнение формат: AAAABBBBCCCC A- нормальные байты B- перезатрка ebp С - перезатирка eip (+перезапись адреса нулем, но в нашем случае неопасно, а скорее преднамеренно) CCCC меняем на 00402034 - адрес начала ф-ии с месагбоксом. получаем строку "AAAABBBB4 @A" вводим и получаем "Молодец - Да Нет Справка"
Смотрим, что в конце функции такой код: 00401122 |> 83C4 04 ADD ESP,4 00401125 |. 5D POP EBP 00401126 |. 90 NOP 00401127 \. C2 0400 RETN 4 Это говорит о том, что при выходе из функции адрес возврата будет находится по адресу esp+8, поидее, если бы там дальше юзался ebp то прога бы упала, т.к. он затирается и мы не в силах это изменить, ну а т.к. там дальше никаких локальных переменных нет, то можно спокойно первые 8 байт вставлять какими угодно, а вот остальные 4 должны формировать адресс возврата, после символ должен быть нулём, т.е. нам надо вписать только 3 символа, что и было сделано. sn0w это называется не затирка eip, а адресс возврата при retn он берётся с верхушки стека, т.е. из [esp].
Про секцию обижаешь - я написал, что MessageBox не вызывается, но импортируется. Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно. Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро А вообще мне это не нравится - всё равно что MD5 с RSA - без брута х с маком, а брутить как понимаешь влом.
Угу и защита такая на практике держится до первой скарженной копии) Это точно, да и вряд ли кто бы искать стал, поэтому-то и приветствуются крякмисы на асме, потому что в нём(crackme) ты показываешь чисто свои достижения(?) в написании защиты, а не преимущества обфускатора(в роли которого на ЯВУ выступает компилятор).
Ёптить, любая защита до первой скарженой версии держится. Да ну. Вряд ли ты бы стал показывать в крякми свои новейшие наработки, чтобы их засветить. А когда фишка известна, надо её просто усложнить. Поэтому имхо если фишка известна, то делать нефик и надо усложнять. Но MD5 эт канешна перегиб
Не, ну многие и без одного валидного ключа можно отвязать. Новейшие конечно нет, но то, что для тебя давно боян для других людей достижение, поэтому я и поставил (?) в своём посте выше после "достижениями".
. Можно было и в .data. Я искал адрес без всяких символов, чтоб 2 @ и всё. И хотел немного упростить поиск MessageBoxA. А то вынес в другую секцию. И потом этот crackMe обошёлся мне в час (пришлось с адресами повозиться), я не сильно сатрался всё усложнить. Поэтому и на MASM . Задачей было не написание неломаемого crackMe, а просто показать эти два приёмчика. С удовольствием!! Питер держись!! Я выезжаю уже сегодня, буду через два дня (с половиной). И ещё !! Когда начинаешь программировать на ассемблере, начинает сильно не хватать строковых функций. Ты не сразу понимаешь, что это плюс потому,что самому можно напсать что хочешь. Я хотел написать статью для начинающих кодеров, которые в первый раз столкнулись со всякими repne scasw, repe cmpsb. Короче я написал lib'у, в ней 6 функций, полностью написанных на асме. Но в связи с отъездом написание статьи откладывается на неопределённый срок. Функции делают тоже что и их аналоги в JavaScript. Не проподать же добру. Может кому пригодится, а может кто и стаью напишет. Писал для статьи поэтому без коментариев, коментарии должны были быть потом. http://slil.ru/23043656/1424225155/jsF.lib.rar Функции: indexOf, charAt, substring, sub, sup, length Теперь у вас есть примеры, может кто чего допишет, для защиты программ приспособит. Хотябы для украшения crackMe сойдёт. Помните тот скрипт с печатающейся строкой.
Все нужные функции для работы со строками унаслодовенаы из сишных библиотек(lstrlen lstrcat lstrcmp и т.д.) или есть в либе, которая по умолчанию поставляется в комплекте masm - masm32.lib, её сорсы так же лежат в открытом виде в папке m32lib.