![]() |
Crackme - кто хочет секаса..
Сделал крякмис от нечего делать,
Ссыль: http://gr8.cih.ms/uploads/crackme_vm.exe (6 кб) Сложность: средняя Задача: найти серийник под ваш ник =) Дерзайте, у кого есть время и кому не лень разгребать кодесы) |
При беглом осмотре - ключ dword, так что можно набрутить =) Глубже пока не копал, просто любопытно - защита от брута есть?
|
раска, ты засранец... я так не успею первым сбрутить =)))
хотя отрыв ото всех у мну уже есть ЗЫ: там футбол начался.... ток что, Great... секаса у меня не будет))) пойду смотреть |
Облин о_0 йа думал ток йа брутить решил :d
|
если пропустить прыжок на вывод неправильного сообщения, то выводит превуюи последнюю букву "М" в сообщении. Если пропустить всю проверку, то М только в конце :) Было бы время, поиздевался, а так - нет. Только зачем там SEH я не понял...
PS Блин, расскажите кто-нибудь про это ваше приватное коммьюнити cih.ms:) |
Ну кароч структура команд ясна - первый байт - опкод с двумя флагами. второй байт - по 4 бита индексы регистров вм. еще 2 дворда - добавление к содержимому регистров вм. за суммирование отвечает флаг в команде. данные грузятя из регистров вм в стековые переменные функции-обработчика. еще важным является регистр edx, ибо в нем результат выполняемой команды лежит. иль я где-то накосячил?
ну а теперь надо декодировать команды вм. [ADDED] хехе, уже переписываю пикод на псевдоасм =) Ваще вм больше напоминает реальный проц нежели систему, целью которой служит усложнение исследования =) Больно все академично. Ах да, ключег вот: Ra$cal 568AA687 Ща допишу табличку опкодов и псевдокод. Код:
mov r0, name6 млабших бит первого байта команды - 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 |
Ra$cal, довольно точно реверснул структуру команд VM, за исключением неокторых моментов.
Могу дать подсказку, что регистр edx ничем не отличается от остальных в реализации VM, в самом интерпретаторе используются команды фиксированного размера по 10 байт, эмулируются 10 регистров общего назначения, а так же регистр указателя инструкций, регистр указателя стека и набор флагов для осуществления условных операций (только на условия e, g, l, ge, le) А вообще половина эмулируемых возможностей в коде не используется.. Вообще писал чисто ради интереса, если реверсить было так же интересно, то мне лишь приятно) Вообще было большое желание усложнить все это дело, что, видимо, и сделаю в следующий раз :) В следующий раз будет пожестче + некоторые интересные антиотладочные приемы. |
да, я описал только то, что используется и не очень очевидно, vm_eip думаю каждый нашел =). ну и солюшн напешу для тех, кто неосилел.
зы: на счет edx не согласен Код:
004020DD |> \807D 08 01 CMP BYTE PTR SS:[EBP+8], 1 |
Nick: taha
Password: 45F6431E Извините за задержку... просто мне тут друзья позвонили... пришлось отлучится попить пива и покурить пару бульбиков Вобщем Ай эм хеккер! Сериал ок Солюшен: 1. Патчим прогу Код:
004025A7 . FF35 7D154000 push dword ptr ds:[40157D]3. Постим ник и пас Вот такой вот простой хэкк! add: Брут брутом, а я уже почти дореверисл вм |
>> может это сделал компилятор
я на фасме писал :)) edx используется просто тупо потому, что в одном месте я написал код, который его юзает, а потом просто скопипастил с изменениями. получилось, что он везде юзается для одной цели. с другими регистрами в принципе так же ввиду того же копипаста) |
| Время: 16:15 |