Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   Crackme - кто хочет секаса.. (https://forum.antichat.xyz/showthread.php?t=73081)

_Great_ 08.06.2008 16:55

Crackme - кто хочет секаса..
 
Сделал крякмис от нечего делать,

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

Ra$cal 08.06.2008 19:44

При беглом осмотре - ключ dword, так что можно набрутить =) Глубже пока не копал, просто любопытно - защита от брута есть?

taha 08.06.2008 20:02

раска, ты засранец... я так не успею первым сбрутить =)))
хотя отрыв ото всех у мну уже есть

ЗЫ: там футбол начался.... ток что, Great... секаса у меня не будет)))
пойду смотреть

BlackSun 08.06.2008 20:18

Облин о_0 йа думал ток йа брутить решил :d

desTiny 08.06.2008 20:18

если пропустить прыжок на вывод неправильного сообщения, то выводит превуюи последнюю букву "М" в сообщении. Если пропустить всю проверку, то М только в конце :) Было бы время, поиздевался, а так - нет. Только зачем там SEH я не понял...

PS Блин, расскажите кто-нибудь про это ваше приватное коммьюнити cih.ms:)

Ra$cal 08.06.2008 21:40

Ну кароч структура команд ясна - первый байт - опкод с двумя флагами. второй байт - по 4 бита индексы регистров вм. еще 2 дворда - добавление к содержимому регистров вм. за суммирование отвечает флаг в команде. данные грузятя из регистров вм в стековые переменные функции-обработчика. еще важным является регистр edx, ибо в нем результат выполняемой команды лежит. иль я где-то накосячил?
ну а теперь надо декодировать команды вм.

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


Код:

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

_Great_ 09.06.2008 00:53

Ra$cal, довольно точно реверснул структуру команд VM, за исключением неокторых моментов.
Могу дать подсказку, что регистр edx ничем не отличается от остальных в реализации VM, в самом интерпретаторе используются команды фиксированного размера по 10 байт, эмулируются 10 регистров общего назначения, а так же регистр указателя инструкций, регистр указателя стека и набор флагов для осуществления условных операций (только на условия e, g, l, ge, le)
А вообще половина эмулируемых возможностей в коде не используется..

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

В следующий раз будет пожестче + некоторые интересные антиотладочные приемы.

Ra$cal 09.06.2008 01:22

да, я описал только то, что используется и не очень очевидно, vm_eip думаю каждый нашел =). ну и солюшн напешу для тех, кто неосилел.

зы: на счет edx не согласен
Код:

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.

taha 09.06.2008 01:44

Nick: taha
Password: 45F6431E

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

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

Солюшен:
1. Патчим прогу
Код:

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:
Брут брутом, а я уже почти дореверисл вм

_Great_ 09.06.2008 22:49

>> может это сделал компилятор
я на фасме писал :))
edx используется просто тупо потому, что в одном месте я написал код, который его юзает, а потом просто скопипастил с изменениями. получилось, что он везде юзается для одной цели. с другими регистрами в принципе так же ввиду того же копипаста)


Время: 16:15