Blog. Just Blog

Исследование защиты программы NIUBI Partition Editor

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

Программа NIUBI Partition Editor, как можно догадаться из названия, предназначена для работы с разделами дисков. На борту имеется стандартный для таких утилит инструментарий, но оно и не удивительно, ведь задачи выполняются одинаковые, а кушать хочется всем производителям. А аппетит, мягко говоря, у этих разработчиков хороший. Почти 800 баксов за лицензию - это слишком жирно. Так что добро пожаловать на обезжиривание.

На офсайте есть несколько вариантов дистрибутивов, как я понял, самый крутой - это "Technician Edition", вот его и забираем. Устанавливаем, смотрим. Исполняемый файл ничем не упакован, как и всегда для таких случаев, отправляем его на дизассемблирование. А пока IDA работает, попробуем активировать программу любыми левыми данными.

Сообщение о неправильной активации
Сообщение о неправильной активации

Она, понятно дело, отреагирует вот таким сообщением. Отлично, текст у нас есть, найдем его в файле.

Строка сообщения в ресурсах
Строка сообщения в ресурсах

Как видно, индекс строки сообщения в ресурсах равняется 64269 или же 0FB0Dh, если в шестнадцатеричной системе. Поищем это значение в листинге дизассемблера.
  1. .text:0095C7C0                 dd 0FB0Dh
  2. .text:0095C7C4 off_95C7C4      dd offset hModule
В таком виде декомпилятор представляет ссылки на строковые ресурсы для программ, написанных на Дельфи. А NIUBI Partition Editor как раз на этом языке и написана. В свою очередь, на эту конструкцию должен быть еще один указатель, а уже на него должен ссылаться код.
  1. .data:00B2AAE4 off_B2AAE4      dd offset off_95C7C4
Указатель есть, на него имеется всего одна ссылка из секции кода. Маленькая процедурка, которая выводит сообщение на экран. По сути она бесполезная, так что я приведу ее в урезанном виде.
  1. .text:00ABA4D8 sub_ABA4D8      proc near
  2. .text:00ABA4D8                 push    ebp
  3. .text:00ABA4D9                 mov     ebp, esp
  4. .text:00ABA4DB                 push    0
  5. .text:00ABA4DD                 push    0
  6. .text:00ABA4DF                 xor     eax, eax
  7. .text:00ABA4E1                 push    ebp
  8. .text:00ABA4E2                 push    offset loc_ABA552
  9. .text:00ABA4E7                 push    dword ptr fs:[eax]
  10. .text:00ABA4EA                 mov     fs:[eax], esp
  11. .text:00ABA4ED                 push    2
  12. .text:00ABA4EF                 push    2
  13. .text:00ABA4F1                 push    0
  14. .text:00ABA4F3                 push    6
  15. .text:00ABA4F5                 lea     edx, [ebp+var_8]
  16. ; Вывести сообщение о неправильной регистрации
  17. .text:00ABA4F8                 mov     eax, off_B2AAE4
  18. .text:00ABA4FD                 call    sub_40D9D8
  19. .text:00ABA502                 mov     edx, [ebp+var_8]
  20. .text:00ABA505                 lea     ecx, [ebp+var_4]
  21. .text:00ABA508                 mov     eax, 1C9C66Fh
  22. .text:00ABA50D                 call    sub_9CE7B8
  23. ...
  24. ...
По единственной перекрестной ссылке выходим на код, откуда эта процедура вызывается.
  1. .text:00ABA94F                 mov     edx, [ebp+var_8]
  2. .text:00ABA952                 call    sub_40A894
  3. .text:00ABA957                 jnz     short loc_ABA98F
  4. ; Вызвать функцию проверки регистрации
  5. .text:00ABA959                 call    sub_9ADEA0
  6. .text:00ABA95E                 cmp     al, 3
  7. ; Если AL=3, то вывести сообщение о неправильной регистрации
  8. .text:00ABA960                 jnz     short loc_ABA969
  9. .text:00ABA962                 push    ebp
  10. .text:00ABA963                 call    sub_ABA4D8
  11. .text:00ABA968                 pop     ecx
  12. .text:00ABA969 loc_ABA969:
  13. .text:00ABA969                 mov     eax, [ebp+var_4]
  14. .text:00ABA96C                 inc     dword ptr [eax+3ECh]
  15. .text:00ABA972                 mov     eax, [ebp+var_4]
  16. .text:00ABA975                 cmp     dword ptr [eax+3ECh], 3
Тут уже интереснее. Вызывается функция проверки, если она вернула значение AL=3, то выводится сообщение о неправильной регистрации. Откроем функцию проверки, посмотрим, что там происходит.
  1. .text:009ADEA0 sub_9ADEA0      proc near
  2. .text:009ADEA0                 push    ebp
  3. .text:009ADEA1                 mov     ebp, esp
  4. .text:009ADEA3                 add     esp, 0FFFFFDD4h
  5. .text:009ADEA9                 push    ebx
  6. .text:009ADEAA                 xor     eax, eax
  7. .text:009ADEAC                 mov     [ebp+var_22C], eax
  8. .text:009ADEB2                 mov     [ebp+var_4], eax
  9. .text:009ADEB5                 mov     [ebp+var_8], eax
  10. .text:009ADEB8                 lea     eax, [ebp+var_14]
  11. .text:009ADEBB                 mov     edx, ds:off_9AC404
  12. .text:009ADEC1                 call    sub_40ADF0
  13. .text:009ADEC6                 xor     eax, eax
  14. .text:009ADEC8                 push    ebp
  15. .text:009ADEC9                 push    offset loc_9ADF77
  16. .text:009ADECE                 push    dword ptr fs:[eax]
  17. .text:009ADED1                 mov     fs:[eax], esp
  18. .text:009ADED4                 lea     eax, [ebp+var_22C]
  19. .text:009ADEDA                 call    sub_9AC978
  20. .text:009ADEDF                 mov     eax, [ebp+var_22C]
  21. .text:009ADEE5                 push    eax
  22. .text:009ADEE6                 call    sub_9ACD24
  23. .text:009ADEEB                 lea     ecx, [ebp+var_228]
  24. .text:009ADEF1                 pop     edx
  25. .text:009ADEF2                 call    sub_6AA35C
  26. .text:009ADEF7                 test    al, al
  27. .text:009ADEF9                 jz      short loc_9ADF20
  28. .text:009ADEFB                 lea     eax, [ebp+var_4]
  29. .text:009ADEFE                 lea     edx, [ebp+var_220]
  30. .text:009ADF04                 mov     ecx, 104h
  31. .text:009ADF09                 call    sub_40A5AC
  32. .text:009ADF0E                 lea     ecx, [ebp+var_8]
  33. .text:009ADF11                 mov     edx, offset off_9ADF94
  34. .text:009ADF16                 mov     eax, [ebp+var_4]
  35. .text:009ADF19                 call    sub_95C8A4
  36. .text:009ADF1E                 jmp     short loc_9ADF28
  37. .text:009ADF20 ; ---------------------------------------
  38. .text:009ADF20 loc_9ADF20:
  39. .text:009ADF20                 lea     eax, [ebp+var_8]
  40. .text:009ADF23                 call    sub_4095F0
  41. .text:009ADF28 loc_9ADF28:
  42. .text:009ADF28                 push    [ebp+var_224]
  43. .text:009ADF2E                 push    [ebp+var_228]
  44. .text:009ADF34                 lea     edx, [ebp+var_14]
  45. .text:009ADF37                 mov     eax, [ebp+var_8]
  46. .text:009ADF3A                 call    sub_9AE038
  47. .text:009ADF3F                 movzx   ebx, [ebp+var_14]
  48. .text:009ADF43                 xor     eax, eax
  49. .text:009ADF45                 pop     edx
  50. .text:009ADF46                 pop     ecx
  51. .text:009ADF47                 pop     ecx
  52. .text:009ADF48                 mov     fs:[eax], edx
  53. .text:009ADF4B                 push    offset loc_9ADF7E
  54. .text:009ADF50 loc_9ADF50:
  55. .text:009ADF50                 lea     eax, [ebp+var_22C]
  56. .text:009ADF56                 call    sub_4095F0
  57. .text:009ADF5B                 lea     eax, [ebp+var_14]
  58. .text:009ADF5E                 mov     edx, ds:off_9AC404
  59. .text:009ADF64                 call    sub_40AEC8
  60. .text:009ADF69                 lea     eax, [ebp+var_8]
  61. .text:009ADF6C                 mov     edx, 2
  62. .text:009ADF71                 call    sub_409650
  63. .text:009ADF76                 retn
  64. .text:009ADF77 ; ---------------------------------------
  65. .text:009ADF77 loc_9ADF77:
  66. .text:009ADF77                 jmp     loc_408B9C
  67. .text:009ADF7C ; ---------------------------------------
  68. .text:009ADF7C                 jmp     short loc_9ADF50
  69. .text:009ADF7E ; ---------------------------------------
  70. .text:009ADF7E loc_9ADF7E:
  71. .text:009ADF7E                 mov     eax, ebx
  72. .text:009ADF80                 pop     ebx
  73. .text:009ADF81                 mov     esp, ebp
  74. .text:009ADF83                 pop     ebp
  75. .text:009ADF84                 retn
  76. .text:009ADF84 sub_9ADEA0      endp
Тут стоит начать обзор с самого конца. Результат функции проверки записывается в регистр EAX из регистра EBX. А он инициализируется выше по коду командой movzx ebx, [ebp+var_14]. Переменная, из которой берется значение, обрабатывается в функции sub_9AE038, в которую эта переменная передается в качестве параметра. И мы помним, что возвращаемое значение точно не должно быть 3. Давайте пойдем еще глубже и посмотрим, что делается в этой функции.
  1. .text:009AE038 sub_9AE038      proc near
  2. .text:009AE038                 push    ebp
  3. .text:009AE039                 mov     ebp, esp
  4. .text:009AE03B                 add     esp, 0FFFFFFECh
  5. .text:009AE03E                 push    ebx
  6. .text:009AE03F                 push    esi
  7. .text:009AE040                 xor     ecx, ecx
  8. .text:009AE042                 mov     [ebp+var_14], ecx
  9. .text:009AE045                 mov     [ebp+var_8], ecx
  10. .text:009AE048                 mov     ebx, edx
  11. .text:009AE04A                 mov     [ebp+var_4], eax
  12. .text:009AE04D                 mov     eax, [ebp+var_4]
  13. .text:009AE050                 call    sub_4096D4
  14. .text:009AE055                 xor     eax, eax
  15. .text:009AE057                 push    ebp
  16. .text:009AE058                 push    offset loc_9AE381
  17. .text:009AE05D                 push    dword ptr fs:[eax]
  18. .text:009AE060                 mov     fs:[eax], esp
  19. .text:009AE063                 lea     eax, [ebp+var_8]
  20. .text:009AE066                 mov     edx, [ebp+var_4]
  21. .text:009AE069                 call    sub_409A18
  22. .text:009AE06E                 cmp     [ebp+var_8], 0
  23. .text:009AE072                 jz      loc_9AE324
  24. .text:009AE078                 lea     eax, [ebp+var_14]
  25. .text:009AE07B                 push    eax
  26. .text:009AE07C                 mov     ecx, 2
  27. .text:009AE081                 mov     edx, 1
  28. .text:009AE086                 mov     eax, [ebp+var_8]
  29. .text:009AE089                 call    sub_40A8CC
  30. .text:009AE08E                 mov     eax, [ebp+var_14]
  31. .text:009AE091                 mov     edx, offset aTc ; "TC"
  32. .text:009AE096                 call    sub_40A894
  33. .text:009AE09B                 jnz     short loc_9AE0BF
  34. .text:009AE09D                 mov     esi, [ebp+var_8]
  35. .text:009AE0A0                 test    esi, esi
  36. .text:009AE0A2                 jz      short loc_9AE0A9
  37. .text:009AE0A4                 sub     esi, 4
  38. .text:009AE0A7                 mov     esi, [esi]
  39. .text:009AE0A9 loc_9AE0A9:
  40. .text:009AE0A9                 lea     eax, [ebp+var_8]
  41. .text:009AE0AC                 push    eax
  42. .text:009AE0AD                 mov     ecx, esi
  43. .text:009AE0AF                 sub     ecx, 8
  44. .text:009AE0B2                 mov     edx, 9
  45. .text:009AE0B7                 mov     eax, [ebp+var_8]
  46. .text:009AE0BA                 call    sub_40A8CC
  47. .text:009AE0BF loc_9AE0BF:
  48. .text:009AE0BF                 mov     eax, [ebp+var_8]
  49. .text:009AE0C2                 call    sub_9AD40C
  50. .text:009AE0C7                 mov     [ebx+8], al
  51. .text:009AE0CA                 cmp     byte ptr [ebx+8], 0
  52. .text:009AE0CE                 jz      short loc_9AE0F2
  53. .text:009AE0D0                 mov     esi, [ebp+var_8]
  54. .text:009AE0D3                 test    esi, esi
  55. .text:009AE0D5                 jz      short loc_9AE0DC
  56. .text:009AE0D7                 sub     esi, 4
  57. .text:009AE0DA                 mov     esi, [esi]
  58. .text:009AE0DC loc_9AE0DC:
  59. .text:009AE0DC                 lea     eax, [ebp+var_8]
  60. .text:009AE0DF                 push    eax
  61. .text:009AE0E0                 mov     ecx, esi
  62. .text:009AE0E2                 sub     ecx, 6
  63. .text:009AE0E5                 mov     edx, 7
  64. .text:009AE0EA                 mov     eax, [ebp+var_8]
  65. .text:009AE0ED                 call    sub_40A8CC
  66. .text:009AE0F2 loc_9AE0F2:
  67. .text:009AE0F2                 lea     eax, [ebx+4]
  68. .text:009AE0F5                 mov     edx, [ebp+var_8]
  69. .text:009AE0F8                 call    sub_4099D0
  70. .text:009AE0FD                 mov     ecx, offset aPro ; "PRO"
  71. .text:009AE102                 mov     edx, offset aProf ; "PROF"
  72. .text:009AE107                 mov     eax, [ebp+var_8]
  73. .text:009AE10A                 call    sub_9ACFC4
  74. .text:009AE10F                 test    al, al
  75. .text:009AE111                 jz      short loc_9AE11B
  76. .text:009AE113                 mov     byte ptr [ebx], 5
  77. .text:009AE116                 jmp     loc_9AE327
  78. .text:009AE11B ; ---------------------------------------
  79. .text:009AE11B loc_9AE11B:
  80. .text:009AE11B                 mov     ecx, offset aServ ; "SERV"
  81. .text:009AE120                 mov     edx, offset aServ ; "SERV"
  82. .text:009AE125                 mov     eax, [ebp+var_8]
  83. .text:009AE128                 call    sub_9ACFC4
  84. .text:009AE12D                 test    al, al
  85. .text:009AE12F                 jz      short loc_9AE139
  86. .text:009AE131                 mov     byte ptr [ebx], 6
  87. .text:009AE134                 jmp     loc_9AE327
  88. .text:009AE139 ; ---------------------------------------
  89. .text:009AE139 loc_9AE139:
  90. .text:009AE139                 mov     ecx, offset aEnte ; "ENTE"
  91. .text:009AE13E                 mov     edx, offset aEnte ; "ENTE"
  92. .text:009AE143                 mov     eax, [ebp+var_8]
  93. .text:009AE146                 call    sub_9ACFC4
  94. .text:009AE14B                 test    al, al
  95. .text:009AE14D                 jz      short loc_9AE157
  96. .text:009AE14F                 mov     byte ptr [ebx], 7
  97. .text:009AE152                 jmp     loc_9AE327
  98. .text:009AE157 ; ---------------------------------------
  99. .text:009AE157 loc_9AE157:
  100. .text:009AE157                 mov     ecx, offset aUnli ; "UNLI"
  101. .text:009AE15C                 mov     edx, offset off_9AE424
  102. .text:009AE161                 mov     eax, [ebp+var_8]
  103. .text:009AE164                 call    sub_9ACFC4
  104. .text:009AE169                 test    al, al
  105. .text:009AE16B                 jz      short loc_9AE175
  106. .text:009AE16D                 mov     byte ptr [ebx], 8
  107. .text:009AE170                 jmp     loc_9AE327
  108. .text:009AE175 ; ---------------------------------------
  109. .text:009AE175 loc_9AE175:
  110. .text:009AE175                 mov     ecx, offset aUnli1 ; "UNLI1"
  111. .text:009AE17A                 mov     edx, offset off_9AE45C
  112. .text:009AE17F                 mov     eax, [ebp+var_8]
  113. .text:009AE182                 call    sub_9ACFC4
  114. .text:009AE187                 test    al, al
  115. .text:009AE189                 jz      short loc_9AE193
  116. .text:009AE18B                 mov     byte ptr [ebx], 9
  117. .text:009AE18E                 jmp     loc_9AE327
  118. .text:009AE193 ; ---------------------------------------
  119. .text:009AE193 loc_9AE193:
  120. .text:009AE193                 mov     ecx, offset aUnli2 ; "UNLI2"
  121. .text:009AE198                 mov     edx, offset off_9AE490
  122. .text:009AE19D                 mov     eax, [ebp+var_8]
  123. .text:009AE1A0                 call    sub_9ACFC4
  124. .text:009AE1A5                 test    al, al
  125. .text:009AE1A7                 jz      short loc_9AE1B1
  126. .text:009AE1A9                 mov     byte ptr [ebx], 0Ah
  127. .text:009AE1AC                 jmp     loc_9AE327
  128. .text:009AE1B1 ; ---------------------------------------
  129. .text:009AE1B1 loc_9AE1B1:
  130. .text:009AE1B1                 mov     ecx, offset aUnli3 ; "UNLI3"
  131. .text:009AE1B6                 mov     edx, offset off_9AE4C4
  132. .text:009AE1BB                 mov     eax, [ebp+var_8]
  133. .text:009AE1BE                 call    sub_9ACFC4
  134. .text:009AE1C3                 test    al, al
  135. .text:009AE1C5                 jz      short loc_9AE1CF
  136. .text:009AE1C7                 mov     byte ptr [ebx], 0Bh
  137. .text:009AE1CA                 jmp     loc_9AE327
  138. .text:009AE1CF ; ---------------------------------------
  139. .text:009AE1CF loc_9AE1CF:
  140. .text:009AE1CF                 mov     ecx, offset aTech ; "TECH"
  141. .text:009AE1D4                 mov     edx, offset aTech ; "TECH"
  142. .text:009AE1D9                 mov     eax, [ebp+var_8]
  143. .text:009AE1DC                 call    sub_9ACFC4
  144. .text:009AE1E1                 test    al, al
  145. .text:009AE1E3                 jz      short loc_9AE1ED
  146. .text:009AE1E5                 mov     byte ptr [ebx], 0Ch
  147. .text:009AE1E8                 jmp     loc_9AE327
  148. .text:009AE1ED ; ---------------------------------------
  149. .text:009AE1ED loc_9AE1ED:
  150. .text:009AE1ED                 mov     ecx, offset aAdmin ; "ADMIN"
  151. .text:009AE1F2                 mov     edx, offset aAdmin ; "ADMIN"
  152. .text:009AE1F7                 mov     eax, [ebp+var_8]
  153. .text:009AE1FA                 call    sub_9ACFC4
  154. .text:009AE1FF                 test    al, al
  155. .text:009AE201                 jz      short loc_9AE20B
  156. .text:009AE203                 mov     byte ptr [ebx], 0Dh
  157. .text:009AE206                 jmp     loc_9AE327
  158. .text:009AE20B ; ---------------------------------------
  159. .text:009AE20B loc_9AE20B:
  160. .text:009AE20B                 mov     ecx, offset aPro2 ; "PRO2"
  161. .text:009AE210                 mov     edx, offset off_9AE528
  162. .text:009AE215                 mov     eax, [ebp+var_8]
  163. .text:009AE218                 call    sub_9ACFC4
  164. .text:009AE21D                 test    al, al
  165. .text:009AE21F                 jz      short loc_9AE229
  166. .text:009AE221                 mov     byte ptr [ebx], 0Eh
  167. .text:009AE224                 jmp     loc_9AE327
  168. .text:009AE229 ; ---------------------------------------
  169. .text:009AE229 loc_9AE229:
  170. .text:009AE229                 mov     ecx, offset aProh1 ; "PROH1"
  171. .text:009AE22E                 mov     edx, offset off_9AE55C
  172. .text:009AE233                 mov     eax, [ebp+var_8]
  173. .text:009AE236                 call    sub_9ACFC4
  174. .text:009AE23B                 test    al, al
  175. .text:009AE23D                 jz      short loc_9AE247
  176. .text:009AE23F                 mov     byte ptr [ebx], 0Fh
  177. .text:009AE242                 jmp     loc_9AE327
  178. .text:009AE247 ; ---------------------------------------
  179. .text:009AE247 loc_9AE247:
  180. .text:009AE247                 mov     ecx, offset aProb1 ; "PROB1"
  181. .text:009AE24C                 mov     edx, offset off_9AE590
  182. .text:009AE251                 mov     eax, [ebp+var_8]
  183. .text:009AE254                 call    sub_9ACFC4
  184. .text:009AE259                 test    al, al
  185. .text:009AE25B                 jz      short loc_9AE265
  186. .text:009AE25D                 mov     byte ptr [ebx], 10h
  187. .text:009AE260                 jmp     loc_9AE327
  188. .text:009AE265 ; ---------------------------------------
  189. .text:009AE265 loc_9AE265:
  190. .text:009AE265                 mov     ecx, offset aProh2 ; "PROH2"
  191. .text:009AE26A                 mov     edx, offset off_9AE5C4
  192. .text:009AE26F                 mov     eax, [ebp+var_8]
  193. .text:009AE272                 call    sub_9ACFC4
  194. .text:009AE277                 test    al, al
  195. .text:009AE279                 jz      short loc_9AE283
  196. .text:009AE27B                 mov     byte ptr [ebx], 11h
  197. .text:009AE27E                 jmp     loc_9AE327
  198. .text:009AE283 ; ---------------------------------------
  199. .text:009AE283 loc_9AE283:
  200. .text:009AE283                 mov     ecx, offset aProb2 ; "PROB2"
  201. .text:009AE288                 mov     edx, offset off_9AE5F8
  202. .text:009AE28D                 mov     eax, [ebp+var_8]
  203. .text:009AE290                 call    sub_9ACFC4
  204. .text:009AE295                 test    al, al
  205. .text:009AE297                 jz      short loc_9AE2A1
  206. .text:009AE299                 mov     byte ptr [ebx], 12h
  207. .text:009AE29C                 jmp     loc_9AE327
  208. .text:009AE2A1 ; ---------------------------------------
  209. .text:009AE2A1 loc_9AE2A1:
  210. .text:009AE2A1                 mov     ecx, offset aServ2 ; "SERV2"
  211. .text:009AE2A6                 mov     edx, offset off_9AE62C
  212. .text:009AE2AB                 mov     eax, [ebp+var_8]
  213. .text:009AE2AE                 call    sub_9ACFC4
  214. .text:009AE2B3                 test    al, al
  215. .text:009AE2B5                 jz      short loc_9AE2BC
  216. .text:009AE2B7                 mov     byte ptr [ebx], 13h
  217. .text:009AE2BA                 jmp     short loc_9AE327
  218. .text:009AE2BC ; ---------------------------------------
  219. .text:009AE2BC loc_9AE2BC:
  220. .text:009AE2BC                 mov     ecx, offset aEnte2 ; "ENTE2"
  221. .text:009AE2C1                 mov     edx, offset off_9AE660
  222. .text:009AE2C6                 mov     eax, [ebp+var_8]
  223. .text:009AE2C9                 call    sub_9ACFC4
  224. .text:009AE2CE                 test    al, al
  225. .text:009AE2D0                 jz      short loc_9AE2D7
  226. .text:009AE2D2                 mov     byte ptr [ebx], 14h
  227. .text:009AE2D5                 jmp     short loc_9AE327
  228. .text:009AE2D7 ; ---------------------------------------
  229. .text:009AE2D7 loc_9AE2D7:
  230. .text:009AE2D7                 mov     ecx, offset a30d ; "30D"
  231. .text:009AE2DC                 mov     edx, offset a30_d ; "30_D"
  232. .text:009AE2E1                 mov     eax, [ebp+var_8]
  233. .text:009AE2E4                 call    sub_9ACFC4
  234. .text:009AE2E9                 test    al, al
  235. .text:009AE2EB                 jz      short loc_9AE31F
  236. .text:009AE2ED                 mov     eax, [ebp+arg_0]
  237. .text:009AE2F0                 mov     dword ptr [ebp+var_10], eax
  238. .text:009AE2F3                 mov     eax, [ebp+arg_4]
  239. .text:009AE2F6                 mov     dword ptr [ebp+var_10+4], eax
  240. .text:009AE2F9                 call    sub_4283C4
  241. .text:009AE2FE                 add     esp, 0FFFFFFF8h
  242. .text:009AE301                 fstp    [esp+30h+var_30]
  243. .text:009AE304                 wait
  244. .text:009AE305                 push    dword ptr [ebp+var_10+4]
  245. .text:009AE308                 push    dword ptr [ebp+var_10] ; double
  246. .text:009AE30B                 call    sub_4F840C
  247. .text:009AE310                 cmp     eax, 1Eh
  248. .text:009AE313                 jg      short loc_9AE31A
  249. .text:009AE315                 mov     byte ptr [ebx], 2
  250. .text:009AE318                 jmp     short loc_9AE327
  251. .text:009AE31A ; ---------------------------------------
  252. .text:009AE31A loc_9AE31A:
  253. .text:009AE31A                 mov     byte ptr [ebx], 3
  254. .text:009AE31D                 jmp     short loc_9AE327
  255. .text:009AE31F ; ---------------------------------------
  256. .text:009AE31F loc_9AE31F:
  257. .text:009AE31F                 mov     byte ptr [ebx], 0
  258. .text:009AE322                 jmp     short loc_9AE327
  259. .text:009AE324 ; ---------------------------------------
  260. .text:009AE324 loc_9AE324:
  261. .text:009AE324                 mov     byte ptr [ebx], 0
  262. .text:009AE327 loc_9AE327:
  263. .text:009AE327                 call    isServer
  264. .text:009AE32C                 test    al, al
  265. .text:009AE32E                 jz      short loc_9AE33E
  266. .text:009AE330                 movzx   eax, byte ptr [ebx]
  267. .text:009AE333                 sub     al, 5
  268. .text:009AE335                 jz      short loc_9AE33B
  269. .text:009AE337                 sub     al, 9
  270. .text:009AE339                 jnz     short loc_9AE33E
  271. .text:009AE33B loc_9AE33B:
  272. .text:009AE33B                 mov     byte ptr [ebx], 4
  273. .text:009AE33E loc_9AE33E:
  274. .text:009AE33E                 call    sub_9AD494
  275. .text:009AE343                 movzx   edx, byte ptr [ebx]
  276. .text:009AE346                 sub     dl, 1
  277. .text:009AE349                 jnb     short loc_9AE35E
  278. .text:009AE34B                 cmp     al, 1
  279. .text:009AE34D                 jz      short loc_9AE352
  280. .text:009AE34F                 mov     byte ptr [ebx], 1
  281. .text:009AE352 loc_9AE352:
  282. .text:009AE352                 call    isServer
  283. .text:009AE357                 test    al, al
  284. .text:009AE359                 jz      short loc_9AE35E
  285. .text:009AE35B                 mov     byte ptr [ebx], 1
  286. .text:009AE35E loc_9AE35E:
  287. .text:009AE35E                 xor     eax, eax
  288. .text:009AE360                 pop     edx
  289. .text:009AE361                 pop     ecx
  290. .text:009AE362                 pop     ecx
  291. .text:009AE363                 mov     fs:[eax], edx
  292. .text:009AE366                 push    offset loc_9AE388
  293. .text:009AE36B loc_9AE36B:
  294. .text:009AE36B                 lea     eax, [ebp+var_14]
  295. .text:009AE36E                 call    sub_4095F0
  296. .text:009AE373                 lea     eax, [ebp+var_8]
  297. .text:009AE376                 mov     edx, 2
  298. .text:009AE37B                 call    sub_409650
  299. .text:009AE380                 retn
  300. .text:009AE381 ; ---------------------------------------
  301. .text:009AE381 loc_9AE381:
  302. .text:009AE381                 jmp     loc_408B9C
  303. .text:009AE386 ; ---------------------------------------
  304. .text:009AE386                 jmp     short loc_9AE36B
  305. .text:009AE388 ; ---------------------------------------
  306. .text:009AE388 loc_9AE388:
  307. .text:009AE388                 pop     esi
  308. .text:009AE389                 pop     ebx
  309. .text:009AE38A                 mov     esp, ebp
  310. .text:009AE38C                 pop     ebp
  311. .text:009AE38D                 retn    8
  312. .text:009AE38D sub_9AE038      endp
Здесь проверяются типы лицензии, а затем по итогам проверки в результат заносится значение до 14h. Еще выполняется проверка на предмет запуска на серверной платформе, так как младшие редакции программы такой запуск выполнять не позволяют. Технической лицензии соответствует значение 0Ch. Возвращаемся к предыдущей функции проверки и патчим ее начало по адресу 009ADEA0 парой команд MOV EAX,0Ch и RET. Если хотите, то можете выбрать какой-нибудь другой тип лицензии. Сохраняем изменения, запускаем.

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

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

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

Комментарии

Отзывы посетителей сайта о статье
0101 (17.01.2024 в 10:42):
Можно ещё с помощью 7z извлечь из дистрибутива x32 версию и пропатчить её, чтобы запускалась на х64 системах.

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

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

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