Русский / Russian English / Английский

Сейчас на форуме: subword (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› Vmprotect. Хитрая защита от отладки.
<< . 1 . 2 . 3 . 4 . 5 . >>
Посл.ответ Сообщение


Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 24 мая 2017 20:14 · Поправил: Vamit New!
Цитата · Личное сообщение · #1

При реверсе одной проги встретил хитрую защиту от отладки: она не позволяет работать проге под дебагером, после F9 терминация, приаттачиться к работающей то же нельзя - сразу терминация. Приложение накрыто последним Vmprotect, все функции защиты также под протектором, основные виртуализованы, остальные обфусцированы, а всего их более 200шт. Терминирует именно защита, а не вмпрот. В TLS сидят 2 каллбака защиты, первый из них есть в листинге. Дебаг работает только до первого каллбака, тут можно снять дамп проги и девиртуализовать вмпрот. А суть задачи такова: прога посылает запрос на сервер, в котором одним из куков является состояние защиты (32 бита), проэмулировать мне его не удалось и сервак не отвечает.
Прошу любые идеи как победить, или идентифицировать защиту, она явно не самописная, и прилинкована к проге из какой-то либы.
Вот листинг нескольких функций ядра защиты, вытащенных из под Vmprotect:
Code:
  1. .text:004894F0 sub_4894F0      proc near
  2. .text:004894F0                 dec     esp
  3. .text:004894F1                 mov     edx, ecx
  4. .text:004894F3                 mov     eax, 0Ah
  5. .text:004894F8                 syscall
  6. .text:004894FA                 retn
  7. .text:004894FA sub_4894F0      endp
  8.  
  9. .text:004894FB sub_4894FB      proc near
  10. .text:004894FB arg_0           = dword ptr  4
  11. .text:004894FB
  12. .text:004894FB                 push    0
  13. .text:004894FD                 push    4
  14. .text:004894FF                 push    [esp+8+arg_0]
  15. .text:00489503                 push    7
  16. .text:00489505                 push    0FFFFFFFFh
  17. .text:00489507                 mov     eax, 9Ah
  18. .text:0048950C                 push    0
  19. .text:0048950E                 call    sub_489522
  20. .text:00489513                 add     esp, 18h
  21. .text:00489516                 retn
  22. .text:00489516 sub_4894FB      endp
  23.  
  24. .text:00489517 sub_489517      proc near
  25. .text:00489517                 dec     esp
  26. .text:00489518                 mov     edx, ecx
  27. .text:0048951A                 mov     eax, 16h
  28. .text:0048951F                 syscall
  29. .text:00489521                 retn
  30. .text:00489521 sub_489517      endp
  31.  
  32. .text:00489522 sub_489522      proc near
  33. .text:00489522                 mov     edx, esp
  34. .text:00489524                 sysenter
  35. .text:00489526                 retn
  36. .text:00489526 sub_489522      endp
  37.  
  38. .text:00489527 sub_489527      proc near
  39. .text:00489527                 push    0
  40. .text:00489529                 push    0
  41. .text:0048952B                 push    11h
  42. .text:0048952D                 push    0FFFFFFFEh
  43. .text:0048952F                 push    0
  44. .text:00489531                 mov     eax, 0E5h
  45. .text:00489536                 call    sub_489522
  46. .text:0048953B                 add     esp, 14h
  47. .text:0048953E                 retn
  48. .text:0048953E sub_489527      endp
  49.  
  50. .text:0048953F sub_48953F      proc near
  51. .text:0048953F                 mov     eax, offset sub_489517
  52. .text:00489544                 cmp     dword ptr [eax], 0B8D18B4Ch
  53. .text:0048954A                 jnz     short locret_489587
  54. .text:0048954C                 add     eax, 4
  55. .text:0048954F                 cmp     dword ptr [eax], 16h
  56. .text:00489552                 jnz     short locret_489587
  57. .text:00489554                 mov     eax, offset sub_4894F0
  58. .text:00489559                 cmp     dword ptr [eax], 0B8D18B4Ch
  59. .text:0048955F                 jnz     short locret_489587
  60. .text:00489561                 add     eax, 4
  61. .text:00489564                 cmp     dword ptr [eax], 0Ah
  62. .text:00489567                 jnz     short locret_489587
  63. .text:00489569                 mov     eax, offset sub_489522
  64. .text:0048956E                 cmp     dword ptr [eax], 340FD48Bh
  65. .text:00489574                 jnz     short locret_489587
  66. .text:00489576                 mov     eax, offset sub_489595
  67. .text:0048957B                 cmp     dword ptr [eax], 99C32DCDh
  68. .text:00489581                 jnz     short locret_489587
  69. .text:00489583                 mov     ax, 0
  70. .text:00489587 locret_489587:
  71. .text:00489587                 retn
  72. .text:00489587 sub_48953F      endp
  73.  
  74. .text:00489595 sub_489595      proc near
  75. .text:00489595                 int     2Dh
  76. .text:00489597                 retn
  77. .text:00489597 sub_489595      endp
  78.  
  79. .text:0048A845 sub_48A845      proc near
  80. .text:0048A845 arg_4           = byte ptr  8
  81. .text:0048A845
  82. .text:0048A845                 cmp     dword_C45424, 0
  83. .text:0048A84C                 jnz     short loc_48A854
  84. .text:0048A84E loc_48A84E:
  85. .text:0048A84E                 mov     edx, esp
  86. .text:0048A850 loc_48A850:
  87. .text:0048A850                 sysenter
  88. .text:0048A852                 jmp     short locret_48A85A
  89. .text:0048A854 loc_48A854:
  90. .text:0048A854                 lea     edx, [esp+arg_4]
  91. .text:0048A858                 int     2Eh
  92. .text:0048A85A locret_48A85A:
  93. .text:0048A85A                 retn
  94. .text:0048A85A sub_48A845      endp
  95.  
  96. .text:0048A877 sub_48A877      proc near
  97. .text:0048A877                 mov     eax, offset loc_48A850
  98. .text:0048A87C                 cmp     word ptr [eax], 340Fh
  99. .text:0048A881                 jnz     short locret_48A89E
  100. .text:0048A883                 mov     eax, offset loc_48A854
  101. .text:0048A888                 cmp     dword ptr [eax], 824548Dh
  102. .text:0048A88E                 jnz     short locret_48A89E
  103. .text:0048A890                 add     eax, 4
  104. .text:0048A893                 cmp     word ptr [eax], 2ECDh
  105. .text:0048A898                 jnz     short locret_48A89E
  106. .text:0048A89A                 mov     ax, 0
  107. .text:0048A89E locret_48A89E:
  108. .text:0048A89E                 retn
  109. .text:0048A89E sub_48A877      endp
  110.  
  111.  
  112. .text:0062C6F0 TlsCallback_1   proc near
  113. .text:0062C6F0 Reason          = dword ptr  0Ch
  114. .text:0062C6F0
  115. .text:0062C6F0                 push    ebp
  116. .text:0062C6F1                 mov     ebp, esp
  117. .text:0062C6F3                 and     esp, 0FFFFFFF8h
  118. .text:0062C6F6                 cmp     [ebp+Reason], 1
  119. .text:0062C6FA                 push    ebx
  120. .text:0062C6FB                 push    esi
  121. .text:0062C6FC                 push    edi
  122. .text:0062C6FD                 jz      short loc_62C708
  123. .text:0062C6FF                 pop     edi
  124. .text:0062C700                 pop     esi
  125. .text:0062C701                 pop     ebx
  126. .text:0062C702                 mov     esp, ebp
  127. .text:0062C704                 pop     ebp
  128. .text:0062C705                 retn    0Ch
  129. .text:0062C708 loc_62C708:
  130. .text:0062C708                 push    offset TlsCallback_2
  131. .text:0062C70D                 call    ?????                  ;packet call
  132. .text:0062C712                 add     esp, 4
  133. .text:0062C715                 test    eax, eax
  134. .text:0062C717                 jnz     short loc_62C71E
  135. .text:0062C719                 call    ?????                  ;packet call
  136. .text:0062C71E loc_62C71E:
  137. .text:0062C71E                 push    ebx
  138. .text:0062C71F                 xor     eax, eax
  139. .text:0062C721                 lea     edi, [ebp+4]
  140. .text:0062C724                 cdq
  141. .text:0062C725                 add     edi, 8
  142. .text:0062C728                 mov     ecx, 100h
  143. .text:0062C72D                 rep stosd
  144. .text:0062C72F                 mov     edi, dword_C93D70
  145. .text:0062C735                 mov     ecx, edi
  146. .text:0062C737                 mov     ebx, dword_C93D74
  147. .text:0062C73D                 mov     esi, dword_C93D78
  148. .text:0062C743                 mov     edx, dword_C93D7C
  149. .text:0062C749                 mov     dword_C93D74, edx
  150. .text:0062C74F                 mov     eax, ebx
  151. .text:0062C751                 shld    eax, ecx, 17h
  152. .text:0062C755                 shl     ecx, 17h
  153. .text:0062C758                 xor     edi, ecx
  154. .text:0062C75A                 xor     ebx, eax
  155. .text:0062C75C                 mov     dword_C93D70, esi
  156. .text:0062C762                 mov     eax, esi
  157. .text:0062C764                 mov     ecx, edx
  158. .text:0062C766                 shrd    eax, ecx, 9
  159. .text:0062C76A                 shr     ecx, 9
  160. .text:0062C76D                 xor     ecx, ebx
  161. .text:0062C76F                 xor     eax, edi
  162. .text:0062C771                 shrd    eax, ecx, 11h
  163. .text:0062C775                 shr     ecx, 11h
  164. .text:0062C778                 xor     eax, esi
  165. .text:0062C77A                 push    0
  166. .text:0062C77C                 xor     eax, edi
  167. .text:0062C77E                 xor     ecx, edx
  168. .text:0062C780                 xor     ecx, ebx
  169. .text:0062C782                 sub     edx, edx
  170. .text:0062C784                 mov     dword_C93D78, eax
  171. .text:0062C789                 mov     dword_C93D7C, ecx
  172. .text:0062C78F                 add     eax, esi
  173. .text:0062C791                 mov     ecx, 0FFFh
  174. .text:0062C796                 div     ecx
  175. .text:0062C798                 mov     dword ptr [edx+1], 18BBB819h
  176. .text:0062C79F                 mov     ecx, offset unk_C93CB0
  177. .text:0062C7A4                 call    ?????                  ;packet call (constructor)
  178. .text:0062C7A9                 pop     edi
  179. .text:0062C7AA                 pop     esi
  180. .text:0062C7AB                 pop     ebx
  181. .text:0062C7AC                 mov     esp, ebp
  182. .text:0062C7AE                 pop     ebp
  183. .text:0062C7AF                 retn    0Ch
  184. .text:0062C7AF TlsCallback_1   endp





Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 26 мая 2017 22:04 · Поправил: Vamit New!
Цитата · Личное сообщение · #2

Девиртуализовал функу, которая во 2ом ТЛС прогу терминирует, но чтоб понять почему, ещё нужно кучу кода перелопатить.
Пролог с эпилогом у неё какие-то странные.
Code:
  1. .text:006296C0 sub_6296C0      proc near                                             ; CODE XREF: TlsCallback_2+B4p
  2. .text:006296C0 var_80          = qword ptr -80h
  3. .text:006296C0 var_78          = qword ptr -78h
  4. .text:006296C0 var_70          = qword ptr -70h
  5. .text:006296C0 var_68          = dword ptr -68h
  6. .text:006296C0 var_64          = dword ptr -64h
  7. .text:006296C0 var_60          = dword ptr -60h
  8. .text:006296C0 var_5C          = dword ptr -5Ch
  9. .text:006296C0 var_50          = dword ptr -50h
  10. .text:006296C0 var_4C          = dword ptr -4Ch
  11. .text:006296C0 var_40          = qword ptr -40h
  12. .text:006296C0 var_38          = qword ptr -38h
  13. .text:006296C0 var_2C          = dword ptr -2Ch
  14. .text:006296C0 var_28          = dword ptr -28h
  15. .text:006296C0 var_24          = dword ptr -24h
  16. .text:006296C0 var_20          = dword ptr -20h
  17. .text:006296C0 var_1C          = dword ptr -1Ch
  18. .text:006296C0 var_18          = dword ptr -18h
  19. .text:006296C0 var_14          = dword ptr -14h
  20. .text:006296C0 var_10          = dword ptr -10h
  21. .text:006296C0 var_C           = dword ptr -0Ch
  22. .text:006296C0 this            = dword ptr -8
  23. .text:006296C0 var_2           = byte ptr -2
  24. .text:006296C0 var_1           = byte ptr -1
  25. .text:006296C0
  26. .text:006296C0                 push    ebx
  27. .text:006296C1                 mov     ebx, esp
  28. .text:006296C3                 sub     esp, 8
  29. .text:006296C6                 and     esp, 0FFFFFFF0h
  30. .text:006296C9                 add     esp, 4
  31. .text:006296CC                 push    ebp
  32. .text:006296CD                 mov     ebp, [ebx+4]
  33. .text:006296D0                 mov     [esp+4], ebp
  34. .text:006296D4                 mov     ebp, esp
  35. .text:006296D6                 sub     esp, 80h
  36. .text:006296DC                 mov     [ebp+this], ecx
  37. .text:006296DF                 mov     eax, [ebp+this]
  38. .text:006296E2                 add     eax, 718h
  39. .text:006296E7                 mov     [ebp+var_10], eax
  40. .text:006296EA                 xorps   xmm0, xmm0
  41. .text:006296ED                 movlpd  [ebp+var_70], xmm0
  42. .text:006296F2                 mov     ecx, [ebp+var_10]
  43. .text:006296F5                 add     ecx, 8
  44. .text:006296F8                 lea     edx, [ebp+var_70]
  45. .text:006296FB                 push    ecx
  46. .text:006296FC                 mov     ecx, [ebp+var_10]
  47. .text:006296FF                 call    sub_40B2E0
  48. .text:00629704                 add     esp, 4
  49. .text:00629707                 movzx   edx, byte ptr [ebp+var_70]
  50. .text:0062970B                 test    edx, edx
  51. .text:0062970D                 jz      short loc_629715
  52. .text:0062970F                 mov     [ebp+var_1], 1
  53. .text:00629713                 jmp     short loc_629719
  54. .text:00629715 loc_629715:
  55. .text:00629715                 mov     [ebp+var_1], 0
  56. .text:00629719 loc_629719:
  57. .text:00629719                 movzx   eax, [ebp+var_1]
  58. .text:0062971D                 test    eax, eax
  59. .text:0062971F                 jz      short loc_62972A
  60. .text:00629721                 mov     [ebp+var_14], 1
  61. .text:00629728                 jmp     short loc_629731
  62. .text:0062972A loc_62972A:
  63. .text:0062972A                 mov     [ebp+var_14], 0
  64. .text:00629731 loc_629731:
  65. .text:00629731                 movzx   ecx, byte ptr [ebp+var_14]
  66. .text:00629735                 test    ecx, ecx
  67. .text:00629737                 jz      short loc_629745
  68. .text:00629739                 mov     edx, [ebx+8]
  69. .text:0062973C                 push    edx                                           ; uExitCode
  70. .text:0062973D                 call    ds:ExitProcess
  71. .text:00629743 loc_629743:
  72. .text:00629743                 jmp     short loc_629743
  73. .text:00629745 loc_629745:
  74. .text:00629745                 mov     [ebp+var_C], 0C0000001h
  75. .text:0062974C                 mov     ecx, [ebp+this]
  76. .text:0062974F                 call    sub_629BC0
  77. .text:00629754                 mov     eax, [ebp+this]
  78. .text:00629757                 add     eax, 6A0h
  79. .text:0062975C                 mov     [ebp+var_18], eax
  80. .text:0062975F                 xorps   xmm0, xmm0
  81. .text:00629762                 movlpd  [ebp+var_78], xmm0
  82. .text:00629767                 mov     ecx, [ebp+var_18]
  83. .text:0062976A                 add     ecx, 8
  84. .text:0062976D                 lea     edx, [ebp+var_78]
  85. .text:00629770                 push    ecx
  86. .text:00629771                 mov     ecx, [ebp+var_18]
  87. .text:00629774                 call    sub_40B2E0
  88. .text:00629779                 add     esp, 4
  89. .text:0062977C                 movzx   edx, byte ptr [ebp+var_78]
  90. .text:00629780                 test    edx, edx
  91. .text:00629782                 jz      short loc_62978A
  92. .text:00629784                 mov     [ebp+var_2], 1
  93. .text:00629788                 jmp     short loc_62978E
  94. .text:0062978A loc_62978A:
  95. .text:0062978A                 mov     [ebp+var_2], 0
  96. .text:0062978E loc_62978E:
  97. .text:0062978E                 movzx   eax, [ebp+var_2]
  98. .text:00629792                 test    eax, eax
  99. .text:00629794                 jz      short loc_62979F
  100. .text:00629796                 mov     [ebp+var_1C], 1
  101. .text:0062979D                 jmp     short loc_6297A6
  102. .text:0062979F loc_62979F:
  103. .text:0062979F                 mov     [ebp+var_1C], 0
  104. .text:006297A6 loc_6297A6:
  105. .text:006297A6                 movzx   ecx, byte ptr [ebp+var_1C]
  106. .text:006297AA                 test    ecx, ecx
  107. .text:006297AC                 jnz     short loc_6297F2
  108. .text:006297AE                 mov     edx, [ebp+this]
  109. .text:006297B1                 add     edx, 48h
  110. .text:006297B4                 mov     [ebp+var_20], edx
  111. .text:006297B7                 xorps   xmm0, xmm0
  112. .text:006297BA                 movlpd  [ebp+var_80], xmm0
  113. .text:006297BF                 mov     eax, [ebp+var_20]
  114. .text:006297C2                 add     eax, 8
  115. .text:006297C5                 lea     edx, [ebp+var_80]
  116. .text:006297C8                 push    eax
  117. .text:006297C9                 mov     ecx, [ebp+var_20]
  118. .text:006297CC                 call    sub_40A9A0
  119. .text:006297D1                 add     esp, 4
  120. .text:006297D4                 mov     ecx, dword ptr [ebp+var_80]
  121. .text:006297D7                 mov     [ebp+var_2C], ecx
  122. .text:006297DA                 mov     edx, [ebx+8]
  123. .text:006297DD                 push    edx
  124. .text:006297DE                 mov     eax, [ebp+var_2C]
  125. .text:006297E1                 push    eax
  126. .text:006297E2                 call    sub_48A16A
  127. .text:006297E7                 add     esp, 8
  128. .text:006297EA                 mov     [ebp+var_C], eax
  129. .text:006297ED                 jmp     loc_62988B
  130. .text:006297F2 loc_6297F2:
  131. .text:006297F2                 xor     edx, edx
  132. .text:006297F4                 mov     ecx, [ebx+8]
  133. .text:006297F7                 mov     [ebp+var_50], ecx
  134. .text:006297FA                 mov     [ebp+var_4C], edx
  135. .text:006297FD                 mov     eax, [ebp+this]
  136. .text:00629800                 add     eax, 418h
  137. .text:00629805                 mov     [ebp+var_24], eax
  138. .text:00629808                 xorps   xmm0, xmm0
  139. .text:0062980B                 movlpd  [ebp+var_38], xmm0
  140. .text:00629810                 mov     ecx, [ebp+var_24]
  141. .text:00629813                 add     ecx, 8
  142. .text:00629816                 lea     edx, [ebp+var_38]
  143. .text:00629819                 push    ecx
  144. .text:0062981A                 mov     ecx, [ebp+var_24]
  145. .text:0062981D                 call    sub_40AC90
  146. .text:00629822                 add     esp, 4
  147. .text:00629825                 mov     edx, dword ptr [ebp+var_38]
  148. .text:00629828                 mov     [ebp+var_60], edx
  149. .text:0062982B                 mov     eax, dword ptr [ebp+var_38+4]
  150. .text:0062982E                 mov     [ebp+var_5C], eax
  151. .text:00629831                 mov     ecx, [ebp+this]
  152. .text:00629834                 add     ecx, 598h
  153. .text:0062983A                 mov     [ebp+var_28], ecx
  154. .text:0062983D                 xorps   xmm0, xmm0
  155. .text:00629840                 movlpd  [ebp+var_40], xmm0
  156. .text:00629845                 mov     ecx, [ebp+var_28]
  157. .text:00629848                 add     ecx, 8
  158. .text:0062984B                 push    ecx
  159. .text:0062984C                 mov     ecx, [ebp+var_28]
  160. .text:0062984F                 lea     edx, [ebp+var_40]
  161. .text:00629852                 call    sub_40AC90
  162. .text:00629857                 add     esp, 4
  163. .text:0062985A                 mov     edx, dword ptr [ebp+var_40]
  164. .text:0062985D                 mov     [ebp+var_68], edx
  165. .text:00629860                 mov     edx, dword ptr [ebp+var_40+4]
  166. .text:00629863                 mov     [ebp+var_64], edx
  167. .text:00629866                 mov     edx, [ebp+var_4C]
  168. .text:00629869                 push    edx
  169. .text:0062986A                 mov     edx, [ebp+var_50]
  170. .text:0062986D                 push    edx
  171. .text:0062986E                 mov     edx, [ebp+var_5C]
  172. .text:00629871                 push    edx
  173. .text:00629872                 mov     edx, [ebp+var_60]
  174. .text:00629875                 push    edx
  175. .text:00629876                 push    2
  176. .text:00629878                 mov     eax, [ebp+var_64]
  177. .text:0062987B                 push    eax
  178. .text:0062987C                 mov     ecx, [ebp+var_68]
  179. .text:0062987F                 push    ecx
  180. .text:00629880                 call    near ptr sub_6299C0
  181. .text:00629885                 add     esp, 1Ch
  182. .text:00629888                 mov     [ebp+var_C], eax
  183. .text:0062988B loc_62988B:
  184. .text:0062988B                 cmp     [ebp+var_C], 0
  185. .text:0062988F                 jge     short loc_62989B
  186. .text:00629891                 mov     edx, [ebx+8]
  187. .text:00629894                 push    edx                                           ; uExitCode
  188. .text:00629895                 call    ds:ExitProcess
  189. .text:0062989B loc_62989B:
  190. .text:0062989B                 mov     esp, ebp
  191. .text:0062989D                 pop     ebp
  192. .text:0062989E                 mov     esp, ebx
  193. .text:006298A0                 pop     ebx
  194. .text:006298A1                 retn    4
  195. .text:006298A1 sub_6296C0      endp

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



Ранг: 563.2 (!)
Статус: Участник
оптимист

Создано: 27 мая 2017 01:39 New!
Цитата · Личное сообщение · #3

hash87szf пишет:
поэтому циклы так и юзает

Что за прога показывающая дерево с временем загрузки проца?)



Ранг: 170.5 (ветеран)
Статус: Участник

Создано: 27 мая 2017 02:13 New!
Цитата · Личное сообщение · #4

Так в посте написано, это Process Monitor (Stack Summary)




Ранг: 331.5 (мудрец)
Статус: Участник

Создано: 27 мая 2017 02:51 New!
Цитата · Личное сообщение · #5

ClockMan

Что за дерево и циклы ?




Ранг: 310.0 (мудрец)
Статус: Участник
Advisor

Создано: 27 мая 2017 10:23 · Поправил: Bronco New!
Цитата · Личное сообщение · #6

Vamit пишет:
Девиртуализовал функу,

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

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


Ранг: 64.9 (постоянный)
Статус: Участник

Создано: 27 мая 2017 12:38 New!
Цитата · Личное сообщение · #7

Я думал что защита треды как то синхронизирует и этим способом ловит HW бряки. Суспендил все треды кроме главного. Прога робит дальше. Бряк на АПИ и падает. Внутри главного значит зло.

Инжектил длл от Detours что хукает Sleep... Прога робит дальше... xD

Может это просто говнокод а не защита?

Но CreateProcess вроде ловиться патчем ntdll




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 27 мая 2017 14:15 · Поправил: Vamit New!
Цитата · Личное сообщение · #8

Bronco пишет:
и это....пора забывать о хрюше, вин10 уже не первый год, и базовые инструменты, под неё есть

Я был бы рад, да не всё так гладко, попытка использовать Ольку 2 со Свипером на вин10 закончилась неудачно.
А на другие дебагеры SDK нормальных нет, чтоб и х32 и х64 поддерживали с асмом и дизасмом. Так что пользуем то, что хоть как-то работает...
Можно конечно Иду бы попробовать, SDK у неё приличный, но я её использую ток как дизассемблер, не знаю справится ли её дебаг с вмпротовскими наворотами.

hash87szf пишет:
Может это просто говнокод а не защита?

А чем в данном случае отличается одно от другого? Назначение у этого кода одно - запретить дебаг.




Ранг: 310.0 (мудрец)
Статус: Участник
Advisor

Создано: 27 мая 2017 17:23 · Поправил: Bronco New!
Цитата · Личное сообщение · #9

hash87szf пишет:
робит

спалился...
Vamit пишет:
А на другие дебагеры SDK нормальных нет, чтоб и х32 и х64 поддерживали с асмом и дизасмом.

хм...не согласен, ситуация ровно такая же как и 7 лет назад, не беря в расчёт открытых текущих проектов, и возможности дебага в самой вижен студии, в последней двиг дизасма_асма с довольно внушительным функционалом. Нет желания начинать с начала под новый сдк, это понятный аргумент.
Декомпильнутый служебный код, паблить дальше собираетесь?




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 27 мая 2017 17:37 New!
Цитата · Личное сообщение · #10

Bronco пишет:
Нет желания начинать с начала под новый сдк

Да не проблема, Свипер напрямую с SDK не работает у него всё своё, а на любую SDК я пишу ток враппер, тут особо парится не надо, и сломать что-либо сделанное сложно, главное чтоб сдк выдавал нужный функционал.
Давай предложения, я их рассмотрю, но попозже, надо сначала с этой дрянью разобраться.

Декомпильнутый служебный код, паблить дальше собираетесь?
Собираюсь, ток кусками не интересно, хочу код второй тлс полностью восстановить...

Если интересно, то вот ещё, ток непонятно что за алгоритм, я пока в коде не разбираюсь, ток функи последовательно достаю.
Code:
  1. .text:0040B2E0 sub_40B2E0      proc near
  2. .text:0040B2E0
  3. .text:0040B2E0 var_5C          = dword ptr -5Ch
  4. .text:0040B2E0 var_58          = byte ptr -58h
  5. .text:0040B2E0 var_1C          = dword ptr -1Ch
  6. .text:0040B2E0 var_18          = dword ptr -18h
  7. .text:0040B2E0 var_14          = dword ptr -14h
  8. .text:0040B2E0 var_10          = dword ptr -10h
  9. .text:0040B2E0 var_C           = dword ptr -0Ch
  10. .text:0040B2E0 var_8           = dword ptr -8
  11. .text:0040B2E0 var_4           = dword ptr -4
  12. .text:0040B2E0 arg_0           = dword ptr  8
  13. .text:0040B2E0
  14. .text:0040B2E0                 push    ebp
  15. .text:0040B2E1                 mov     ebp, esp
  16. .text:0040B2E3                 sub     esp, 5Ch
  17. .text:0040B2E6                 push    ebx
  18. .text:0040B2E7                 push    esi
  19. .text:0040B2E8                 push    edi
  20. .text:0040B2E9                 push    offset unk_B41D34
  21. .text:0040B2EE                 mov     [ebp+var_C], edx
  22. .text:0040B2F1                 mov     esi, ecx
  23. .text:0040B2F3                 nop
  24. .text:0040B2F4                 nop
  25. .text:0040B2F5                 lea     esp, [esp+4]
  26. .text:0040B2F9                 mov     ebx, [esi]
  27. .text:0040B2FB                 mov     eax, [esi+4]
  28. .text:0040B2FE                 mov     esi, [ebp+arg_0]
  29. .text:0040B301                 mov     [ebp+var_4], eax
  30. .text:0040B304                 mov     [ebp+var_8], ebx
  31. .text:0040B307                 mov     ebx, -2
  32. .text:0040B30C                 mov     edi, [esi]
  33. .text:0040B30E                 mov     eax, [esi+4]
  34. .text:0040B311                 mov     ecx, [esi+8]
  35. .text:0040B314                 mov     edx, [esi+0Ch]
  36. .text:0040B317                 lea     esi, [ebp+var_58]
  37. .text:0040B31A                 mov     [ebp+var_1C], edi
  38. .text:0040B31D                 mov     [ebp+var_18], eax
  39. .text:0040B320                 mov     [ebp+var_14], ecx
  40. .text:0040B323                 mov     [ebp+var_10], edx
  41. .text:0040B326                 mov     [ebp+arg_0], esi
  42. .text:0040B329 loc_40B329:
  43. .text:0040B329                 lea     esi, [ecx+edx]
  44. .text:0040B32C                 mov     edx, edi
  45. .text:0040B32E                 shl     edx, cl
  46. .text:0040B330                 lea     ecx, [ebx-2]
  47. .text:0040B333                 xor     edx, esi
  48. .text:0040B335                 and     ecx, 3
  49. .text:0040B338                 lea     edx, [eax+edx]
  50. .text:0040B33B                 mov     eax, [ebp+arg_0]
  51. .text:0040B33E                 add     edx, edi
  52. .text:0040B340                 mov     [ebp+ecx*4+var_1C], edx
  53. .text:0040B344                 mov     ecx, [ebp+var_14]
  54. .text:0040B347                 mov     edi, [ebp+var_10]
  55. .text:0040B34A                 mov     [eax-4], edx
  56. .text:0040B34D                 lea     edi, [ecx+edi]
  57. .text:0040B350                 mov     edx, [ebp+var_1C]
  58. .text:0040B353                 shl     edx, cl
  59. .text:0040B355                 lea     ecx, [ebx-1]
  60. .text:0040B358                 xor     edx, edi
  61. .text:0040B35A                 and     ecx, 3
  62. .text:0040B35D                 add     edx, [ebp+var_18]
  63. .text:0040B360                 add     edx, [ebp+var_1C]
  64. .text:0040B363                 mov     [eax], edx
  65. .text:0040B365                 mov     [ebp+ecx*4+var_1C], edx
  66. .text:0040B369                 mov     ecx, [ebp+var_14]
  67. .text:0040B36C                 mov     edi, [ebp+var_10]
  68. .text:0040B36F                 mov     edx, [ebp+var_1C]
  69. .text:0040B372                 lea     edi, [ecx+edi]
  70. .text:0040B375                 shl     edx, cl
  71. .text:0040B377                 mov     ecx, ebx
  72. .text:0040B379                 and     ecx, 3
  73. .text:0040B37C                 add     edx, [ebp+var_18]
  74. .text:0040B37F                 add     edx, [ebp+var_1C]
  75. .text:0040B382                 mov     [eax+4], edx
  76. .text:0040B385                 mov     [ebp+ecx*4+var_1C], edx
  77. .text:0040B389                 mov     ecx, [ebp+var_14]
  78. .text:0040B38C                 mov     edi, [ebp+var_10]
  79. .text:0040B38F                 mov     edx, [ebp+var_1C]
  80. .text:0040B392                 lea     edi, [ecx+edi]
  81. .text:0040B395                 shl     edx, cl
  82. .text:0040B397                 lea     ecx, [ebx+1]
  83. .text:0040B39A                 xor     edx, edi
  84. .text:0040B39C                 and     ecx, 3
  85. .text:0040B39F                 add     edx, [ebp+var_18]
  86. .text:0040B3A2                 add     ebx, 4
  87. .text:0040B3A5                 add     edx, [ebp+var_1C]
  88. .text:0040B3A8                 mov     [eax+8], edx
  89. .text:0040B3AB                 lea     eax, [eax+10h]
  90. .text:0040B3AE                 mov     [ebp+ecx*4+var_1C], edx
  91. .text:0040B3B2                 lea     ecx, [ebx+2]
  92. .text:0040B3B5                 mov     [ebp+arg_0], eax
  93. .text:0040B3B8                 cmp     ecx, 10h
  94. .text:0040B3BB                 jnb     short loc_40B3CE
  95. .text:0040B3BD                 mov     edx, [ebp+var_10]
  96. .text:0040B3C0                 mov     ecx, [ebp+var_14]
  97. .text:0040B3C3                 mov     eax, [ebp+var_18]
  98. .text:0040B3C6                 mov     edi, [ebp+var_1C]
  99. .text:0040B3C9                 jmp     loc_40B329
  100. .text:0040B3CE loc_40B3CE:
  101. .text:0040B3CE                 mov     eax, [ebp+var_4]
  102. .text:0040B3D1                 mov     ecx, 0Fh
  103. .text:0040B3D6                 mov     ebx, [ebp+var_8]
  104. .text:0040B3D9                 mov     [ebp+arg_0], ecx
  105. .text:0040B3DC loc_40B3DC:
  106. .text:0040B3DC                 mov     edi, [ebp+ecx*4+var_5C]
  107. .text:0040B3E0                 mov     edx, edi
  108. .text:0040B3E2                 sub     edx, ebx
  109. .text:0040B3E4                 lea     esi, [ebx+edi]
  110. .text:0040B3E7                 mov     ecx, esi
  111. .text:0040B3E9                 shr     esi, 0Eh
  112. .text:0040B3EC                 shl     ecx, 9
  113. .text:0040B3EF                 xor     edx, ecx
  114. .text:0040B3F1                 xor     edx, esi
  115. .text:0040B3F3                 sub     eax, edx
  116. .text:0040B3F5                 lea     edx, [eax+edi]
  117. .text:0040B3F8                 sub     edi, eax
  118. .text:0040B3FA                 mov     ecx, edx
  119. .text:0040B3FC                 shr     edx, 0Eh
  120. .text:0040B3FF                 shl     ecx, 9
  121. .text:0040B402                 xor     edi, ecx
  122. .text:0040B404                 mov     ecx, [ebp+arg_0]
  123. .text:0040B407                 xor     edi, edx
  124. .text:0040B409                 dec     ecx
  125. .text:0040B40A                 sub     ebx, edi
  126. .text:0040B40C                 mov     [ebp+arg_0], ecx
  127. .text:0040B40F                 cmp     ecx, 0FFFFFFFFh
  128. .text:0040B412                 jnz     short loc_40B3DC
  129. .text:0040B414                 mov     ecx, [ebp+var_C]
  130. .text:0040B417                 mov     [ecx], ebx
  131. .text:0040B419                 mov     [ecx+4], eax
  132. .text:0040B41C                 nop
  133. .text:0040B41D                 nop
  134. .text:0040B41E                 nop
  135. .text:0040B41F                 nop
  136. .text:0040B420                 nop
  137. .text:0040B421                 nop
  138. .text:0040B422                 nop
  139. .text:0040B423                 nop
  140. .text:0040B424                 nop
  141. .text:0040B425                 nop
  142. .text:0040B426                 nop
  143. .text:0040B427                 pop     edi
  144. .text:0040B428                 pop     esi
  145. .text:0040B429                 pop     ebx
  146. .text:0040B42A                 mov     esp, ebp
  147. .text:0040B42C                 pop     ebp
  148. .text:0040B42D                 retn
  149. .text:0040B42D sub_40B2E0      endp

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



Ранг: 310.0 (мудрец)
Статус: Участник
Advisor

Создано: 27 мая 2017 20:18 New!
Цитата · Личное сообщение · #11

Vamit пишет:
надо сначала с этой дрянью разобраться.

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




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 27 мая 2017 20:54 New!
Цитата · Личное сообщение · #12

Bronco пишет:
у нас разная среда, моя Вам не подходит, из-за зависимостей свипера

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

Теперь насчет кода, в принципе тлс 2 весь достал, кроме одной пакетной функи (не могу найти её код), но она условная, может понадобится, а может и нет.
Но теперь возник вопрос, а как его изучить? По асм листингам не айс, местами уж сильно закручено, в экзешник вставить вместо виртуализованных фунок его не позволит вмпрот, а хотелось именно дебагером по нему пройтись. Может кто что-то посоветовать?



Ранг: 64.9 (постоянный)
Статус: Участник

Создано: 28 мая 2017 16:52 New!
Цитата · Личное сообщение · #13

Чуть дальше поигрался.
Аттачусь.
В x32dbg стоят галки на бряки:
"attach breakpoint"
"thread start"
"thread end"
"thread entry"
Жму F9 пока он своих 23 треадов не заполнит.
Где то там бреак на "thread created ntdll.DbgUiRemoteBreakin"
F9
Int 3 BP at DbgUiRemoteBreakin, этого "attach breakpoint" наверно бы хватило и 20 раз F9 жать не надо.
F9
thread exit bp
F9
thread created, и выпрыгивает ui metatradera
F9 и идёт в werfault.exe

поэтому не жму F9, ставлю mem bp on exec на .cod1, .cod0, .text и voila! стоп в .cod1, ещё F9 и стоп в .text. Потом обратно .cod1 помоему, но тут прота мусора стока, надо трэсить... Бряки на его SEH хэндлеры, VirtualAlloc итд...

От первого BP на cod1 идея такова: mem/hw bp on access на user32.Sleep и смотреть кто там лазит.




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 30 мая 2017 09:31 New!
Цитата · Личное сообщение · #14

Нашел односеансное решение по отладке восстановленного кода. Запускаем оригинальную прогу, стопаемся на нужной виртуализованной функе, заменяем в ольке её код на восстановленный и дебажим. Но нужно следить, чтобы в процессе исполнения кода не выполнялись другие виртуализованные функи, т.е. их код тоже должен быть заменен на восстановленный. Если же таким образом заменить все функи, то вмпрот можно просто срезать создав рабочий дамп.
Используя виртуалку так можно дебажить и несколько дней, но при перезапуске проги приходится весь код втыкать заново.
Пару фунок защиты таким образом прошагал...




Ранг: 324.3 (мудрец)
Статус: Участник

Создано: 30 мая 2017 15:29 New!
Цитата · Личное сообщение · #15

Vamit пишет:
Если же таким образом заменить все функи, то вмпрот можно просто срезать создав рабочий дамп.

Да, с импортом останется только разобраться )




Ранг: 328.7 (мудрец)
Статус: Участник

Создано: 30 мая 2017 15:53 New!
Цитата · Личное сообщение · #16

Vamit пишет:
Если же таким образом заменить все функи

ежели б во рту росли грибы...




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 30 мая 2017 16:32 New!
Цитата · Личное сообщение · #17

DenCoder пишет:
Да, с импортом останется только разобраться

А чего с ним разбираться, ИАТ с вызовами свипер восстановит, а таблицу импорта Сцилла к дампу прилепит, при создании дампа отрезать вмпротовские секции и усё))

r99 пишет:
ежели б во рту росли грибы...

А что, задача на некоторых прогах вполне решаема.

Восстановил одну интересную функу (во вложении) и огромную (около 1500 инструкций), до неё дебаг в проге работает нормально, а потом слетает, похоже она создает и проверяет хеши 32 системных фунок, но точно в этом не уверен, т.к. из неё вызывается ещё куча других виртуализованных фунок.

{ Атач доступен только для участников форума } - 627780_ida.lst



Ранг: 64.9 (постоянный)
Статус: Участник

Создано: 30 мая 2017 18:50 New!
Цитата · Личное сообщение · #18

Дров то всё равно придётся ставить. Если прога syscall делаe напрямую, а не через апишки, и ответы обрабатывает.
Не трэйсить ведь это дело.

А попробовал в x32dbg sysenter/syscall поймать, приатачился, бряк на .cod1 срабатывает,
я делаю 'trace into',
break condition: dis.iscall(cip) || dis.isunusual(cip)
isunusual() is syscall/sysenter, тоесь если инстракшн на eip == sysenter/call, брэйк.
И нифига нет их...

Зато
срабатывает бряк на LdrInitializeThunk, появляется второй тред и падает эта софтина. Это от VMprota?




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 30 мая 2017 19:08 New!
Цитата · Личное сообщение · #19

hash87szf пишет:
Это от VMprota?

Нет, вмпрот нормально глушится ScillaHide или что там у тебя стоит, у меня вмпрот молчит, словно его и нет, это всё защита гадит.




Ранг: 331.5 (мудрец)
Статус: Участник

Создано: 30 мая 2017 19:29 New!
Цитата · Личное сообщение · #20

Vamit

Сцилла это унылое говно, поделка писанная школьником. Зачем её упоминать в каждом посте, не робит оно на вмпроте.




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 30 мая 2017 20:01 New!
Цитата · Личное сообщение · #21

difexacaw пишет:
Сцилла это унылое говно, поделка писанная школьником

Если не знаешь, то помолчал бы, Сцилки есть разные и для разных целей, вот эта --> Link <-- для защиты от антиотладки для многих дебагеров, прекрасно справляется с вмпротом на любой винде, проверено. А чуть ранее я говорил совсем про другую сцилку - восстановитель импорта.



Ранг: 35.4 (посетитель)
Статус: Участник

Создано: 30 мая 2017 21:33 New!
Цитата · Личное сообщение · #22

Палит память ntdll на предмет изменений некоторых функций, сравнивая с оригиналом библиотеки с диска. Этим страдает сцилла и\или другие плагины которые коверкают ntdll в целях скрытия. Лечится через HW бряк на побайтовом сравнении функций ntdll и возвратом значения что функции целы. Стронг же к слову этого не боится в кернел режиме. Вмварь палит через наличие файла vmmouse.sys и т.п. примитивные приемы.




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 30 мая 2017 22:10 New!
Цитата · Личное сообщение · #23

neprovad пишет:
Палит память ntdll на предмет изменений некоторых функций, сравнивая с оригиналом библиотеки с диска.

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



Ранг: 35.4 (посетитель)
Статус: Участник

Создано: 30 мая 2017 23:03 New!
Цитата · Личное сообщение · #24

Речь шла про внутренности данного поделия, вмпрот сам по себе "ни о чем" в антиотладке и не при делах. Для запуска хватает xpsp3 + odbg1 + strong.

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


Ранг: 64.9 (постоянный)
Статус: Участник

Создано: 30 мая 2017 23:42 · Поправил: hash87szf New!
Цитата · Личное сообщение · #25

> Вмварь палит
А у меня ничё он на Варь 12 не жалуется.
Но собсстна поддерживаю. На vmware12 xpsp3 odbg1 strongod робит, но падает на бряках.

Добавлено спустя 25 минут
Code:
  1. 012F9B23 | 6A 33               | push 33                                                               |
  2. 012F9B25 | E8 00 00 00 00      | call terminal_1545.12F9B2A                                            | call $0
  3. 012F9B2A | 83 04 24 05         | add dword ptr ss:[esp], 5                                             |
  4. 012F9B2E | CB                  | retf                                                                  |


А вот под WOW64 у него такая хитрая хиута есь...



Ранг: 35.4 (посетитель)
Статус: Участник

Создано: 31 мая 2017 01:29 New!
Цитата · Личное сообщение · #26

На бряках падает не сразу, видимо недостаточно корректная обработка исключений в стронге (skip some...)
либо защита чудит. Возможно поток стартует и начинает мутить воду. Еще видел RtlRaiseException помимо всего прочего, вызов которого в каком-то случае может ветвление кода обойти стороной, заюзав какое-то поле в некой структуре. Свипера у меня нет, что это за структура я не знаю.




Ранг: 331.5 (мудрец)
Статус: Участник

Создано: 31 мая 2017 04:01 · Поправил: difexacaw New!
Цитата · Личное сообщение · #27

hash87szf

> Если прога syscall делаe напрямую, а не через апишки, и ответы обрабатывает.

Если вызывается sysenter, то можно это просто отследить по возврату из сервиса(он на фикс адрес происходит), не нужен драйвер. Может быть вызов int2e, он не отключается штатными средствами. Но это может не помочь, если вызывается что то типо NtRemovePsDebug.
Если вызывается из wow, то можно поставить обработчик на вызов сервиса, заменив системный указатель в TEB, наверно самый хороший способ, так как вызвать сервис через int/senter нельзя. Хотя защита может скопировать себе шлюз, который переключает мод. В коде видно что и syscall юзается, так что это может не сработать.
Теоретически можно попробовать мониторить сервисы через ETW, но там нужно кучу матчасти изучать.

Vamit

> прекрасно справляется с вмпротом

В шапке топика вы говорили иначе. По какой причине оно не работает - прот или же есчо какая защита, не суть важно.




Ранг: 331.1 (мудрец)
Статус: Участник

Создано: 31 мая 2017 09:09 New!
Цитата · Личное сообщение · #28

difexacaw пишет:
В шапке топика вы говорили иначе. По какой причине оно не работает - прот или же есчо какая защита, не суть важно.

Давайте, мухи отдельно - котлеты отдельно, тема про дополнительную защиту на проге, а не про вмпрот. К вмпроту вопросов нет, под ним все дебажится нормально, сложность только в том, что все функи защиты виртуализаны, большинство самым суровым образом, но все они доставаемы, нужно только время.
В шапке говорилось про защиту, а потом чего-то съехали на вмпрот. Защита от виртуалки в этой проге в вмпроте не включена.




Ранг: 331.5 (мудрец)
Статус: Участник

Создано: 31 мая 2017 17:54 · Поправил: difexacaw New!
Цитата · Личное сообщение · #29

Vamit

Не понимаю что вам нужно. Системные решения не совместимы с отладчиком. Давайте тогда подробно рассмотрим данный вопрос.

Имеется защита, которая проверяет целостность образов. Тоесть необходимо решение, которое позволит работать интерфейсу отладчика и при этом выполнит подмену данных. Я не вижу решения, кроме как фиксить сам отладчик.
Можно поступить так. Заблокировать регион для исполнения(NX, иначе никак - нельзя загрузить селектор не исполняемого сегмента и не читаемого, либо исполняем и опционально читаем, либо читаем и опционально пишем, иначе #GP), он будет доступен для чтения и записи. Как только управление будет передано на образ сработает ловушка. Тогда мы передадим управление по соответствующему смещению на копию образа, которая сформирована не через загрузку, а просто копированием всего региона в буфер. В эту копию будем ставить точки останова, но как я выше сказал это не совместимо с интерфейсом олли, она не будет видеть модуль. Если попытаться загрузить копию модуля, то ссылки в нём будут в оригинальный и олли глюкнет.

По нормальному это запускается под визором и никаких ваших проблем нет.



Ранг: 44.8 (посетитель)
Статус: Участник

Создано: 31 мая 2017 18:55 New!
Цитата · Личное сообщение · #30

Vamit
наслаждаюсь твоей беспомощностью

Добавлено спустя 0 минут
difexacaw
крелк не помогай, он сам сказал что даже не знает што такое сисентер, стало быть ему нужно готовое решение




Ранг: 331.5 (мудрец)
Статус: Участник

Создано: 31 мая 2017 19:08 · Поправил: difexacaw New!
Цитата · Личное сообщение · #31

SegFault

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

Пусть использует dbi или кернел отладчик. Такие задачи не решаются в олли.

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

<< . 1 . 2 . 3 . 4 . 5 . >>
 eXeL@B —› Основной форум —› Vmprotect. Хитрая защита от отладки.

Видеокурс ВЗЛОМ