Blog. Just Blog

Исследование защиты программы CC Get MAC Address

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы CC Get MAC Address
Скриншот программы CC Get MAC Address

Программа CC Get MAC Address предназначена для сканирования сети с целью получения списка MAC-адресов, получения имени компьютера по IP-адресу, "пробуждения" по сети компьютеров с поддержкой опции "Wake On LAN". В общем небольшая полезная программа для системного администратора. Только почему-то за все это программа просит денег, и немало.

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

"Нехорошая строка" найдена
"Нехорошая строка" найдена

Теперь в дизассемблере посмотрим код, который ссылается на нее, а также проверки и условия, которые приводят к срабатыванию этой ветки алгоритма:
  1. ...
  2. .text:00401FD6                 mov     [esp+1928h+ReturnedString], cl
  3. .text:00401FDD                 mov     ecx, 0FFh
  4. .text:00401FE2                 lea     edi, [esp+1928h+var_100B]
  5. .text:00401FE9                 push    offset FileName ; lpFileName
  6. .text:00401FEE                 rep stosd
  7. .text:00401FF0                 lea     edx, [esp+192Ch+ReturnedString]
  8. .text:00401FF7                 push    400h            ; nSize
  9. .text:00401FFC                 stosw
  10. ; Прочитать из ini-файла из секции "System" значение параметра "RegCode"
  11. .text:00401FFE                 push    edx             ; lpReturnedString
  12. .text:00401FFF                 push    offset byte_438740 ; lpDefault
  13. .text:00402004                 push    offset aRegcode ; "RegCode"
  14. .text:00402009                 push    offset MultiByteStr ; "System"
  15. .text:0040200E                 stosb
  16. .text:0040200F                 call    ebx ; GetPrivateProfileStringA
  17. .text:00402011                 lea     eax, [esp+1928h+ReturnedString]
  18. ; Указатель на полученную строку
  19. .text:00402018                 push    eax
  20. ; Вызвать функцию проверки регистрационного кода
  21. .text:00402019                 call    sub_404E00
  22. .text:0040201E                 add     esp, 4
  23. .text:00402021                 test    eax, eax
  24. .text:00402023                 pop     ebx
  25. ; Если функция проверки вернула EAX=0, то серийник неправильный
  26. .text:00402024                 jz      short loc_402055
  27. ; Программа работает в зарегистрированном режиме
  28. .text:00402026                 push    0               ; nCmdShow
  29. .text:00402028                 push    409h            ; nIDDlgItem
  30. .text:0040202D                 mov     ecx, ebp
  31. .text:0040202F                 call    sub_420AE4
  32. .text:00402034                 mov     ecx, eax
  33. .text:00402036                 call    sub_420CA4
  34. .text:0040203B                 push    0               ; nCmdShow
  35. .text:0040203D                 push    408h            ; nIDDlgItem
  36. .text:00402042                 mov     ecx, ebp
  37. .text:00402044                 call    sub_420AE4
  38. .text:00402049                 mov     ecx, eax
  39. .text:0040204B                 call    sub_420CA4
  40. .text:00402050                 jmp     loc_40213F
  41. .text:00402055 ; ---------------------------------------------------
  42. .text:00402055 loc_402055:
  43. ; Программа работает в триальном режиме
  44. .text:00402055                 mov     cl, byte_438740
  45. .text:0040205B                 xor     eax, eax
  46. .text:0040205D                 mov     [esp+1924h+String], cl
  47. .text:00402064                 mov     ecx, 0FFh
  48. .text:00402069                 lea     edi, [esp+1924h+var_C0B]
  49. .text:00402070                 rep stosd
  50. .text:00402072                 stosw
  51. .text:00402074                 stosb
  52. .text:00402075                 call    sub_401A60
  53. .text:0040207A                 push    eax
  54. .text:0040207B                 lea     edx, [esp+1928h+String]
  55. .text:00402082                 push    offset aCcGetMacAddr_1
  56. ; "CC Get MAC Address(unregistered version"...
  57. .text:00402087                 push    edx             ; Dest
  58. .text:00402088                 call    _sprintf
  59. ...
Теперь посмотрим саму процедуру проверки серийного номера. Можно пропатчить ее, чтобы на выходе всегда было EAX=1, но попробуем лучше посмотреть на сам алгоритм проверки:
  1. .text:00404E00 sub_404E00      proc near
  2. .text:00404E00 arg_0           = dword ptr  4
  3. ; EAX -> указатель на строку серийного номера
  4. .text:00404E00                 mov     eax, [esp+arg_0]
  5. ; ECX = первый символ серийника
  6. .text:00404E04                 movsx   ecx, byte ptr [eax]
  7. ; EDX = пятый символ серийника
  8. .text:00404E07                 movsx   edx, byte ptr [eax+4]
  9. .text:00404E0B                 inc     ecx
  10. ; Проверка EDX = (ECX + 1)
  11. .text:00404E0C                 cmp     ecx, edx
  12. ; Не равны - номер неправильный
  13. .text:00404E0E                 jnz     short loc_404E43
  14.  
  15. ; ECX = второй символ серийника
  16. .text:00404E10                 movsx   ecx, byte ptr [eax+1]
  17. ; EDX = шестой символ серийника
  18. .text:00404E14                 movsx   edx, byte ptr [eax+5]
  19. .text:00404E18                 add     ecx, 9
  20. ; Проверка EDX = (ECX + 9)
  21. .text:00404E1B                 cmp     ecx, edx
  22. ; Не равны - номер неправильный
  23. .text:00404E1D                 jnz     short loc_404E43
  24.  
  25. ; ECX = третий символ серийника
  26. .text:00404E1F                 movsx   ecx, byte ptr [eax+2]
  27. ; EDX = седьмой символ серийника
  28. .text:00404E23                 movsx   edx, byte ptr [eax+6]
  29. .text:00404E27                 add     ecx, 7
  30. ; Проверка EDX = (ECX + 7)
  31. .text:00404E2A                 cmp     ecx, edx
  32. ; Не равны - номер неправильный
  33. .text:00404E2C                 jnz     short loc_404E43
  34.  
  35. ; ECX = четвертый символ серийника
  36. .text:00404E2E                 movsx   ecx, byte ptr [eax+3]
  37. ; EDX = восьмой символ серийника
  38. .text:00404E32                 movsx   edx, byte ptr [eax+7]
  39. .text:00404E36                 add     ecx, 7
  40. ; Проверка EDX = (ECX + 7)
  41. .text:00404E39                 cmp     ecx, edx
  42. ; Не равны - номер неправильный
  43. .text:00404E3B                 jnz     short loc_404E43
  44.  
  45. ; Серийный номер правильный, EAX=1
  46. .text:00404E3D                 mov     eax, 1
  47. .text:00404E42                 retn
  48. .text:00404E43 ; -------------------------------------------------
  49. .text:00404E43 loc_404E43:
  50. ; Серийный номер неправильный, EAX=0
  51. .text:00404E43                 xor     eax, eax
  52. .text:00404E45                 retn
  53. .text:00404E45 sub_404E00      endp
Теперь то же самое, но словами. Длина проверяемой части серийного номера - 8 символов. Пятый символ равен первому + 1, шестой равен второму + 9, седьмой равен третьему + 7, восьмой равен четвертому + 7. Например, под эту схему подходит номер "00001977". Вводим его в программу, она радостно благодарит за регистрацию. После перезапуска программы пропадают все признаки триальности, значит все сделано правильно.

Программа успешно зарегистрирована
Программа успешно зарегистрирована

Положительным моментом является то, что серийник записывается в файл конфигурации, а не в реестр, так что после регистрации CC Get MAC Address становится полностью портативной и может работать, например, с флешки.

Поделиться ссылкой ВКонтакте
Просмотров: 7098 | Комментариев: 11

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
INC. (25.12.2009 в 01:21):
ManHunter ок более не буду
ManHunter (24.12.2009 в 01:08):
Для крякмисов есть целые сайты, не вижу смысла что-то здесь дублировать. А с объемами современного говнософтопрома крякерам работы и так надолго хватит :) Дельфи будет в следующей статье, как раз потихоньку готовлю материал.
AyTkACT (24.12.2009 в 01:00):
Как насчёт попугать народ реверсингом дельфийских приложений?
Чтоб тонны листинга поворочили, чтоб IDA подумала хотя б пару минут?
И как вариант можно пропускать части выкладок чтоб люди действительно покопошили код и пораскинули мозгами как и что взялось? Так сказать полурешённые крекми...
ManHunter (24.12.2009 в 00:51):
Ну дык, зря я что ли до этого варезный портал в одиночку держал? :)) Пусть народ учится на простеньком, до сложного сами дойдут.
AyTkACT (24.12.2009 в 00:50):
С офсайта качается 2.3
Немного изменён код.
Процедура проверки серийника не именена.

// Manhunter, где ты хоть находишь такие деЦкие (ничем не накрытые и с деЦким алгоритмом проверки) программы???
Тут за что ни возьмись то экзекриптор, то темида, то вмпротект... :(
=TimmeS= (23.12.2009 в 21:14):
Ладно хоть авторство постеснялся не убирать под статьей, но всё равно гаденько так выходит
ManHunter (23.12.2009 в 15:42):
Посмотрим, может словами дойдет.
DiFor (23.12.2009 в 15:40):
забивай полностью всю картнику прозрачными ватермарками даби люди не пакостничали
SAY (23.12.2009 в 08:31):
ManHunter, как всегда на высоте! Спс.
ManHunter (23.12.2009 в 07:36):
INC., ты когда мои статьи у себя постишь, то скриншоты не обрезай. Не нравится мой штамп - иди ломай сам. А то специально для тебя буду штамп в центр ставить, запаришься вырезать.
INC. (23.12.2009 в 02:22):
Thanks

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.006 сек.) / Память: 4.5 Mb
Наверх