Сейчас на форуме: vsv1, johnniewalker, NIKOLA (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Софт Шмелёва (автор скончался в конце 2013 года)
Посл.ответ Сообщение


Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 09 июля 2016 11:44 · Поправил: Kindly
· Личное сообщение · #1

Софт в узких кругах остается восстребованным, но уже никто не может его купить, т.к. автор скончался в конце 2013 года.

Рассмотрим на предмет реверса образец Sound Frequency Generator, скачать здесь:
http://rgho.st/6qzspPgVK

Программа упакована UPX, но имеет проверки на распакованность. Это нам не важно, мы будем отлаживать ее под UPX. Написана на асме, что в дальнейшем намекает.

Основное ограничение: 15 секунд работы после нажатия кнопки "Старт", генерация звука потом пропадает.
Перед тем как нажать на "Старт" ставим бряк на CreateFileA, видим проверку наличия "SoundGen.key" (далее key).

Данные из key файла считываются по офсету $31:
0012F4A8 00000031 |OffsetLo = 31 (49.)
0012F4AC 00000000 |pOffsetHi = NULL
0012F4B0 00000000 \Origin = FILE_BEGIN

Читается содержимое размером $198A байт:
0012F490 00000220 |hFile = 00000220 (window)
0012F494 0019A830 |Buffer = 0019A830
0012F498 0000198A |BytesToRead = 198A (6538.)
0012F49C 0012F4A4 |pBytesRead = 0012F4A4
0012F4A0 00000000 \pOverlapped = NULL

Machine ID в About, например, мой: G5413989547400
Затем mid модифируется в теле программы - отрезаются первые четыре символа, а внутрь полученного mid поочередно вставляются инвертированные символы: было 3989547400, стало 30908497544579480903

Цикл модификации Machine ID и расшифровка данных из Key файла (этот код расшифровывается в память из ресурса RT_RCDATA => Resource4):

Code:
  1. 0017DFD8    55              PUSH EBP
  2. 0017DFD9    8BEC            MOV EBP,ESP
  3. 0017DFDB    81C4 00F8FFFF   ADD ESP,-800
  4. 0017DFE1    53              PUSH EBX
  5. 0017DFE2    56              PUSH ESI
  6. 0017DFE3    8B75 10         MOV ESI,DWORD PTR SS:[EBP+10]
  7. 0017DFE6    33C0            XOR EAX,EAX
  8. 0017DFE8    8D8D 00F8FFFF   LEA ECX,DWORD PTR SS:[EBP-800]
  9. 0017DFEE    8BD6            MOV EDX,ESI
  10. 0017DFF0    8A1A            MOV BL,BYTE PTR DS:[EDX]
  11. 0017DFF2    8819            MOV BYTE PTR DS:[ECX],BL    <======= записываем machine_id
  12. 0017DFF4    8A1A            MOV BL,BYTE PTR DS:[EDX]
  13. 0017DFF6    84DB            TEST BL,BL
  14. 0017DFF8    74 07           JE SHORT 0017E001
  15. 0017DFFA    40              INC EAX
  16. 0017DFFB    83C1 02         ADD ECX,2
  17. 0017DFFE    42              INC EDX
  18. 0017DFFF  ^ EB EF           JMP SHORT 0017DFF0
  19. 0017E001    33D2            XOR EDX,EDX
  20. 0017E003    8D8D 01F8FFFF   LEA ECX,DWORD PTR SS:[EBP-7FF]
  21. 0017E009    3BC2            CMP EAX,EDX
  22. 0017E00B    76 12           JBE SHORT 0017E01F
  23. 0017E00D    8BD8            MOV EBX,EAX
  24. 0017E00F    2BDA            SUB EBX,EDX
  25. 0017E011    42              INC EDX
  26. 0017E012    8A5C1E FF       MOV BL,BYTE PTR DS:[ESI+EBX-1]
  27. 0017E016    8819            MOV BYTE PTR DS:[ECX],BL    <======= записываем mod_machine_id
  28. 0017E018    83C1 02         ADD ECX,2
  29. 0017E01B    3BC2            CMP EAX,EDX
  30. 0017E01D  ^ 77 EE           JA SHORT 0017E00D
  31. 0017E01F    33C0            XOR EAX,EAX
  32. 0017E021    33D2            XOR EDX,EDX
  33. 0017E023    8B4D 08         MOV ECX,DWORD PTR SS:[EBP+8]
  34. 0017E026    8B5D 0C         MOV EBX,DWORD PTR SS:[EBP+C]    <======= длина расшифровываемого кода $197F
  35. 0017E029    3BD3            CMP EDX,EBX
  36. 0017E02B    73 20           JNB SHORT 0017E04D
  37. 0017E02D    8A9C05 00F8FFFF MOV BL,BYTE PTR SS:[EBP+EAX-800]
  38. 0017E034    40              INC EAX
  39. 0017E035    3019            XOR BYTE PTR DS:[ECX],BL    <======= расшифровка кода из Key файла по mod_machine_id
  40. 0017E037    8A9C05 00F8FFFF MOV BL,BYTE PTR SS:[EBP+EAX-800]
  41. 0017E03E    84DB            TEST BL,BL
  42. 0017E040    75 02           JNZ SHORT 0017E044
  43. 0017E042    33C0            XOR EAX,EAX
  44. 0017E044    42              INC EDX
  45. 0017E045    41              INC ECX
  46. 0017E046    8B5D 0C         MOV EBX,DWORD PTR SS:[EBP+C]
  47. 0017E049    3BD3            CMP EDX,EBX  
  48. 0017E04B  ^ 72 E0           JB SHORT 0017E02D
  49. 0017E04D    5E              POP ESI
  50. 0017E04E    5B              POP EBX
  51. 0017E04F    8BE5            MOV ESP,EBP
  52. 0017E051    5D              POP EBP
  53. 0017E052    C3              RETN


Далее выходим из процедуры и ищем данную сигнатуру (для нахождения использовал бряк памяти на доступ на начало расшифрованного кода):
8B 03 50 FF 15 F8 C9 4C 00 81 C4 A4 0F 00 00 47 83 C3 04

00405386 FF15 F8C94C00 CALL DWORD PTR DS:[4CC9F8] <======= здесь вход в расшифрованный код

Итак, подытожим: автор шифрует обычным ксором (по mod_machine_id) файл лицензии (данные лицензии являются asm вставкой кода) с офсета $31 длиной $197F байт. Начало key файла до указанного офсета может быть произвольным. При дешифровке должен выполняться дополнительный код, снимающий DEMO ограничения. Прав ли я, что без наличия валидных machine id и файла лицензии под него, софт не закейгенить никак? Я думаю, что так - прошу знатоков подтвердить или опровергнуть мой вывод.

-----
Array[Login..Logout] of Life


| Сообщение посчитали полезным: script_kidis

Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 09 июля 2016 13:10 · Поправил: dosprog
· Личное сообщение · #2

Kindly пишет:
Софт в узких кругах остается восстребованным, но уже никто не может его купить, т.к. автор скончался в конце 2013 года.

В "узких кругах" сказали, что подобным функционалом удобней пользоваться в аудиоредакторе и что заморачиваться с отдельной софтиной желания нет..

Kindly пишет:
При дешифровке должен выполняться дополнительный код, снимающий DEMO ограничения


Похоже, что там ограничение на редактирование формы заказанного саунда, в частности, нельзя поменять его длительность (15 сек. или 1 сек. для новой схемы).

Kindly пишет:
Написана на асме, что в дальнейшем намекает.

Borland C++ Builder


Это так, в порядке уточнения.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 09 июля 2016 13:19
· Личное сообщение · #3

dosprog пишет:
В "узких кругах" сказали, что подобным функционалом удобней пользоваться в аудиоредакторе и что заморачиваться с отдельной софтиной желания нет..

каждому свое.

dosprog пишет:
Borland C++ Builder

а вот это я лоханулся, инсталлятор случайно просканил

уточнили.

-----
Array[Login..Logout] of Life





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 09 июля 2016 14:31
· Личное сообщение · #4

Kindly

если там тупо ксор, можно пробрутить попробовать, ведь начало функции будет с прологом скорее всего 558bec как минимум.

-----
[nice coder and reverser]





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 09 июля 2016 14:41 · Поправил: Kindly
· Личное сообщение · #5

Hellspawn пишет:
ведь начало функции будет с прологом скорее всего.

Да, там статичный пролог 5 байтов (которые тоже неизвестны), потом расшифрованный код должен выполняться.

Hellspawn пишет:
пробрутить попробовать

а так из чего брутить? ничего не известно. лиц файла никакого нет, код размером $197F, ксориться поочередно на 20 символов machine id. asm вставка не сверяется, а выполняется сразу. что там да как, ну точно не mov eax,1 > retn.

-----
Array[Login..Logout] of Life





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 09 июля 2016 14:43
· Личное сообщение · #6

Kindly а просто не понял, прочитал наискосок, нужен ключ тогда, без вариантов либо дописать функционал))))

-----
[nice coder and reverser]




Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 09 июля 2016 14:46 · Поправил: dosprog
· Личное сообщение · #7

...

Hellspawn пишет:
либо дописать функционал))))


Да тут хватило бы просто подстановки каких-то очень больших длительностей при создании новой звуковой схемы.
Чтоб не ограничиваться 15-ю секундами (или 1 секундой, как при создании новой схемы)
...





Ранг: 21.5 (новичок), 4thx
Активность: 0.010.03
Статус: Участник

Создано: 10 июля 2016 12:56
· Личное сообщение · #8

Я вот смотрел OscilloMeter (не глубоко), и пришел к выводу, что при триале, т.е. при отсутствии файла-ключа
вызываются функции из ресурсов. Определяется это все в sub_423134.

Теоретически, в файл-ключ не стоит засовывать часть функционала системы. По этому пришел к выводу, что можно пропатчить ресурсы на предмет ограничений ("Resource1", "Resource2", "Resource3").

Пробовали в эту сторону смотреть?




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 10 июля 2016 14:10
· Личное сообщение · #9

freudz
в OscilloMeter идентично, только ключевых файлов (недостающего кода) аж три штуки - это если рассматривать на предмет кейгенинга.

freudz пишет:
Теоретически, в файл-ключ не стоит засовывать часть функционала системы.

автор так и делал: встраивал в .key файл огромную asm вставку и ксорил все это дело по machine_id для каждого компа (Volume ID) индивидуально. по сути разблокировочный код для всех одинаковый, разный только ксор.

freudz пишет:
Пробовали в эту сторону смотреть?

придется

-----
Array[Login..Logout] of Life




Ранг: 21.5 (новичок), 4thx
Активность: 0.010.03
Статус: Участник

Создано: 10 июля 2016 15:46
· Личное сообщение · #10

Kindly
Удачи!
Буду благодарен, если отпишете о результатах.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 10 июля 2016 16:21
· Личное сообщение · #11

freudz
да тут остается только ограничение в 15 секунд снимать, без вариантов.

-----
Array[Login..Logout] of Life




Ранг: 19.9 (новичок), 31thx
Активность: 0.030.01
Статус: Участник

Создано: 10 июля 2016 20:36
· Личное сообщение · #12

Prober на руборде вроде как делал кейген если ничего не путаю




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 10 июля 2016 21:13 · Поправил: Kindly
· Личное сообщение · #13

evggrig
если он закейгенил, то в свое время ему key файлы с machine id давали.

ан нет, вот что Prober по этому поводу писал:
Защита там навороченная, несколько уровней, самый глубокий на математику завязан. Пару лет назад много времени потратил на нее. ИМХО, программы этого автора любой крякерский конкурс могли бы украсить, разбираться с ними сложно, но интересно. Снимаю шляпу перед разработчиком за его творческий подход к защите, и еще потому, что его уже нет

Удалось. Там в ресурсах лежит пошифрованный исполняемый код, долго пришлось разбираться, как в нем срабатывает таймер. Когда разобрался, то из этого же кода, только немного исправленного и перешифрованного другим ключом, сделал KEY-файлы. Патчить в итоге не потребовалось, хотя пропатченный вариант тоже был.

Вот и я заметил, что если key файла рядом нет, то расшифровывается приличный кусок кода из ресурса, который то и нужно разобрать на 15 секундное ограничение - а сделать кейген уже дело техники.

-----
Array[Login..Logout] of Life





Ранг: 56.2 (постоянный), 14thx
Активность: 0.120
Статус: Участник

Создано: 10 июля 2016 22:50
· Личное сообщение · #14

мне тоже понравилась защита, по началу подумал сейчас распакуем найдём место где происходит поиск (на тот момент я предположил что там сверяется дат файл или длл в котором будет хранится вырезанный код для фулвершион) кейфайла ,а если обломаюсь то поищу где этот таймер на 15 секунд,после распаковки понял что это уже интереснее так как уже ничего не работало,не стал вдаваться в детали понял что автор продумал этот вариант,так же решил изучать под упэикс нашел место где формируется id и тут пошло вычисления подумав понял что мне видать не вскрыть,и проскользнула такая мыслишка а может тему создам с вопросом,поразкинув немного пришел к выводу что Ветераны форума мне скажут : Ну чего ты там не можешь,это же бубль-гум,там всё как у фантома) А н нет о как оказалось, как раз интуиция меня не подвела,Я вот уже заметил у Киндли что не программа то какой нибудь пакет специфический и узконаправленный и как обычно "Это вам не петушки сосать,там думать надо" Много раз ковырял те же билды что и он думал долго потом уже искал готовый кряк чтобы понять как же также а тут Kindly показывает как это надо делать,было интересно Особенно тот пакет что под ICE License)) Молодец Kindly хорошо всё расписал.



Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 11 июля 2016 00:10 · Поправил: dosprog
· Личное сообщение · #15

Ладно, а что там с проверкой цельности?
- Проверок две. Одна тупо чтение файла и если не выходит нужная сумма, тогда не включается саунд,
а вторая это проверка кода в памяти, на неё завязано вычисление числа PI - если она не пройдена, то звук включается, но выходит искажённым.
И всё это с плавающей точкой, как у школьников.
В общем, быдлозащита. Нечем заняться было чуваку. Дело вкуса, короче.

Kindly пишет:
Отключил чудом ограничение (Вангу еще никто не отменял )


) И что - заработали контролы "кликнуть для изменить" в плейлисте?

Софт своеобразный, любительский - не понятно, что должно там срабатывать, а что просто глючит..






Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 11 июля 2016 00:42 · Поправил: Kindly
· Личное сообщение · #16

Отключил чудом ограничение (Вангу еще никто не отменял ) Решение после проверки софта знающими.

dosprog пишет:
И что - заработали контролы "кликнуть для изменить" в плейлисте?

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

добавлено
ну что же, OscilloMeter туда же. защита повержена. по заключениям специалистов, софт работает так, как им нужно. чтобы снять 15 секундное ограничение, не нужно отлаживать таймеры - они там по факту не участвуют. соль защиты в ресурcах, данные расшифровываются по ксору и выполняют увесистую процедуру. до конца понять, что она считает, не смог, но есть предположение, что для проигрывания звука и для построения графика выделяется буфер в памяти всего на 15 секунд. возможно, можно как вариант сломать, увеличив буфер для api, которые юзаются для проигрывания звука, например. тут нужно смотреть в эту сторону, зная ньюансы построения вывода звукового сигнала через winnm.dll.
к сожалению, кейген основан на самопальных лицензионных файлах с пропатченным кодом внутри них.
если у кого-то сохранились оригинальные key файлы с Serial Number, то пишите в личку - кейген будет оригинальным. тему закрою через недельку, если не будет ответов.

-----
Array[Login..Logout] of Life


| Сообщение посчитали полезным: freudz, viktor1950
 eXeL@B —› Крэки, обсуждения —› Софт Шмелёва (автор скончался в конце 2013 года)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати