Просмотр полной версии : Crackme - кто хочет секаса..
Сделал крякмис от нечего делать,
Ссыль: http://gr8.cih.ms/uploads/crackme_vm.exe (6 кб)
Сложность: средняя
Задача:
найти серийник под ваш ник =)
Дерзайте, у кого есть время и кому не лень разгребать кодесы)
При беглом осмотре - ключ dword, так что можно набрутить =) Глубже пока не копал, просто любопытно - защита от брута есть?
раска, ты засранец... я так не успею первым сбрутить =)))
хотя отрыв ото всех у мну уже есть
ЗЫ: там футбол начался.... ток что, Great... секаса у меня не будет)))
пойду смотреть
BlackSun
08.06.2008, 20:18
Облин о_0 йа думал ток йа брутить решил :d
если пропустить прыжок на вывод неправильного сообщения, то выводит превуюи последнюю букву "М" в сообщении. Если пропустить всю проверку, то М только в конце :) Было бы время, поиздевался, а так - нет. Только зачем там SEH я не понял...
PS Блин, расскажите кто-нибудь про это ваше приватное коммьюнити cih.ms:)
Ну кароч структура команд ясна - первый байт - опкод с двумя флагами. второй байт - по 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
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
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.
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:
Брут брутом, а я уже почти дореверисл вм
>> может это сделал компилятор
я на фасме писал :))
edx используется просто тупо потому, что в одном месте я написал код, который его юзает, а потом просто скопипастил с изменениями. получилось, что он везде юзается для одной цели. с другими регистрами в принципе так же ввиду того же копипаста)
0verbreaK
15.06.2008, 01:50
Собственно только 5 минут назад начал, лучше поздно чем ни когда))
0verbreaK
09BA4F82
Собственно поздно,но всё же.
Lamia
C6D81C84
buzulukland
18.06.2008, 00:52
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:
Брут брутом, а я уже почти дореверисл вм
вообще только птатчингом я и спасся минут за 5 проставив бряк на GetDlgTextItemA))) до алгоритма не докопался. Не подскажите хорошую статейку как вообще реализуется брутфорс для подбора пароля на программы?
там простейший алгоритм
Статью про брут? ммммммм.... общего способа нет...
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...
Вот и весь брут! Так по аналогии и в других прогах! Только это не эфективно
0verbreaK
18.06.2008, 15:31
вообще только птатчингом я и спасся минут за 5 проставив бряк на GetDlgTextItemA))) до алгоритма не докопался. Не подскажите хорошую статейку как вообще реализуется брутфорс для подбора пароля на программы?
Можно было проще, загрузил в отладчик(OllyDbg) crackme, запустил, ввел любые данные например:
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
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
не смотрел, так как, к моему счастью, цифры, образовавщиеся после цикла, подошли:)
По моему он почти ничем не отличается от 4 крякмиса фантома, таким же алгоритмом сгенерировал мне пароль..
Ничё се не отличается о_0...
>>>added
чтобы быстро узнать пасс, ставим бряк на 004023D4, и смотрим дворд по адресу 004023D4... усё=)
0verbreaK
19.06.2008, 15:54
Хочется на исходник взглянуть
buzulukland
19.06.2008, 16:18
Хочется на исходник взглянуть
Мда исходник жжет, на самом деле способов обхода было много... но задача была поставлена одна - найти имя и соответсвующий ему пароль))) буду копаться дальше, спс за советы))
buzulukland
19.06.2008, 16:21
Можно было проще, загрузил в отладчик(OllyDbg) crackme, запустил, ввел любые данные например:
0verbreaK
123456789
Что бы искать было проще, затем, Search for -> All reference text strings, и находишь
00402599 . 68 69154000 PUSH crackme_.00401569 ; ASCII "123456789"
и ты уже ближе к проверке, потом трасируешь потихоньку, недаром автора говорил копаться в коде, так как пройтись придется определенное время.
тоже выход)) я это обнаружил когда проморгал функцию вычисления пароля)) уже потомо посмторел на строки входа (по моему они там 2 раза дублирутся) но с разными адресами
тоже выход)) я это обнаружил когда проморгал функцию вычисления пароля)) уже потомо посмторел на строки входа (по моему они там 2 раза дублирутся) но с разными адресами
тупо трассировать - некрасиво...
вот у меня на разбирательство три листа А4 ушло =)
Способы обхода я не блочит, если надо в следующий раз сделаю так, что без трассировки ничего нельзя будет сделать )
+ антиотладку добавлю. и еще фигню всякую.
исходник выложу как все посмотрят) либо в ПМ напишите кто хочет - скину.
buzulukland
19.06.2008, 23:04
тупо трассировать - некрасиво...
вот у меня на разбирательство три листа А4 ушло =)
в общем стимул есть)) и есть куда стремиться))
Способы обхода я не блочит, если надо в следующий раз сделаю так, что без трассировки ничего нельзя будет сделать )
+ антиотладку добавлю. и еще фигню всякую.
только алго генерации сохрани тот же=)
buzulukland
20.06.2008, 17:43
только алго генерации сохрани тот же=)
смысла не вижу... соглащусь с тем что алгоритм такой же но предлагаю добавить хотя бы одну операцию типа
xor eax,0A
чтобы интереснее было))
MaZaHaKer
04.07.2008, 23:39
Great , если можно , дай исходник пожалуйста .очень очень хочеться посмотреть.
disasembler
19.07.2008, 06:07
блин, дайте кто-нить сорцы vm
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot