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

Форум АНТИЧАТ (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 используется просто тупо потому, что в одном месте я написал код, который его юзает, а потом просто скопипастил с изменениями. получилось, что он везде юзается для одной цели. с другими регистрами в принципе так же ввиду того же копипаста)

0verbreaK 15.06.2008 01:50

Собственно только 5 минут назад начал, лучше поздно чем ни когда))

0verbreaK
09BA4F82

Lamia 15.06.2008 14:17

Собственно поздно,но всё же.
Lamia
C6D81C84

buzulukland 18.06.2008 00:52

Цитата:

Сообщение от taha
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))) до алгоритма не докопался. Не подскажите хорошую статейку как вообще реализуется брутфорс для подбора пароля на программы?

taha 18.06.2008 13:51

там простейший алгоритм
Статью про брут? ммммммм.... общего способа нет...

Код:

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

Цитата:

Сообщение от buzulukland
вообще только птатчингом я и спасся минут за 5 проставив бряк на GetDlgTextItemA))) до алгоритма не докопался. Не подскажите хорошую статейку как вообще реализуется брутфорс для подбора пароля на программы?

Можно было проще, загрузил в отладчик(OllyDbg) crackme, запустил, ввел любые данные например:

0verbreaK
123456789

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

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

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

desTiny 18.06.2008 22:40

Ура! Грэйт, я тебя обожаю=))) Скинь исходник, если не жалко - давненько я такого изврата не видел=))

Так, чуть не забыл.. как и обещал -
имя: 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

Цитата:

Сообщение от 0verbreaK
Хочется на исходник взглянуть

Мда исходник жжет, на самом деле способов обхода было много... но задача была поставлена одна - найти имя и соответсвующий ему пароль))) буду копаться дальше, спс за советы))

buzulukland 19.06.2008 16:21

Цитата:

Сообщение от 0verbreaK
Можно было проще, загрузил в отладчик(OllyDbg) crackme, запустил, ввел любые данные например:

0verbreaK
123456789

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

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

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

тоже выход)) я это обнаружил когда проморгал функцию вычисления пароля)) уже потомо посмторел на строки входа (по моему они там 2 раза дублирутся) но с разными адресами

desTiny 19.06.2008 20:10

Цитата:

Сообщение от buzulukland
тоже выход)) я это обнаружил когда проморгал функцию вычисления пароля)) уже потомо посмторел на строки входа (по моему они там 2 раза дублирутся) но с разными адресами

тупо трассировать - некрасиво...

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

_Great_ 19.06.2008 22:25

Способы обхода я не блочит, если надо в следующий раз сделаю так, что без трассировки ничего нельзя будет сделать )
+ антиотладку добавлю. и еще фигню всякую.

исходник выложу как все посмотрят) либо в ПМ напишите кто хочет - скину.

buzulukland 19.06.2008 23:04

Цитата:

Сообщение от desTiny
тупо трассировать - некрасиво...

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

в общем стимул есть)) и есть куда стремиться))

desTiny 20.06.2008 00:05

Цитата:

Сообщение от _Great_
Способы обхода я не блочит, если надо в следующий раз сделаю так, что без трассировки ничего нельзя будет сделать )
+ антиотладку добавлю. и еще фигню всякую.

только алго генерации сохрани тот же=)

buzulukland 20.06.2008 17:43

Цитата:

Сообщение от desTiny
только алго генерации сохрани тот же=)

смысла не вижу... соглащусь с тем что алгоритм такой же но предлагаю добавить хотя бы одну операцию типа
xor eax,0A
чтобы интереснее было))

MaZaHaKer 04.07.2008 23:39

Great , если можно , дай исходник пожалуйста .очень очень хочеться посмотреть.

disasembler 19.07.2008 06:07

блин, дайте кто-нить сорцы vm


Время: 21:04