не совсем мой crackme

Discussion in 'Реверсинг' started by taha, 21 Aug 2006.

  1. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Недавно сидел над парой crackme. Почерпнул для себя кое-что новое.
    Решил их объединить.И получилось вот что http://slil.ru/23040639/1212340730/CrackMeT.rar.
    Писал на MASM, поэтому там всё будет ясно. Мусорить я почти не стал (лень ;) ), антиотладки нет (лень ;) ). CrackMe достаточно простой, зачем было упираться всё равно крякнете.
    Хотя если вам понравится можно всё это добавить.
    Просто пара интересных (на мой взгляд) приёмов.
    CrackMeT.exe - 3,55 Kb.
    CrackMeT.rar - 1,00 Kb
    Нужно подобрать два пароля и вылетит MessageBox.
     
  2. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Нда, ну и крякми. Ща чуток осталось. Придумать :) Первый пасс 131313, так как после вычитания константы получим WM_GETTEXT
    Теперь осталось придумать 0xC байт, чтобы они образовали вызов MessageBox с кэпшэном Сообщение, и текстом Молодец
     
  3. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Да первый пасс 131313. Со вторым пришлось повозиться. На практике с переполнением ещё не связывался (все примеры на сях :( ). В crackme это редкость. Ещё лёгкий для превращения в ASC|| адрес трудно было подобрать.
    Спасибо на добром слове ;) .
    Кстати завтра вечером уезжаю в Питер. Я поступил в институт. Комп и инет не знаю когда будут. Ищу друзей. Извините что здесь пишу. Просто здесь самая подходящая для меня компания.
    На все вопросы по crackme я отвечу завтра (скорее всего).
    Будет очередной запой с друзьями. :( :(
     
    #3 taha, 21 Aug 2006
    Last edited: 21 Aug 2006
  4. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Первый пароль: 131313
    Второй пароль: 132132652 @
     
  5. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Вписывать с пробелом и собакой если кто не понял)

    PS Из всех выложенных здесь крякмисов этот пожалуй самый оригинальный, так, что молодец ТАНА.
     
    #5 BUG(O)R, 21 Aug 2006
    Last edited: 21 Aug 2006
  6. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Нда, я и не заметил этот адрес :( Хотя по импорту смотрю и думаю, что раз есть импорт MessageBoxA, значит и вызываться откуда-то должно.
     
  7. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Юзай Alt-M в ольке, в секции кода небыло MessageBox(и зашифрованных участков кода тоже, где бы он мог быть), значит он был вынесен в другую секцию, вообще лучше было бы если бы TANA вынес его в секцию .data например или хотя бы назвал ту секцию в которой он был не так навязчиво - TEXT2, а то сразу в глаза бросается.
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,311
    Reputations:
    327
    второй пасс - переполнение
    формат: AAAABBBBCCCC
    A- нормальные байты
    B- перезатрка ebp
    С - перезатирка eip (+перезапись адреса нулем, но в нашем случае неопасно, а скорее преднамеренно)

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

    получаем строку "AAAABBBB4 @A"
    вводим и получаем "Молодец - Да Нет Справка" :D
     
    #8 sn0w, 21 Aug 2006
    Last edited: 21 Aug 2006
  9. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Смотрим, что в конце функции такой код:

    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].
     
  10. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Начало функции 403032
     
  11. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    ну тогда ВЛИВАЙСЯ! всегда рады =)

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,311
    Reputations:
    327
    BugorLol4 @A :D :D ... адрес не с диска, адрес с дампа ;)
     
    #12 sn0w, 21 Aug 2006
    Last edited: 21 Aug 2006
  13. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Чего чего?
     
  14. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Про секцию обижаешь - я написал, что MessageBox не вызывается, но импортируется. Он мог сделать ещё веселее - записать в стэк вызов месаджбокса и целиком этот код подсунуть для ввода рег номера. Вт это было-бы забавно - просто реверснуть асьм и скинуть в номер. А шарится по коду - только когда на асме удобно.
    Должен заметить, что это уже изрядно поседевший трюк. Модификация jmp eax, push xxxxxx; retn; Если бы написал на более высокоуровневым языке хер бы нашли этот адрес так быстро :) А вообще мне это не нравится - всё равно что MD5 с RSA - без брута х с маком, а брутить как понимаешь влом.
     
  15. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,311
    Reputations:
    327
    2Bugor: да я пошутил, чувак)
     
  16. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Угу и защита такая на практике держится до первой скарженной копии)

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

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Ёптить, любая защита до первой скарженой версии держится.

    Да ну. Вряд ли ты бы стал показывать в крякми свои новейшие наработки, чтобы их засветить. А когда фишка известна, надо её просто усложнить. Поэтому имхо если фишка известна, то делать нефик и надо усложнять. Но MD5 эт канешна перегиб :)
     
    1 person likes this.
  18. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Не, ну многие и без одного валидного ключа можно отвязать.

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

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    . Можно было и в .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 сойдёт. Помните тот скрипт с печатающейся строкой.
     
    #19 taha, 22 Aug 2006
    Last edited: 22 Aug 2006
    1 person likes this.
  20. BUG(O)R

    BUG(O)R Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    63
    Likes Received:
    15
    Reputations:
    16
    Все нужные функции для работы со строками унаслодовенаы из сишных библиотек(lstrlen lstrcat lstrcmp и т.д.) или есть в либе, которая по умолчанию поставляется в комплекте masm - masm32.lib, её сорсы так же лежат в открытом виде в папке m32lib.