Как внедрить защиту в исполняемый файл?

Тема в разделе "WASM.BEGINNERS", создана пользователем ArtyomW, 10 май 2010.

  1. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    Пишу дипломную на тему защиты исполняемых файлов от всякого рода анализа. Нашёл массу источников о методах защиты, приёмах антиотладки, в том числе и на WASM.RU. Но ничего о том, как внедрить защиту в исполняемые файлы (т.е в бинарники). Подскажите возможные пути решения или литературу на это тему. Спасибо!
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    ArtyomW
    на кряклабе поищи "ASD.rar"
     
  3. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    wsd
    не вижу, в каком разделе должен быть?
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    внедрение сродни инфекту. тоесть защита может внедряться в файл как вирус.
    а вообще есть тут толковые документы "Об упаковщиках..." http://wasm.ru/article.php?article=packers2
     
  6. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    насчёт инфекта, это скорее всего, тк нужно внедрить не на стадии разработки а в уже готовый исполняемый файл. спасибо wsd и Freeman
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    ArtyomW
    Пол инета статей и матчасти, а вы тут спрашиваете про какието инфекты. Какого анализа ?
    Лог снять с ваших обращений к фс ничто не помешает, впрочем как и всего остального и подсунуть фейковые данные тоже, хоть вы там пол приложения конвертируете в вм.
     
  8. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    Clerk
    любой анализ. тогда что является наиболее эффективным?
     
  9. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    ArtyomW
    Самое простое что приходит в голову это добавить секцию и точку входа на нее, в вашей секции находится защита
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ArtyomW
    бросай диплом, иди в армию =\
     
  11. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    армия подождёт, куда я денусь)
    в итоге нужна программа, которая автоматически усложнит входной исполняемый файл, выполнив обфускацию или шифрование. полагаю, вначале нужно дизассемблировать исходный файл, выполнить некоторое преобразование и затем снова собрать, так?
     
  12. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    ArtyomW
    полное дизассемблирование не нужно, просто перевести в промежуточный формат, удобный для работы.
    и называется это КРИПТОР, так что это не ты придумал
     
  13. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    wsd, насчёт шифрования так, для примера сказал, а вопрос в том, как выполнить обработку входного файла автоматически. например внедрить функцию IsDebuggerPresent, как в статье http://www.wasm.ru/article.php?article=1017001
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    ArtyomW
    поможет от ученика младших классов
    ты бы лучше книги криса касперского почитал, красиво и актуально
     
  15. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    ок, почитаю
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Лучше порт найти, есчо лучше померить сколько сепшенов за еденицу времени доставляется. Вот старый код отключающий вредоносный отладчик :)
    Код (Text):
    1. DB 0E9H, 013H, 001H, 000H, 000H, 050H, 052H, 064H, 08BH, 00DH
    2. DB 030H, 000H, 000H, 000H, 08BH, 081H, 0A4H, 000H, 000H, 000H
    3. DB 08BH, 091H, 0A8H, 000H, 000H, 000H, 083H, 0F8H, 005H, 074H
    4. DB 014H, 083H, 0F8H, 006H, 075H, 01DH, 085H, 0D2H, 0B9H, 003H
    5. DB 000H, 000H, 000H, 074H, 019H, 041H, 04AH, 074H, 015H, 0EBH
    6. DB 00EH, 033H, 0C9H, 085H, 0D2H, 074H, 00DH, 041H, 04AH, 074H
    7. DB 009H, 041H, 04AH, 074H, 005H, 0B9H, 000H, 000H, 000H, 000H
    8. DB 05AH, 058H, 0C3H, 0E8H, 0B7H, 0FFH, 0FFH, 0FFH, 075H, 00BH
    9. DB 08DH, 054H, 024H, 014H, 00FH, 0B7H, 044H, 04CH, 004H, 0EBH
    10. DB 002H, 08BH, 0C4H, 08BH, 0CCH, 081H, 0ECH, 000H, 003H, 000H
    11. DB 000H, 0C7H, 004H, 024H, 013H, 000H, 001H, 000H, 089H, 08CH
    12. DB 024H, 0C4H, 000H, 000H, 000H, 0C7H, 084H, 024H, 0C0H, 000H
    13. DB 000H, 000H, 002H, 002H, 000H, 000H, 08CH, 094H, 024H, 0C8H
    14. DB 000H, 000H, 000H, 08CH, 08CH, 024H, 0BCH, 000H, 000H, 000H
    15. DB 0C7H, 044H, 024H, 018H, 000H, 000H, 000H, 000H, 089H, 0ACH
    16. DB 024H, 0B4H, 000H, 000H, 000H, 089H, 084H, 024H, 0B0H, 000H
    17. DB 000H, 000H, 089H, 094H, 024H, 0A8H, 000H, 000H, 000H, 089H
    18. DB 09CH, 024H, 0A4H, 000H, 000H, 000H, 089H, 0B4H, 024H, 0A0H
    19. DB 000H, 000H, 000H, 089H, 0BCH, 024H, 09CH, 000H, 000H, 000H
    20. DB 0E8H, 033H, 000H, 000H, 000H, 089H, 08CH, 024H, 0B8H, 000H
    21. DB 000H, 000H, 06AH, 000H, 054H, 068H, 03CH, 000H, 000H, 000H
    22. DB 083H, 044H, 024H, 004H, 004H, 068H, 01CH, 020H, 022H, 037H
    23. DB 0E8H, 024H, 0FFH, 0FFH, 0FFH, 075H, 00BH, 08DH, 054H, 024H
    24. DB 008H, 00FH, 0B6H, 004H, 00CH, 0CDH, 02EH, 0CCH, 081H, 0C4H
    25. DB 008H, 003H, 000H, 000H, 0EBH, 005H, 0E8H, 01BH, 000H, 000H
    26. DB 000H, 0CDH, 02EH, 050H, 08BH, 044H, 024H, 014H, 0FFH, 074H
    27. DB 024H, 004H, 08DH, 044H, 084H, 018H, 08FH, 000H, 089H, 044H
    28. DB 024H, 004H, 058H, 05CH, 0FFH, 004H, 024H, 0C3H, 059H, 0C3H
    29. DB 054H, 08BH, 0C4H, 06AH, 000H, 06AH, 004H, 050H, 06AH, 01EH
    30. DB 06AH, 0FFH, 06AH, 005H, 068H, 0EAH, 000H, 000H, 000H, 068H
    31. DB 0A1H, 000H, 0E4H, 000H, 068H, 086H, 000H, 09AH, 000H, 0E8H
    32. DB 00FH, 0FFH, 0FFH, 0FFH, 090H, 085H, 0C0H, 075H, 036H, 0FFH
    33. DB 034H, 024H, 06AH, 0FFH, 06AH, 002H, 068H, 021H, 001H, 000H
    34. DB 000H, 068H, 0C7H, 000H, 00AH, 001H, 068H, 0FFH, 0FFH, 0BFH
    35. DB 000H, 0E8H, 0EFH, 0FEH, 0FFH, 0FFH, 090H, 050H, 0FFH, 074H
    36. DB 024H, 004H, 06AH, 001H, 06AH, 032H, 068H, 01BH, 000H, 030H
    37. DB 000H, 068H, 018H, 000H, 019H, 000H, 0E8H, 0D6H, 0FEH, 0FFH
    38. DB 0FFH, 090H, 058H, 083H, 0C4H, 004H, 0FFH, 004H, 024H, 0C3H
     
  17. ArtyomW

    ArtyomW New Member

    Публикаций:
    0
    Регистрация:
    10 май 2010
    Сообщения:
    12
    Clerk, пояни
     
  18. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    ArtyomW
    Что там пояснять, там же все ясно как божий день.
     
  19. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    Clerk
    кстати тут можно также размещать код в двоичном виде, так оно наверное понятнее будет или в виде юникод строки
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. .code
    2. OS_VERSION_ID_2000  equ 0
    3. OS_VERSION_ID_XP    equ 1
    4. OS_VERSION_ID_2003  equ 2
    5. OS_VERSION_ID_VISTA equ 3
    6. OS_VERSION_ID_7 equ 4
    7.  
    8. ; +
    9. ;
    10. QueryVersion proc C
    11.     push eax
    12.     push edx
    13.     assume fs:nothing
    14.     mov ecx,fs:[TEB.Peb]
    15.     assume ecx:PPEB
    16.     mov eax,[ecx].NtMajorVersion
    17.     mov edx,[ecx].NtMinorVersion
    18.     cmp eax,5
    19.     je v_5_x_
    20.     cmp eax,6
    21.     jne err_ver_
    22. ; 6.X
    23.     test edx,edx
    24.     mov ecx,OS_VERSION_ID_VISTA
    25.     jz end_ver_ ; 6.0
    26.     inc ecx     ; OS_VERSION_ID_7
    27.     dec edx
    28.     jz end_ver_ ; 6.1
    29.     jmp err_ver_
    30. v_5_x_:
    31.     xor ecx,ecx ; OS_VERSION_ID_2000
    32.     test edx,edx
    33.     jz end_ver_ ; 5.0
    34.     inc ecx     ; OS_VERSION_ID_XP
    35.     dec edx
    36.     jz end_ver_ ; 5.1
    37.     inc ecx     ; OS_VERSION_ID_2003
    38.     dec edx
    39.     jz end_ver_
    40. err_ver_:
    41.     mov ecx,0
    42. end_ver_:
    43.     pop edx
    44.     pop eax
    45.     ret
    46. QueryVersion endp
    47.  
    48. ; +
    49. ;
    50. SystemCall proc C
    51. ; [Esp]:
    52. ; + 00 Eax
    53. ; + 04 Return1 <- Esp
    54. ; + 08 ServiceList1
    55. ; + 0C ServiceList2
    56. ; + 10 ServiceList3
    57. ; + 14 NumberParameters
    58. ; + 18 Return2
    59. ; + 1C Parameter1
    60. ; + 20 ParameterN <- Return
    61. ; + XX ...
    62.     Call QueryVersion
    63.     .if Zero?
    64.     lea edx,[esp + 14H]
    65.     movzx eax,word ptr [esp + ecx*2 + 4]
    66.     .else
    67.     mov eax,esp
    68.     .endif
    69. ; Если выполняется трассировка сервиса NtRemoveProcessDebug,
    70. ; то при возврате из прерывания отладочный орт будет отключе
    71. ; н, но TF взведён, что приведёт к генерации трассировочного
    72. ; исключения, которое необходимо обработать, либо вызвать пр
    73. ; ерывание со сброшенным TF, загрузя заранее сформированный
    74. ; контекст в процессор посредством сервиса NtContinue(исполь
    75. ; зовать для этой цели диспетчер исключений недопустимо, на
    76. ; отладочный порт будет доставлено сообщение об исключении и
    77. ; диспетчер может трассироваться).
    78.     mov ecx,esp
    79.     sub esp,300H    ; sizeof(CONTEXT)
    80.     assume ecx:PCONTEXT
    81.     mov CONTEXT.ContextFlags[esp],CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_DEBUG_REGISTERS
    82.     mov CONTEXT.regEsp[esp],ecx
    83.     mov CONTEXT.regEFlags[esp],EFLAGS_IF or 2
    84.     mov word ptr CONTEXT.regSegSs[esp],ss
    85.     mov word ptr CONTEXT.regSegCs[esp],cs
    86.     mov CONTEXT.regDr7[esp],0
    87.     mov CONTEXT.regEbp[esp],ebp
    88.     mov CONTEXT.regEax[esp],Eax
    89.     mov CONTEXT.regEdx[esp],Edx
    90.     mov CONTEXT.regEbx[esp],Ebx
    91.     mov CONTEXT.regEsi[esp],esi
    92.     mov CONTEXT.regEdi[esp],edi
    93.     Call GetGraphEntry
    94.     mov CONTEXT.regEip[esp],ecx
    95.     push FALSE
    96.     push esp
    97.     push dword ptr 3CH  ; Aligned.
    98.     add dword ptr [esp + 4],4
    99.     push 3722201CH
    100.     Call QueryVersion
    101.     jnz @f
    102.     lea edx,[esp + 8]
    103.     movzx eax,byte ptr [esp + ecx]
    104.     Int 2EH
    105.     DB 0CCH ; Int3
    106. @@:
    107.     add esp,308H
    108.     jmp CallService
    109. GetGraphEntry:
    110.     Call GetGraphReturn
    111. CallService:
    112.     Int 2EH
    113. ServiceExit:
    114.     push eax
    115.     mov eax,dword ptr [esp + 14H]
    116.     push dword ptr [esp + 4]
    117.     lea eax,[eax*4 + esp + 18H]
    118.     pop dword ptr [eax]
    119.     mov dword ptr [esp + 4],eax
    120.     pop eax
    121.     pop esp
    122.     inc dword ptr [esp]
    123.     ret
    124. GetGraphReturn:
    125.     pop ecx
    126.     ret
    127. SystemCall endp
    128.  
    129. $SYSCALL macro VT1:REQ, VT2:REQ, VT3:REQ, NumberParameters:REQ, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10
    130.     FOR Arg, <p10,p9,p8,p7,p6,p5,p4,p3,p2,p1>
    131.     IFNB <Arg>
    132.     push Arg
    133.     ENDIF
    134.     ENDM
    135.     push NumberParameters
    136.     push VT3
    137.     push VT2
    138.     push VT1
    139.     Call SystemCall
    140. endm
    141.  
    142. ProcessDebugObjectHandle    equ 30
    143.  
    144. STATUS_PORT_NOT_SET equ 0C0000353H
    145.  
    146. OutsideOfDebugger proc C
    147.     push esp
    148.     mov eax,esp
    149.     push NULL
    150.     push sizeof(HANDLE)
    151.     push eax
    152.     push ProcessDebugObjectHandle       ; 0x1E
    153.     push NtCurrentProcess
    154.     push 5
    155.     push 000000EAH
    156.     push 00E400A1H
    157.     push 009A0086H
    158.     Call SystemCall ; NtQueryInformationProcess(ProcessDebugObjectHandle)
    159.     nop
    160.     test eax,eax
    161.     jnz @f
    162.     push dword ptr [esp]
    163.     push NtCurrentProcess
    164.     push 2
    165.     push 00000121H
    166.     push 010A00C7H
    167.     push 00BFFFFFH
    168.     Call SystemCall ; NtRemoveProcessDebug
    169.     nop
    170.     push eax
    171.     push dword ptr [esp + 4]
    172.     push 1
    173.     push 00000032H
    174.     push 0030001BH
    175.     push 00190018H
    176.     Call SystemCall ; NtClose
    177.     nop
    178.     pop eax
    179. @@:
    180.     add esp,sizeof(HANDLE)
    181.        inc dword ptr [esp]  ; test.
    182.     ret
    183. OutsideOfDebugger endp
    184.  
    185. Entry proc
    186. Local Response:ULONG
    187.     invoke OutsideOfDebugger
    188.     nop
    Думал что вам интереснее самим разобраться :dntknw: