Шифрование строк

Discussion in 'WASM.BEGINNERS' started by FifthAngel, Aug 19, 2008.

  1. FifthAngel

    FifthAngel New Member

    Blog Posts:
    0
    Joined:
    Jul 13, 2008
    Messages:
    15
    Location:
    Russia
    Доброе время суток!
    Есть некий код:
    Code (Text):
    1.    
    2.            GetProcAddress_  db  "GetProcAddress", 0
    3.     LoadLibrary_        db  "LoadLibrary", 0
    4.     CreateFile_         db  "CreateFile", 0
    5.     ReadFile_           db  "ReadFile", 0
    6.     WriteFile_          db  "WriteFile", 0
    7.     SetFilePointer_     db  "SetFilePointer", 0
    8.     CloseHandle_        db  "CloseHandle", 0
    9.     CreateFileMapping_  db  "CreateFileMapping", 0
    10.     MapViewOfFile_      db  "MapViewOfFile", 0
    11.     UnmapViewOfFile_    db  "UnmapViewOfFile", 0
    Как эти строки можно зашифровать?
    интересует какой нибудь макрос
     
  2. TOLSTOPUZ

    TOLSTOPUZ New Member

    Blog Posts:
    0
    Joined:
    Apr 26, 2008
    Messages:
    509
    Да тут вариантов масса

    mysifr macro bufparam ;; - параметр на очередную строку

    mov edi, offset buf ; ; указатель на очередной буфер
    invoke lstrlen,addr buf
    mov ecx,eax ; ; заряжаем цикл длиной строки буфера
    mov al,[edi]
    rol al,1 ; ; крутим вправо биты символа.
    ; Если напишем ror тогда наоборот расшифрует

    rep stosb ; ; возвращаем зашифрованные символы обратно

    EndM
     
  3. 2FED

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    Бред но всёже, когдато фигнёй страдал :lol:

    Code (Text):
    1. Encrypt proc a:dword,key:dword
    2.     invoke  lstrlen,a
    3.     mov     ecx,eax
    4.     mov     edx,a
    5.     mov     eax,key
    6. nxt:
    7.     xor     byte ptr [edx],al
    8.     add     al,byte ptr [edx]
    9.     inc     edx
    10.     loop    nxt
    11.     ret
    12. Encrypt endp
    13.  
    14. Decrupt proc a:dword,key:dword
    15.     invoke  lstrlen,a
    16.     mov     ecx,eax
    17.     dec     ecx
    18.     mov     edx,a
    19.     mov     eax,key
    20.     mov     ah,byte ptr [edx]
    21.     xor     byte ptr [edx],al
    22.     add     al,ah
    23.     inc     edx
    24.     jmp     x
    25. nxt:
    26.     add     al,ah
    27. x:
    28.     mov     ah,byte ptr [edx]
    29.     xor     byte ptr [edx],al
    30.    
    31.     inc     edx
    32.     loop    nxt
    33.     ret
    34. Decrupt endp
     
  4. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    в фасме можно зашифровать во время компиляции
     
  5. FifthAngel

    FifthAngel New Member

    Blog Posts:
    0
    Joined:
    Jul 13, 2008
    Messages:
    15
    Location:
    Russia
    Всем спасибо. GoldFinch я только MASM знаю,
    подскажи, как можно это сделать в фасме
     
  6. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    изучить еще и фасм...
    по сабжу - пример описан в документации к фасму:
    Code (Text):
    1. org $ ;устанавливаем $$
    2. ;------начало шифруемой области ($$)------------
    3. GetProcAddress_     db  "GetProcAddress", 0
    4. ...
    5. UnmapViewOfFile_    db  "UnmapViewOfFile", 0
    6. ;------конец штфруемой области ($)-------------
    7. repeat $-$$ ;число байт
    8. load X byte from $$+(%-1) ;читаем байт скомпилированного кода
    9. Y=X xor 55h ;формула шифрования, можно использовать '%' - счетчик 1..($-$$)
    10. store byte Y at $$+(%-1) ;пишем байт скомпилированного кода
    11. end repeat
    как вариант - можно не только менять данные "на месте", а и перемешивать их, и т.п.
     
  7. deBator

    deBator New Member

    Blog Posts:
    0
    Joined:
    Aug 19, 2008
    Messages:
    11
    Например сделать что-то вроде pre-build step'а и на этой стадии обработать исходники как нужно
     
  8. Magnum

    Magnum New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    ИМХО
    Что-то мне подсказывает, что ты пишешь вирус и хочешь из тела убрать имена функций.

    Тогда шифровать ничего не нужно.

    Используй хеширование.

    Т.е. пишешь произвольный алгоритм хеширования.

    Например твой хэш - 4 байта
    1 байт - сумма байт имени АПИшки
    2 байт - длина апишки
    3 байт - поксоренные байты АПИшки друг на друга
    4 байт - Первый байт апишки


    Ну или что-то свое придумай.

    Во первых вирус будет меньше
    во вторых в теле не будет никаких палевных строк
     
  9. 2FED

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    Если байты поксорены сами на себя они разве ну будут 0?
    Первый байт может менятся от версий виндоус.
    Как вычислять длину апишки? Это извечная сложность определить конец процедуры. темболее опять же разные версии виндоус.
     
  10. deBator

    deBator New Member

    Blog Posts:
    0
    Joined:
    Aug 19, 2008
    Messages:
    11
    Под "длиной апишки" скорее всего имелось ввиду длина ее имени.
     
  11. FifthAngel

    FifthAngel New Member

    Blog Posts:
    0
    Joined:
    Jul 13, 2008
    Messages:
    15
    Location:
    Russia
    Magnum именно так, спасибо за описание хешей.