Сейчас на форуме: Magister Yoda, site-pro, Rio (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Привязка к железу LaserCam
Посл.ответ Сообщение


Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 12 февраля 2012 22:09 · Поправил: neomant
· Личное сообщение · #1

Была куплена одна лицензия на данное приложение, попросили отвязать от железа.
По началу казалось просто - какой-то самописный конверт, снимается за 5 минут.
Далее видим использование библиотеки Crypto++. Версию не определил, но от 5.6.1
идовские сигны легли вроде как нормально.

sub_5547B0 - чтение и разбор файла активации.
sub_553420 - сбор данных по железу, их хеширование, бейсирование и ещё что-то.

А вот дальше интереснее. Самого места где идёт сравнение данных из файла и полученных с WMI я не нахожу.
Бьюсь уже около двух недель. Укажите на путь истинный.

Само приложение. Там же и idb файл. Файл активации, если понадобиться, выложу отдельно.

-----
Следуй за белым кроликом




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 12 февраля 2012 23:19 · Поправил: Vovan666
· Личное сообщение · #2

HWID формируется в 0054E8F0

Вызывается в 2х местах
Code:
  1. 0046AA99  |.  E8 523E0E00                                CALL 0054E8F0 
  2. 0046AA9E  |.  837C24 1C 10                               CMP DWORD PTR SS:[ESP+1C],10
  3. 0046AAA3  |.  8B4424 08                                  MOV EAX,DWORD PTR SS:[ESP+8]<-HWID
  4.  
  5. 00460863   .  E8 88E00E00                                CALL 0054E8F0                                                ; \LaserCam.0054E8F0
  6. 00460868   .  397C24 54                                  CMP DWORD PTR SS:[ESP+54],EDI
  7. 0046086C   .  8B4424 40                                  MOV EAX,DWORD PTR SS:[ESP+40]<-HWID


что если с 0046AAA3 и 0046086C сделать jmp в пустое место и там поменять сгенерированный hwid на тот под который ключ?
Примерно так
http://zalil.ru/32694491



Ранг: 22.4 (новичок), 19thx
Активность: 0.020
Статус: Участник

Создано: 13 февраля 2012 01:16
· Личное сообщение · #3

LaserCam_org.exe
File Type : 32-Bit Exe (Subsystem : Win GUI / 2), Size : 973312 (0EDA00h) Byte(s)
[File Heuristics] -> Flag : 00000000000001011100000000100011 (0x0005C023)
[!] MPRESS x32 v2.17 compressed

LaserCam.exe
File Type : 32-Bit Exe (Subsystem : Win GUI / 2), Size : 3588096 (036C000h) Byte(s)
[x] Warning - FileAlignment seems wrong.. is 0x00000200, calculated 0x00001000
[File Heuristics] -> Flag : 00000000000001011100000000000010 (0x0005C002)
[!] DONGLE - Matrix Hardware Lock references detected !
[!] Possible CD/DVD-Key or Serial Check -> SerialNumber
[CompilerDetect] -> Visual C++ 8.0 (Visual Studio 2005)



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

Создано: 14 февраля 2012 12:30
· Личное сообщение · #4

neomant

а если сэмулить матрикс, то лицензию он просит?

-----
...или ты работаешь хорошо, или ты работаешь много...





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 14 февраля 2012 14:07
· Личное сообщение · #5

BfoX
если память не изменяет (давно было), то matrix там чисто как HWID используется

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




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

Создано: 14 февраля 2012 14:10
· Личное сообщение · #6

ajax

да там не только matrix, но еще походу и sg-lock

-----
...или ты работаешь хорошо, или ты работаешь много...





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 14 февраля 2012 15:12
· Личное сообщение · #7

BfoX
сейчас глянул на прогу еще раз. есть и sg-lock. используются всего 3 функи, search, readsn, readprodid. есть и tdxmw32.dll (самопал?) - тот же HWID получают

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 14 февраля 2012 18:00 · Поправил: neomant
· Личное сообщение · #8

Vovan666 пишет:
HWID формируется в 0054E8F0

Вроде это не совсем так. Здесь формируется лицензионный ключ, который нужно отослать автору. Далее в теле есть его проверка, но с его же копией. Интуиция подсказывает, что вся работа защиты идет таки в sub_553420. Там создаются объекты типа:
Code:
  1. StringSource source(b64HardwareHash, true, new SignatureVerificationFilter(*new DSA::Verifier()))

Но сам результат проверки не запрашивается.
Есть ещё некий публичный ключ...
Code:
  1. 00452BFE                 push    offset aMiidrjccajkgby

Структура, в которой передаются параметры защиты между функциями:
Code:
  1. .text:004602E3                 mov     ecx, offset securityObject ; void *
  2. .text:004602E8                 call    sub_5547B0

ajax пишет:
tdxmw32.dll (самопал?)

У меня эта библиотека не загружается. Да и в дистрибутиве приложения ее нет. Думаю это ошмётки от предыдущих версий кода.

Продолжаю копать. Буду благодарен, если будут какие идеи.

-----
Следуй за белым кроликом





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 14 февраля 2012 23:22
· Личное сообщение · #9

Проблема решена. Пропатчил функцию проверки подписи:
Code:
  1.  protected: virtual void __thiscall CryptoPP::SignatureVerificationFilter::LastPut(unsigned char const *, unsigned int) proc near
  2. .text:00561AD0                                         ; DATA XREF: .text:006640B0o
  3. .text:00561AD0
  4. .text:00561AD0 var_2C          = byte ptr -2Ch
  5. .text:00561AD0 arg_0           = dword ptr  4
  6. .text:00561AD0 arg_4           = dword ptr  8
  7. .text:00561AD0
  8. .text:00561AD0                 sub     esp, 2Ch
  9. .text:00561AD3                 push    esi
  10. .text:00561AD4                 mov     esi, ecx
  11. .text:00561AD6                 mov     byte ptr [esi+5Ch], 1 // m_verified всегда true
  12. .text:00561ADA                 nop
  13. .text:00561ADB                 nop
  14. .text:00561ADC                 test    byte ptr [esi+4Ch], 1
  15. .text:00561AE0                 mov     ecx, [esi+44h]
  16. .text:00561AE3                 jz      short loc_561B08
  17. .text:00561AE5                 mov     edx, [esi+54h]
  18. .text:00561AE8                 mov     eax, [ecx]
  19. .text:00561AEA                 mov     eax, [eax+28h]
  20. .text:00561AED                 push    edx
  21. .text:00561AEE                 mov     edx, [esi+58h]
  22. .text:00561AF1                 push    edx
  23. .text:00561AF2                 mov     edx, [esi+48h]
  24. .text:00561AF5                 push    edx
  25. .text:00561AF6                 call    eax
  26. .text:00561AF8                 mov     eax, [esi+48h]
  27. .text:00561AFB                 mov     ecx, [esi+44h]
  28. .text:00561AFE                 mov     edx, [ecx]
  29. .text:00561B00                 push    eax
  30. .text:00561B01                 mov     eax, [edx+30h]
  31. .text:00561B04                 call    eax
  32. .text:00561B06                 jmp     short loc_561B50
  33. .text:00561B08 ; ---------------------------------------------------------------------------
  34. .text:00561B08
  35. .text:00561B08 loc_561B08:                             ; CODE XREF: CryptoPP::SignatureVerificationFilter::LastPut(uchar const *,uint)+13j
  36. .text:00561B08                 mov     edx, [ecx]
  37. .text:00561B0A                 mov     eax, [esi+48h]
  38. .text:00561B0D                 mov     edx, [edx+28h]
  39. .text:00561B10                 push    ebx
  40. .text:00561B11                 mov     ebx, [esp+34h+arg_0]
  41. .text:00561B15                 push    edi
  42. .text:00561B16                 mov     edi, [esp+38h+arg_4]
  43. .text:00561B1A                 push    edi
  44. .text:00561B1B                 push    ebx
  45. .text:00561B1C                 push    eax
  46. .text:00561B1D                 call    edx
  47. .text:00561B1F                 mov     eax, [esi+48h]
  48. .text:00561B22                 mov     ecx, [esi+44h]
  49. .text:00561B25                 mov     edx, [ecx]
  50. .text:00561B27                 push    eax
  51. .text:00561B28                 mov     eax, [edx+30h]
  52. .text:00561B2B                 call    eax
  53. .text:00561B2D                 test    byte ptr [esi+4Ch], 4
  54. .text:00561B31                 jz      short loc_561B4E
  55. .text:00561B33                 mov     edx, [esi]
  56. .text:00561B35                 mov     eax, [edx+0A4h]
  57. .text:00561B3B                 mov     ecx, esi
  58. .text:00561B3D                 call    eax
  59. .text:00561B3F                 mov     edx, [eax]
  60. .text:00561B41                 push    1
  61. .text:00561B43                 push    0
  62. .text:00561B45                 push    edi
  63. .text:00561B46                 mov     ecx, eax
  64. .text:00561B48                 mov     eax, [edx+14h]
  65. .text:00561B4B                 push    ebx
  66. .text:00561B4C                 call    eax
  67. .text:00561B4E
  68. .text:00561B4E loc_561B4E:                             ; CODE XREF: CryptoPP::SignatureVerificationFilter::LastPut(uchar const *,uint)+61j
  69. .text:00561B4E                 pop     edi
  70. .text:00561B4F                 pop     ebx
  71. .text:00561B50
  72. .text:00561B50 loc_561B50:                             ; CODE XREF: CryptoPP::SignatureVerificationFilter::LastPut(uchar const *,uint)+36j
  73. .text:00561B50                 test    byte ptr [esi+4Ch], 8
  74. .text:00561B54                 jz      short loc_561B7D
  75. .text:00561B56                 mov     cl, [esi+5Ch]
  76. .text:00561B59                 mov     edx, [esi]
  77. .text:00561B5B                 mov     eax, [edx+0A4h]
  78. .text:00561B61                 mov     byte ptr [esp+30h+arg_4], cl
  79. .text:00561B65                 mov     ecx, esi
  80. .text:00561B67                 call    eax
  81. .text:00561B69                 mov     edx, [eax]
  82. .text:00561B6B                 mov     edx, [edx+14h]
  83. .text:00561B6E                 push    1
  84. .text:00561B70                 push    0
  85. .text:00561B72                 push    1
  86. .text:00561B74                 lea     ecx, [esp+3Ch+arg_4]
  87. .text:00561B78                 push    ecx
  88. .text:00561B79                 mov     ecx, eax
  89. .text:00561B7B                 call    edx
  90. .text:00561B7D
  91. .text:00561B7D loc_561B7D:                             ; CODE XREF: CryptoPP::SignatureVerificationFilter::LastPut(uchar const *,uint)+84j
  92. .text:00561B7D                 test    byte ptr [esi+4Ch], 10h
  93. .text:00561B81                 jz      short loc_561BA1
  94. .text:00561B83                 cmp     byte ptr [esi+5Ch], 0
  95. .text:00561B87                 jnz     short loc_561BA1
  96. .text:00561B89                 lea     ecx, [esp+30h+var_2C]
  97. .text:00561B8D                 call    sub_561850
  98. .text:00561B92                 push    offset dword_6A1DFC
  99. .text:00561B97                 lea     eax, [esp+34h+var_2C]
  100. .text:00561B9B                 push    eax
  101. .text:00561B9C                 call    _CxxThrowException(x,x)
  102. .text:00561BA1 ; ---------------------------------------------------------------------------
  103. .text:00561BA1
  104. .text:00561BA1 loc_561BA1:                             ; CODE XREF: CryptoPP::SignatureVerificationFilter::LastPut(uchar const *,uint)+B1j
  105. .text:00561BA1                                         ; CryptoPP::SignatureVerificationFilter::LastPut(uchar const *,uint)+B7j
  106. .text:00561BA1                 pop     esi
  107. .text:00561BA2                 add     esp, 2Ch
  108. .text:00561BA5                 retn    8


-----
Следуй за белым кроликом



 eXeL@B —› Крэки, обсуждения —› Привязка к железу LaserCam
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати