Просмотр полной версии : не совсем мой 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].
ДПросто здесь самая подходящая для меня компания.
ну тогда ВЛИВАЙСЯ! всегда рады =)
ЗЫ: жаль 4то запоздал и крякми вовремя не заметил =(
BugorLol4 @A :D :D ... адрес не с диска, адрес с дампа ;)
BugorLol4 @A ... адрес не с диска, адрес с дампа
Чего чего?
Про секцию обижаешь - я написал, что MessageBox не вызывается, но импортируется. Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно.
Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро :) А вообще мне это не нравится - всё равно что MD5 с RSA - без брута х с маком, а брутить как понимаешь влом.
2Bugor: да я пошутил, чувак)
Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно.
Угу и защита такая на практике держится до первой скарженной копии)
Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро
Это точно, да и вряд ли кто бы искать стал, поэтому-то и приветствуются крякмисы на асме, потому что в нём(crackme) ты показываешь чисто свои достижения(?) в написании защиты, а не преимущества обфускатора(в роли которого на ЯВУ выступает компилятор).
Угу и защита такая на практике держится о первой скарженной копии)
Ёптить, любая защита до первой скарженой версии держится.
потому что в нём(crackme) ты показываешь чисто свои достижения(?) в написании защиты
Да ну. Вряд ли ты бы стал показывать в крякми свои новейшие наработки, чтобы их засветить. А когда фишка известна, надо её просто усложнить. Поэтому имхо если фишка известна, то делать нефик и надо усложнять. Но MD5 эт канешна перегиб :)
Ёптить, любая защита до первой скарженой версии держится.
Не, ну многие и без одного валидного ключа можно отвязать.
Да ну. Вряд ли ты бы стал показывать в крякми свои новейшие наработки, чтобы их засветить. А когда фишка известна, надо её просто усложнить. Поэтому имхо если фишка известна, то делать нефик и надо усложнять. Но MD5 эт канешна перегиб
Новейшие конечно нет, но то, что для тебя давно боян для других людей достижение, поэтому я и поставил (?) в своём посте выше после "достижениями".
TEXT2, а то сразу в глаза бросается.. Можно было и в .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.
Да ты прав, но надо самому научиться писать то что тебе нужно.
BUG(O)R!!!!! Ща только мысль пришла, в crackMe можно было написать функцию, которая меняет все символы в строке местами. И тогда надо было бы подставить адрес в строку так, чтобы при подмене символов образовалась строка с адресом на конце.
И что-нибудь посложнее намудрить с константой при вычислении 0Dh(GETTEXT).
Вот это был бы crackMe.
в crackMe можно было написать функцию, которая меняет все символы в строке местами.
Ну прибавь к времени взлома ещё 10 минут на разбор этой функции.
ещё 10 минут Смотря какая функция. И потом это будет на много интересней чем просто подставить аддрес. Я тут писал одну сам чуть не запутался с внедрением.
А без разницы какая функция в данном случае, можно же посмотреть какие данные на входе и на выходе, сравнить и составить нужную последовательность, это 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).
Самое интересное использовать алгоритмы для хранения в ключе имени юзверя, пасса мыла длителдьности лицензии и всего прочего. Ждите крякми, основаннйы как раз на этом ;)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot