![]() |
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 используется просто тупо потому, что в одном месте я написал код, который его юзает, а потом просто скопипастил с изменениями. получилось, что он везде юзается для одной цели. с другими регистрами в принципе так же ввиду того же копипаста) |
Собственно только 5 минут назад начал, лучше поздно чем ни когда))
0verbreaK 09BA4F82 |
Собственно поздно,но всё же.
Lamia C6D81C84 |
Цитата:
|
там простейший алгоритм
Статью про брут? ммммммм.... общего способа нет... Код:
004025A7 . FF35 7D154000 push dword ptr ds:[40157D]call crackme_.004024BD ; функция, которая проверяет пароль... если правильный, то al = 1 обнуляем dword... дальше увеличиваем [40157D] на единицу и проверяем al... и так пока al не будет равен 1 Когда al = 1 смотрим, что находится по адресу 40157D... Вот и весь брут! Так по аналогии и в других прогах! Только это не эфективно |
Цитата:
0verbreaK 123456789 Что бы искать было проще, затем, Search for -> All reference text strings, и находишь 00402599 . 68 69154000 PUSH crackme_.00401569 ; ASCII "123456789" и ты уже ближе к проверке, потом трасируешь потихоньку, недаром автора говорил копаться в коде, так как пройтись придется определенное время. |
Ура! Грэйт, я тебя обожаю=))) Скинь исходник, если не жалко - давненько я такого изврата не видел=))
Так, чуть не забыл.. как и обещал - имя: TeruS пасс: 14F4F5D3 Раскрутил вм, после цикла вот это вот Код:
0F 74 00 00 00 00 00 00 00 00 Цитата:
>>>added чтобы быстро узнать пасс, ставим бряк на 004023D4, и смотрим дворд по адресу 004023D4... усё=) |
Хочется на исходник взглянуть
|
Цитата:
|
Цитата:
|
Цитата:
вот у меня на разбирательство три листа А4 ушло =) |
Способы обхода я не блочит, если надо в следующий раз сделаю так, что без трассировки ничего нельзя будет сделать )
+ антиотладку добавлю. и еще фигню всякую. исходник выложу как все посмотрят) либо в ПМ напишите кто хочет - скину. |
Цитата:
|
Цитата:
|
Цитата:
xor eax,0A чтобы интереснее было)) |
Great , если можно , дай исходник пожалуйста .очень очень хочеться посмотреть.
|
блин, дайте кто-нить сорцы vm
|
| Время: 21:04 |