![]() |
не совсем мой crackme
Недавно сидел над парой 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 я отвечу завтра (скорее всего). Будет очередной запой с друзьями. :( :( |
Первый пароль: 131313
Второй пароль: 132132652 @ |
Вписывать с пробелом и собакой если кто не понял)
PS Из всех выложенных здесь крякмисов этот пожалуй самый оригинальный, так, что молодец ТАНА. |
Нда, я и не заметил этот адрес :( Хотя по импорту смотрю и думаю, что раз есть импорт MessageBoxA, значит и вызываться откуда-то должно.
|
Юзай Alt-M в ольке, в секции кода небыло MessageBox(и зашифрованных участков кода тоже, где бы он мог быть), значит он был вынесен в другую секцию, вообще лучше было бы если бы TANA вынес его в секцию .data например или хотя бы назвал ту секцию в которой он был не так навязчиво - TEXT2, а то сразу в глаза бросается.
|
второй пасс - переполнение
формат: AAAABBBBCCCC A- нормальные байты B- перезатрка ebp С - перезатирка eip (+перезапись адреса нулем, но в нашем случае неопасно, а скорее преднамеренно) CCCC меняем на 00402034 - адрес начала ф-ии с месагбоксом. получаем строку "AAAABBBB4 @A" вводим и получаем "Молодец - Да Нет Справка" :D |
Смотрим, что в конце функции такой код:
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]. |
Начало функции 403032
|
Цитата:
ЗЫ: жаль 4то запоздал и крякми вовремя не заметил =( |
BugorLol4 @A :D :D ... адрес не с диска, адрес с дампа ;)
|
Цитата:
|
Про секцию обижаешь - я написал, что MessageBox не вызывается, но импортируется. Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно.
Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро :) А вообще мне это не нравится - всё равно что MD5 с RSA - без брута х с маком, а брутить как понимаешь влом. |
2Bugor: да я пошутил, чувак)
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
И потом этот crackMe обошёлся мне в час (пришлось с адресами повозиться), я не сильно сатрался всё усложнить. Цитата:
Задачей было не написание неломаемого 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.
|
Да ты прав, но надо самому научиться писать то что тебе нужно.
BUG(O)R!!!!! Ща только мысль пришла, в crackMe можно было написать функцию, которая меняет все символы в строке местами. И тогда надо было бы подставить адрес в строку так, чтобы при подмене символов образовалась строка с адресом на конце. И что-нибудь посложнее намудрить с константой при вычислении 0Dh(GETTEXT). Вот это был бы crackMe. |
Цитата:
|
Цитата:
|
А без разницы какая функция в данном случае, можно же посмотреть какие данные на входе и на выходе, сравнить и составить нужную последовательность, это 10 минут максимум.
|
Это не так посто. Может функция несколько раз меняла положение одного и тогоже символа, этож сколько вариантов надо просчитать, её всё равно придётся рабирать.
|
Не знаю в общем, может быть о разных вещах говорим, попробуй напиши то, о чём ты говоришь, а я мы посмотрим на сколько это усложнит задачу)
|
Я написал, но получилось слишком просто (Нужно алгоритм придумать).
Я говорю о том. Уммммммммм..... Например. Нужна строка: "123456782 @", но чтобы прога поняла его, тебе нужно ввести "18@64 23572", при том что адрес функции с MessageBox'ом "2 @". Можно впринципе ещё и циферки проверять чтоб именно "18@64 23572". Врубаешся!! ;) Так об одном и том же или нет?? |
Ну вот пример. Алгоритм не оптимизирован, очень далёк от совершенства. Но это всего лишь пример. Пасс1: 131313, Пасс2: 1 34567822@ (онже 3 18546722@).
Вот линк http://slil.ru/23044564/1564212072/CrackMeT2.rar. |
Да об одном и том же, не слишком это усложнит взлом, лишь продлит жизнь твоего крякмиса.
|
Ладно, BUG(O)R, ты взломаешь, а как остальные. Это пустой спор так как всё будет зависеть от опыта cracker'а и алго.
|
шифр простой замены? а смысл, если таблица подподсьановоок будет находится внутри?
|
Интересней будет составить какой-то определённый ответ чем просто (xxxxxxxxXXX).
|
Самое интересное использовать алгоритмы для хранения в ключе имени юзверя, пасса мыла длителдьности лицензии и всего прочего. Ждите крякми, основаннйы как раз на этом ;)
|
| Время: 10:38 |