Crackme - кто хочет секаса..

Discussion in 'Реверсинг' started by _Great_, 8 Jun 2008.

  1. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Сделал крякмис от нечего делать,

    Ссыль: http://gr8.cih.ms/uploads/crackme_vm.exe (6 кб)
    Сложность: средняя
    Задача:
    найти серийник под ваш ник =)
    Дерзайте, у кого есть время и кому не лень разгребать кодесы)
     
    4 people like this.
  2. Ra$cal

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

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    При беглом осмотре - ключ dword, так что можно набрутить =) Глубже пока не копал, просто любопытно - защита от брута есть?
     
  3. taha

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

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    раска, ты засранец... я так не успею первым сбрутить =)))
    хотя отрыв ото всех у мну уже есть

    ЗЫ: там футбол начался.... ток что, Great... секаса у меня не будет)))
    пойду смотреть
     
    #3 taha, 8 Jun 2008
    Last edited: 8 Jun 2008
    3 people like this.
  4. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Облин о_0 йа думал ток йа брутить решил :d
     
  5. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    если пропустить прыжок на вывод неправильного сообщения, то выводит превуюи последнюю букву "М" в сообщении. Если пропустить всю проверку, то М только в конце :) Было бы время, поиздевался, а так - нет. Только зачем там SEH я не понял...

    PS Блин, расскажите кто-нибудь про это ваше приватное коммьюнити cih.ms:)
     
    2 people like this.
  6. Ra$cal

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

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Ну кароч структура команд ясна - первый байт - опкод с двумя флагами. второй байт - по 4 бита индексы регистров вм. еще 2 дворда - добавление к содержимому регистров вм. за суммирование отвечает флаг в команде. данные грузятя из регистров вм в стековые переменные функции-обработчика. еще важным является регистр edx, ибо в нем результат выполняемой команды лежит. иль я где-то накосячил?
    ну а теперь надо декодировать команды вм.

    [ADDED]
    хехе, уже переписываю пикод на псевдоасм =)
    Ваще вм больше напоминает реальный проц нежели систему, целью которой служит усложнение исследования =) Больно все академично.
    Ах да, ключег вот:
    Ra$cal
    568AA687
    Ща допишу табличку опкодов и псевдокод.


    Code:
    mov r0, name
    mov r1, E98FB720
    mov r7, key
    
    xor r4, r4
    
    mov r5, name
    add r5, name_len
    
    lbl_NEXT_1:
    mov r3, dword_ptr [r0]
    xor r3, r1
    add r4, r3
    inc r0 ;// к следующей букве имени
    cmp r0, r5
    jle lbl_NEXT_1
    
    cmp r4, r7
    jnz lbl_EXIT
    mov r8, 87148712
    lbl_EXIT:
    mov r4, 0
    ret

    6 млабших бит первого байта команды - opcode
    8ой бит первого байта команды - управление разыменовыванием r1
    7ой бит первого байта команды - управление разыменовыванием r2
    4 млабших бита второго байта - r1. Индекс регистра вм
    4 старших бита второго байта - r2. Индекс регистра вм
    4 байта - data_r2
    4 байта - data_r1
    Длина команды - 10 байт

    Если r1 или r2 равно 0x0C, то загружается в функцию data_r1 или data_r2 соответственно

    rvm0 - адрес имени
    rvm2 - длина имени
    rvm7 - ключ
    rvm1 - константа ксора

    6 - xor r2, r1
    3 - mov r2, r1
    4 - add r2, r1
    A - inc r1
    F - cmp r2, r1
    14 - jg $+0x0A
    10 - jz $+0x0A
    3F - ret
     
    #6 Ra$cal, 8 Jun 2008
    Last edited: 8 Jun 2008
    2 people like this.
  7. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Ra$cal, довольно точно реверснул структуру команд VM, за исключением неокторых моментов.
    Могу дать подсказку, что регистр edx ничем не отличается от остальных в реализации VM, в самом интерпретаторе используются команды фиксированного размера по 10 байт, эмулируются 10 регистров общего назначения, а так же регистр указателя инструкций, регистр указателя стека и набор флагов для осуществления условных операций (только на условия e, g, l, ge, le)
    А вообще половина эмулируемых возможностей в коде не используется..

    Вообще писал чисто ради интереса, если реверсить было так же интересно, то мне лишь приятно)
    Вообще было большое желание усложнить все это дело, что, видимо, и сделаю в следующий раз :)

    В следующий раз будет пожестче + некоторые интересные антиотладочные приемы.
     
    #7 _Great_, 9 Jun 2008
    Last edited: 9 Jun 2008
    1 person likes this.
  8. Ra$cal

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

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    да, я описал только то, что используется и не очень очевидно, vm_eip думаю каждый нашел =). ну и солюшн напешу для тех, кто неосилел.

    зы: на счет edx не согласен
    Code:
    004020DD  |> \807D 08 01            CMP BYTE PTR SS:[EBP+8], 1
    004020E1  |.  75 02                 JNZ SHORT crackme_.004020E5
    004020E3  |.  8B3F                  MOV EDI, DWORD PTR DS:[EDI]
    004020E5  |>  8917                  MOV DWORD PTR DS:[EDI], EDX
    
    
    edx приходит из обработчиков команд. может это сделал компилятор, но в регистр вм пишется всегда содержимое регистра edx.
     
    #8 Ra$cal, 9 Jun 2008
    Last edited: 9 Jun 2008
    2 people like this.
  9. taha

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

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Nick: taha
    Password: 45F6431E

    Извините за задержку... просто мне тут друзья позвонили... пришлось отлучится попить пива и покурить пару бульбиков

    Вобщем Ай эм хеккер! Сериал ок

    Солюшен:
    1. Патчим прогу
    Code:
    004025A7   .  FF35 7D154000 push dword ptr ds:[40157D]
    004025AD   .  68 55154000   push offset <crackme_.Nick>              ;  ASCII "taha"
    004025B2   .  E8 06FFFFFF   call crackme_.004024BD
    004025B7   .  84C0          test al,al
    004025B9      75 08         jnz short crackme_.004025C3
    004025BB      FF05 7D154000 inc dword ptr ds:[40157D]
    004025C1    ^ EB E4         jmp short crackme_.004025A7
    004025C3      CC            int3
    004025C4      CC            int3
    2. Уходим пить пиво и курить траву!
    3. Постим ник и пас

    Вот такой вот простой хэкк!

    add:
    Брут брутом, а я уже почти дореверисл вм
     
    #9 taha, 9 Jun 2008
    Last edited: 9 Jun 2008
    2 people like this.
  10. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    >> может это сделал компилятор
    я на фасме писал :))
    edx используется просто тупо потому, что в одном месте я написал код, который его юзает, а потом просто скопипастил с изменениями. получилось, что он везде юзается для одной цели. с другими регистрами в принципе так же ввиду того же копипаста)
     
    1 person likes this.
  11. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Собственно только 5 минут назад начал, лучше поздно чем ни когда))

    0verbreaK
    09BA4F82
     
  12. Lamia

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

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    Собственно поздно,но всё же.
    Lamia
    C6D81C84
     
  13. buzulukland

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

    Joined:
    24 Jan 2008
    Messages:
    40
    Likes Received:
    4
    Reputations:
    0
    вообще только птатчингом я и спасся минут за 5 проставив бряк на GetDlgTextItemA))) до алгоритма не докопался. Не подскажите хорошую статейку как вообще реализуется брутфорс для подбора пароля на программы?
     
    1 person likes this.
  14. taha

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

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    там простейший алгоритм
    Статью про брут? ммммммм.... общего способа нет...

    Code:
    004025A7   .  FF35 7D154000 push dword ptr ds:[40157D]
    004025AD   .  68 55154000   push offset <crackme_.Nick>              ;  ASCII "taha"
    004025B2   .  E8 06FFFFFF   call crackme_.004024BD
    004025B7   .  84C0          test al,al
    004025B9      75 08         jnz short crackme_.004025C3
    004025BB      FF05 7D154000 inc dword ptr ds:[40157D]
    004025C1    ^ EB E4         jmp short crackme_.004025A7
    004025C3      CC            int3
    004025C4      CC            int3
    Пароль лежит по адресу 40157D...
    call crackme_.004024BD ; функция, которая проверяет пароль... если правильный, то al = 1
    обнуляем dword... дальше увеличиваем [40157D] на единицу и проверяем al... и так пока al не будет равен 1
    Когда al = 1 смотрим, что находится по адресу 40157D...
    Вот и весь брут! Так по аналогии и в других прогах! Только это не эфективно
     
  15. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Можно было проще, загрузил в отладчик(OllyDbg) crackme, запустил, ввел любые данные например:

    0verbreaK
    123456789

    Что бы искать было проще, затем, Search for -> All reference text strings, и находишь

    00402599 . 68 69154000 PUSH crackme_.00401569 ; ASCII "123456789"

    и ты уже ближе к проверке, потом трасируешь потихоньку, недаром автора говорил копаться в коде, так как пройтись придется определенное время.
     
    1 person likes this.
  16. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Ура! Грэйт, я тебя обожаю=))) Скинь исходник, если не жалко - давненько я такого изврата не видел=))

    Так, чуть не забыл.. как и обещал -
    имя: TeruS
    пасс: 14F4F5D3

    Раскрутил вм, после цикла вот это вот

    Code:
    0F 74 00 00 00 00 00 00 00 00 
    10 00 00 00 00 00 00 00 00 00 
    03 C8 00 00 00 00 12 87 14 87 
    03 C4 00 00 00 00 00 00 00 00 
    3F 00 00 00 00 00 00 00 00 00 
    C3 C2 04 00 00 00 00 00 00 00
    
    не смотрел, так как, к моему счастью, цифры, образовавщиеся после цикла, подошли:)

    Ничё се не отличается о_0...


    >>>added
    чтобы быстро узнать пасс, ставим бряк на 004023D4, и смотрим дворд по адресу 004023D4... усё=)
     
    #16 desTiny, 18 Jun 2008
    Last edited: 18 Jun 2008
    1 person likes this.
  17. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Хочется на исходник взглянуть
     
  18. buzulukland

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

    Joined:
    24 Jan 2008
    Messages:
    40
    Likes Received:
    4
    Reputations:
    0
    Мда исходник жжет, на самом деле способов обхода было много... но задача была поставлена одна - найти имя и соответсвующий ему пароль))) буду копаться дальше, спс за советы))
     
  19. buzulukland

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

    Joined:
    24 Jan 2008
    Messages:
    40
    Likes Received:
    4
    Reputations:
    0
    тоже выход)) я это обнаружил когда проморгал функцию вычисления пароля)) уже потомо посмторел на строки входа (по моему они там 2 раза дублирутся) но с разными адресами
     
  20. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    тупо трассировать - некрасиво...

    вот у меня на разбирательство три листа А4 ушло =)