PDA

Просмотр полной версии : не совсем мой crackme


taha
21.08.2006, 13:49
Недавно сидел над парой crackme. Почерпнул для себя кое-что новое.
Решил их объединить.И получилось вот что http://slil.ru/23040639/1212340730/CrackMeT.rar.
Писал на MASM, поэтому там всё будет ясно. Мусорить я почти не стал (лень ;) ), антиотладки нет (лень ;) ). CrackMe достаточно простой, зачем было упираться всё равно крякнете.
Хотя если вам понравится можно всё это добавить.
Просто пара интересных (на мой взгляд) приёмов.
CrackMeT.exe - 3,55 Kb.
CrackMeT.rar - 1,00 Kb
Нужно подобрать два пароля и вылетит MessageBox.

Ra$cal
21.08.2006, 14:25
Нда, ну и крякми. Ща чуток осталось. Придумать :) Первый пасс 131313, так как после вычитания константы получим WM_GETTEXT
Теперь осталось придумать 0xC байт, чтобы они образовали вызов MessageBox с кэпшэном Сообщение, и текстом Молодец

taha
21.08.2006, 14:36
Да первый пасс 131313. Со вторым пришлось повозиться. На практике с переполнением ещё не связывался (все примеры на сях :( ). В crackme это редкость. Ещё лёгкий для превращения в ASC|| адрес трудно было подобрать.
Спасибо на добром слове ;) .
Кстати завтра вечером уезжаю в Питер. Я поступил в институт. Комп и инет не знаю когда будут. Ищу друзей. Извините что здесь пишу. Просто здесь самая подходящая для меня компания.
На все вопросы по crackme я отвечу завтра (скорее всего).
Будет очередной запой с друзьями. :( :(

BUG(O)R
21.08.2006, 14:56
Первый пароль: 131313
Второй пароль: 132132652 @

BUG(O)R
21.08.2006, 14:56
Вписывать с пробелом и собакой если кто не понял)

PS Из всех выложенных здесь крякмисов этот пожалуй самый оригинальный, так, что молодец ТАНА.

Ra$cal
21.08.2006, 15:29
Нда, я и не заметил этот адрес :( Хотя по импорту смотрю и думаю, что раз есть импорт MessageBoxA, значит и вызываться откуда-то должно.

BUG(O)R
21.08.2006, 16:51
Юзай Alt-M в ольке, в секции кода небыло MessageBox(и зашифрованных участков кода тоже, где бы он мог быть), значит он был вынесен в другую секцию, вообще лучше было бы если бы TANA вынес его в секцию .data например или хотя бы назвал ту секцию в которой он был не так навязчиво - TEXT2, а то сразу в глаза бросается.

sn0w
21.08.2006, 18:50
второй пасс - переполнение
формат: AAAABBBBCCCC
A- нормальные байты
B- перезатрка ebp
С - перезатирка eip (+перезапись адреса нулем, но в нашем случае неопасно, а скорее преднамеренно)

CCCC меняем на 00402034 - адрес начала ф-ии с месагбоксом.

получаем строку "AAAABBBB4 @A"
вводим и получаем "Молодец - Да Нет Справка" :D

BUG(O)R
21.08.2006, 19:12
Смотрим, что в конце функции такой код:

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].

BUG(O)R
21.08.2006, 19:13
Начало функции 403032

ProTeuS
21.08.2006, 19:23
ДПросто здесь самая подходящая для меня компания.
ну тогда ВЛИВАЙСЯ! всегда рады =)

ЗЫ: жаль 4то запоздал и крякми вовремя не заметил =(

sn0w
21.08.2006, 19:28
BugorLol4 @A :D :D ... адрес не с диска, адрес с дампа ;)

BUG(O)R
21.08.2006, 19:38
BugorLol4 @A ... адрес не с диска, адрес с дампа

Чего чего?

Ra$cal
21.08.2006, 20:38
Про секцию обижаешь - я написал, что MessageBox не вызывается, но импортируется. Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно.
Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро :) А вообще мне это не нравится - всё равно что MD5 с RSA - без брута х с маком, а брутить как понимаешь влом.

sn0w
21.08.2006, 21:24
2Bugor: да я пошутил, чувак)

BUG(O)R
21.08.2006, 22:03
Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно.

Угу и защита такая на практике держится до первой скарженной копии)

Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро

Это точно, да и вряд ли кто бы искать стал, поэтому-то и приветствуются крякмисы на асме, потому что в нём(crackme) ты показываешь чисто свои достижения(?) в написании защиты, а не преимущества обфускатора(в роли которого на ЯВУ выступает компилятор).

Ra$cal
21.08.2006, 22:19
Угу и защита такая на практике держится о первой скарженной копии)
Ёптить, любая защита до первой скарженой версии держится.

потому что в нём(crackme) ты показываешь чисто свои достижения(?) в написании защиты
Да ну. Вряд ли ты бы стал показывать в крякми свои новейшие наработки, чтобы их засветить. А когда фишка известна, надо её просто усложнить. Поэтому имхо если фишка известна, то делать нефик и надо усложнять. Но MD5 эт канешна перегиб :)

BUG(O)R
21.08.2006, 22:53
Ёптить, любая защита до первой скарженой версии держится.

Не, ну многие и без одного валидного ключа можно отвязать.

Да ну. Вряд ли ты бы стал показывать в крякми свои новейшие наработки, чтобы их засветить. А когда фишка известна, надо её просто усложнить. Поэтому имхо если фишка известна, то делать нефик и надо усложнять. Но MD5 эт канешна перегиб

Новейшие конечно нет, но то, что для тебя давно боян для других людей достижение, поэтому я и поставил (?) в своём посте выше после "достижениями".

taha
22.08.2006, 05:49
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 сойдёт. Помните тот скрипт с печатающейся строкой.

BUG(O)R
22.08.2006, 10:09
Все нужные функции для работы со строками унаслодовенаы из сишных библиотек(lstrlen lstrcat lstrcmp и т.д.) или есть в либе, которая по умолчанию поставляется в комплекте masm - masm32.lib, её сорсы так же лежат в открытом виде в папке m32lib.

taha
22.08.2006, 11:04
Да ты прав, но надо самому научиться писать то что тебе нужно.
BUG(O)R!!!!! Ща только мысль пришла, в crackMe можно было написать функцию, которая меняет все символы в строке местами. И тогда надо было бы подставить адрес в строку так, чтобы при подмене символов образовалась строка с адресом на конце.
И что-нибудь посложнее намудрить с константой при вычислении 0Dh(GETTEXT).
Вот это был бы crackMe.

BUG(O)R
22.08.2006, 12:07
в crackMe можно было написать функцию, которая меняет все символы в строке местами.

Ну прибавь к времени взлома ещё 10 минут на разбор этой функции.

taha
22.08.2006, 12:25
ещё 10 минут Смотря какая функция. И потом это будет на много интересней чем просто подставить аддрес. Я тут писал одну сам чуть не запутался с внедрением.

BUG(O)R
22.08.2006, 12:46
А без разницы какая функция в данном случае, можно же посмотреть какие данные на входе и на выходе, сравнить и составить нужную последовательность, это 10 минут максимум.

taha
22.08.2006, 13:02
Это не так посто. Может функция несколько раз меняла положение одного и тогоже символа, этож сколько вариантов надо просчитать, её всё равно придётся рабирать.

BUG(O)R
22.08.2006, 13:15
Не знаю в общем, может быть о разных вещах говорим, попробуй напиши то, о чём ты говоришь, а я мы посмотрим на сколько это усложнит задачу)

taha
22.08.2006, 13:24
Я написал, но получилось слишком просто (Нужно алгоритм придумать).
Я говорю о том. Уммммммммм..... Например.
Нужна строка: "123456782 @", но чтобы прога поняла его, тебе нужно ввести
"18@64 23572", при том что адрес функции с MessageBox'ом "2 @". Можно впринципе ещё и циферки проверять чтоб именно "18@64 23572".
Врубаешся!! ;)
Так об одном и том же или нет??

taha
22.08.2006, 13:50
Ну вот пример. Алгоритм не оптимизирован, очень далёк от совершенства. Но это всего лишь пример. Пасс1: 131313, Пасс2: 1 34567822@ (онже 3 18546722@).
Вот линк http://slil.ru/23044564/1564212072/CrackMeT2.rar.

BUG(O)R
22.08.2006, 13:59
Да об одном и том же, не слишком это усложнит взлом, лишь продлит жизнь твоего крякмиса.

taha
22.08.2006, 14:13
Ладно, BUG(O)R, ты взломаешь, а как остальные. Это пустой спор так как всё будет зависеть от опыта cracker'а и алго.

ProTeuS
22.08.2006, 14:24
шифр простой замены? а смысл, если таблица подподсьановоок будет находится внутри?

taha
22.08.2006, 14:33
Интересней будет составить какой-то определённый ответ чем просто (xxxxxxxxXXX).

Ra$cal
22.08.2006, 15:26
Самое интересное использовать алгоритмы для хранения в ключе имени юзверя, пасса мыла длителдьности лицензии и всего прочего. Ждите крякми, основаннйы как раз на этом ;)