include windows.inc include user32.inc include kernel32.inc include gdi32.inc include winmm.inc include urlmon.inc include wininet.inc include advapi32.inc includelib user32.lib includelib kernel32.lib includelib gdi32.lib includelib winmm.lib includelib urlmon.lib includelib wininet.lib includelib advapi32.lib ofStr MACRO Text : req local lText .data lText db Text, 0 .code exitm endM lpStr MACRO Text : req local lText .data lText db Text, 0 .code exitm endM ;STATIC FUNCTIONS SetStaticImage PROTO hStatic : DWORD, szImage : DWORD, szType : DWORD, hInstance : DWORD ;hInstance can be null ;OWNERDRAW SetTextType PROTO hDC : DWORD, Color: DWORD, Stock : DWORD, BGCOLOR : DWORD DrawLine PROTO hDC : DWORD, X : DWORD, Y : DWORD, X2 : DWORD, Y2 : DWORD CreateTitleArea PROTO hWin : DWORD, dwSize : DWORD DrawTitleArea PROTO hWin : DWORD, hDC : DWORD, dwSize : DWORD ;NÃO ACABADA ;WINDOW FUNCTIONS SetWindowIcon PROTO hWin : DWORD, szImage : DWORD, hInstance : DWORD ;hInstance can be null GetWindowWidth PROTO hWin : DWORD GetWindowHeight PROTO hWin : DWORD EnumChildCallback PROTO hWin : DWORD, lParam : DWORD RefreshWindow PROTO hWin : DWORD SetAlphaTransparency PROTO hWin : DWORD, Alpha : DWORD, AlphaType : DWORD SetWindowBackground PROTO hWin : DWORD, szImage : DWORD, hInstance : DWORD, szType : DWORD RoundBorder PROTO hWin : DWORD ;OBJECT FUNCTIONS CreateWebBrowser PROTO hWin : DWORD, lpStartPage : DWORD, X : DWORD, Y : DWORD, dwWidth : DWORD, dwHeight : DWORD, ID : DWORD, hInstance : DWORD ;PLAYER OBJECT FUNCTIONS CreatePlayer PROTO hWin : DWORD, X : DWORD, Y : DWORD, dwWidth : DWORD, dwHeight : DWORD, hInstance : DWORD HookPlayerCallback PROTO hWin : DWORD, uMsg : DWORD, wParam : DWORD, lParam : DWORD ;GAUGE FUNCTIONS CreateGauge PROTO hWin : DWORD, X : DWORD, Y : DWORD, dwWidth : DWORD, dwHeight : DWORD, hInstance : DWORD HookGaugeCallback PROTO hWin : DWORD, uMsg : DWORD, wParam : DWORD, lParam : DWORD ;IO FUNCTIONS ReadTextFile PROTO lpFileName : DWORD WriteTextFile PROTO lpFileName : DWORD, pText : DWORD ReadFileChunk PROTO lpFileName : DWORD, dwSize : DWORD, dwChunk : DWORD ;CONVERT FUNCTIONS IntToStr PROTO dwInt : DWORD IntToHex PROTO dwInt : DWORD StrToInt PROTO lpNumber : DWORD UpperCase PROTO lpString : DWORD SmallerCase PROTO lpString : DWORD AsciiToUnicode PROTO lpString : DWORD UnicodeToAscii PROTO lpString : DWORD ;NÃO ACABADA ;STRING FUNCTIONS ExtractFilePath PROTO lpBuffy : DWORD ExtractFileName PROTO lpBuffy : DWORD ExtractFileExtension PROTO lpBuffy : DWORD ;FILE TRANSFER PROTOCOL FTPConnect PROTO Server : DWORD, User : DWORD, Password : DWORD, Port : DWORD FTPUpload PROTO hConnect : DWORD, lpFrom : DWORD, lpTo : DWORD FTPClose PROTO hConnect : DWORD FTPDownload PROTO hConnect : DWORD, lpFrom : DWORD, lpTo : DWORD ;REMOTE IO RemoteReadFile PROTO lpLink : DWORD, dwSize : DWORD RemoteGetFileChunk PROTO lpLink : DWORD, dwSize : DWORD, ChunkAt : DWORD ;PE Functions IsValidPE PROTO lpFileName : DWORD GetDOSHeader PROTO lpFileName : DWORD GetNTHeaders PROTO lpFileName : DWORD GetEntryPoint PROTO lpFileName : DWORD GetOptionalHeaderObject PROTO lpFileName : DWORD, dwType : DWORD GetNumberOfSections PROTO lpFileName : DWORD ListSections PROTO lpFileName : DWORD, dwCallBack : DWORD, lParam : DWORD ;PROCESS FUNCTION ProcExists PROTO pName : DWORD GetPIDbyName PROTO pName : DWORD SeDebugPrivilege PROTO ;TIME FUNCTIONS TimeGetYear PROTO TimeGetMonth PROTO TimeGetWeekDay PROTO TimeGetDay PROTO TimeGetHour PROTO TimeGetMinute PROTO TimeGetSecond PROTO TimeGetMillisecond PROTO ;UTILS ShowTaskbar PROTO bBoolean : BOOL MD5hash proto :dword,:dword,:dword ;IMAGE TYPES IMAGETYPE_BITMAP equ 1 IMAGETYPE_ICON equ 2 ;RETURN MESSAGES ERROR_INCORRECT_PARAM equ 1 RETURN_SUCCESS equ 2 ;COLOR STOCK STOCK_WHITE equ 0 STOCK_LIGHTGRAY equ 1 STOCK_GRAY equ 2 STOCK_BLACK equ 4 STOCK_TRANSPARENT equ 5 ;BG_COLOR BG_TRANSPARENT equ -1 ;Alpha Type ALPHA_PERCENTAGE equ 1 ALPHA_BYTE equ 0 ;OPTIONAL HEADER TYPES OPTIONAL_GET_MAGIC equ 0 OPTIONAL_GET_MAJORLINKVER equ 1 OPTIONAL_GET_MINORLINKVER equ 2 OPTIONAL_GET_SIZEOFCODE equ 3 OPTIONAL_GET_SIZEOFINITDATA equ 4 OPTIONAL_GET_SIZEOFUINITDATA equ 5 OPTIONAL_GET_ADDROFEP equ 6 OPTIONAL_GET_BASEOFCODE equ 7 OPTIONAL_GET_BASEOFDATA equ 8 OPTIONAL_GET_IMAGEBASE equ 9 OPTIONAL_GET_SECTIONALIGN equ 10 OPTIONAL_GET_FILEALIGN equ 11 OPTIONAL_GET_MAJOROSVER equ 12 OPTIONAL_GET_MINOROSVER equ 13 OPTIONAL_GET_MAJORIMGVER equ 14 OPTIONAL_GET_MINORIMGVER equ 15 OPTIONAL_GET_MAJORSUBSYSVER equ 16 OPTIONAL_GET_MINORSUBSYSVER equ 17 OPTIONAL_GET_WIN32VERVALUE equ 18 OPTIONAL_GET_SIZEOFIMAGE equ 19 OPTIONAL_GET_SIZEOFHEADERS equ 20 OPTIONAL_GET_CHECKSUM equ 21 OPTIONAL_GET_SUBSYSTEM equ 22 OPTIONAL_GET_DLLCHARAC equ 23 OPTIONAL_GET_SIZEOFSTACKRES equ 24 OPTIONAL_GET_SIZEOFSTACKCOM equ 25 OPTIONAL_GET_SIZEOFHEAPRES equ 26 OPTIONAL_GET_SIZEOFHEAPCOM equ 27 OPTIONAL_GET_LOADERFLAG equ 28 OPTIONAL_GET_NUMBERRVASIZES equ 29 ;PLAYER MESSAGES PM_SELECTMUSIC equ WM_USER+1 PM_PLAYMUSIC equ WM_USER+2 PM_PAUSEMUSIC equ WM_USER+3 PM_DESTROYPLAYER equ WM_USER+4 ;GAUGE MESSAGES GM_GETBARCOLOR equ WM_USER+6 GM_GETBKCOLOR equ WM_USER+7 GM_GETPOS equ WM_USER+8 GM_GETMIN equ WM_USER+9 GM_GETSTEP equ WM_USER+10 GM_SETBARCOLOR equ WM_USER+11 GM_SETBKCOLOR equ WM_USER+12 GM_SETPOS equ WM_USER+13 GM_SETRANGE equ WM_USER+14 GM_SETSTEP equ WM_USER+15 GM_STEPIT equ WM_USER+16 GM_SETTEXTCOLOR equ WM_USER+17 GM_SETBKTEXTCOLOR equ WM_USER+18 GM_GETMAX equ WM_USER+19 GM_DESTROY equ WM_USER+20 WIN_INFO STRUCT hMain dd ? dwSize dd ? WIN_INFO EndS WINDOWINFO struct cbSize DWORD ? rcWindow RECT <> rcClient RECT <> dwStyle DWORD ? dwExStyle DWORD ? dwWindowStatus DWORD ? cxWindowBorders UINT ? cyWindowBorders UINT ? atomWindowType ATOM ? wCreatorVersion WORD ? WINDOWINFO ends PLAYER struct hPlay dd ? hPause dd ? hWin dd ? hInstance dd ? dwWinProc dd ? lpFileName dd ? OpenParms MCI_OPEN_PARMS PlayParms MCI_PLAY_PARMS GenericParms MCI_GENERIC_PARMS PLAYER EndS GAUGE struct hProgress dd ? hStatic dd ? hWin dd ? dwWinProc dd ? TextColor dd ? TextBgColor dd ? GAUGE EndS .data wbClass db "AtlAxWin", 0 wbModule db "atl.dll", 0 wbFunction db "AtlAxWinInit", 0 staticClass db "STATIC", 0 lpPauseText db "or or", 0 lpPlayText db "or >", 0 buttonClass db "BUTTON", 0 hPlayerStruct dd ? hGaugeStruct dd ? strBuff db 256 dup(0) .code SetStaticImage proc hStatic : DWORD, szImage : DWORD, szType : DWORD, hInstance : DWORD LOCAL hImage : DWORD .if (szType == IMAGETYPE_BITMAP) invoke GetWindowLong, hStatic, GWL_STYLE or eax, SS_BITMAP invoke SetWindowLong, hStatic, GWL_STYLE, eax invoke LoadBitmap, hInstance, szImage invoke SendMessage, hStatic, STM_SETIMAGE, IMAGE_BITMAP, eax mov eax, RETURN_SUCCESS ret .elseif (szType == IMAGETYPE_ICON) invoke GetWindowLong, hStatic, GWL_STYLE or eax, SS_ICON invoke SetWindowLong, hStatic, GWL_STYLE, eax invoke LoadIcon, hInstance, szImage invoke SendMessage, hStatic, STM_SETIMAGE, IMAGE_ICON, eax mov eax, RETURN_SUCCESS ret .else mov eax, ERROR_INCORRECT_PARAM ret .endif SetStaticImage EndP SetWindowIcon proc hWin : DWORD, szImage : DWORD, hInstance : DWORD invoke GetModuleHandle, hInstance invoke LoadIcon, eax, szImage invoke SendMessage, hWin, WM_SETICON, eax, 0 mov eax, RETURN_SUCCESS Ret SetWindowIcon EndP SetTextType proc hDC : DWORD, Color: DWORD, Stock : DWORD, BGCOLOR: DWORD .if (BGCOLOR == BG_TRANSPARENT) invoke SetBkMode, hDC, TRANSPARENT .else invoke SetBkColor, hDC, BGCOLOR .endif invoke SetTextColor, hDC, Color invoke GetStockObject, Stock Ret SetTextType EndP DrawLine proc hDC : DWORD, X : DWORD, Y : DWORD, X2 : DWORD, Y2 : DWORD LOCAL P : POINT invoke MoveToEx, hDC, X, Y, addr P invoke LineTo, hDC, X2, Y2 invoke MoveToEx, hDC, P.x, P.y, NULL mov eax, RETURN_SUCCESS Ret DrawLine EndP CreateTitleArea proc hWin : DWORD, dwSize : DWORD LOCAL R: RECT LOCAL winInfo : WIN_INFO invoke GetWindowRect, hWin, addr R mov ebx, R.right sub ebx, R.left mov ecx, R.bottom sub ecx, R.top add ecx, dwSize invoke MoveWindow, hWin, R.left, R.top, ebx, ecx,TRUE invoke GetWindowLong, hWin, GWL_STYLE xor eax, WS_BORDER xor eax, WS_DLGFRAME invoke SetWindowLong, hWin, GWL_STYLE, eax mov eax, hWin mov winInfo.hMain, eax mov eax, dwSize mov winInfo.dwSize, eax invoke EnumChildWindows, hWin, addr EnumChildCallback, addr winInfo invoke SendMessage, hWin, WM_PAINT, 0, 0 mov eax, RETURN_SUCCESS Ret CreateTitleArea EndP EnumChildCallback proc hWin : DWORD, lParam : DWORD LOCAL R : RECT LOCAL R2 : RECT mov esi, lParam assume esi : ptr WIN_INFO invoke GetWindowRect, [esi].hMain, addr R invoke GetWindowRect, hWin, addr R2 mov ebx, R2.left sub ebx, R.left mov ecx, R2.top sub ecx, R.top add ecx, [esi].dwSize invoke GetWindowHeight, hWin mov edx, eax invoke GetWindowWidth, hWin invoke MoveWindow, hWin, ebx, ecx, eax, edx, TRUE invoke RefreshWindow, hWin invoke RefreshWindow, [esi].hMain mov eax, RETURN_SUCCESS Ret EnumChildCallback EndP DrawTitleArea proc hWin : DWORD, hDC : DWORD, dwSize : DWORD LOCAL winCaption[500] : CHAR invoke GetWindowText, hWin, addr winCaption, sizeof winCaption invoke GetWindowTextLength, hWin invoke TextOut, hDC, 5, 5, addr winCaption,eax invoke GetWindowHeight, hWin invoke DrawLine, hDC, 0, dwSize, eax, dwSize mov eax, RETURN_SUCCESS Ret DrawTitleArea EndP GetWindowHeight proc hWin : DWORD invoke VirtualAlloc, NULL, sizeof WINDOWINFO, MEM_COMMIT, PAGE_READWRITE mov esi, eax assume esi : ptr WINDOWINFO mov [esi].cbSize, sizeof WINDOWINFO invoke GetWindowInfo, hWin, esi mov eax, [esi].rcWindow.bottom sub eax, [esi].rcWindow.top push eax invoke VirtualFree, esi, sizeof WINDOWINFO, MEM_RELEASE pop eax Ret GetWindowHeight EndP GetWindowWidth proc hWin : DWORD invoke VirtualAlloc, NULL, sizeof WINDOWINFO, MEM_COMMIT, PAGE_READWRITE mov esi, eax assume esi : ptr WINDOWINFO mov [esi].cbSize, sizeof WINDOWINFO invoke GetWindowInfo, hWin, esi mov eax, [esi].rcWindow.right sub eax, [esi].rcWindow.left push eax invoke VirtualFree, esi, sizeof WINDOWINFO, MEM_RELEASE pop eax Ret GetWindowWidth EndP RefreshWindow proc hWin : DWORD invoke RedrawWindow, hWin, NULL, NULL, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN mov eax, RETURN_SUCCESS Ret RefreshWindow EndP SetAlphaTransparency proc hWin : DWORD, Alpha : DWORD, AlphaType : DWORD invoke GetWindowLong, hWin, GWL_EXSTYLE or eax, WS_EX_LAYERED invoke SetWindowLong, hWin, GWL_EXSTYLE, eax .if (AlphaType == ALPHA_PERCENTAGE) mov eax, 255 imul eax, Alpha mov ecx, 100 div ecx .else mov eax, Alpha .endif invoke SetLayeredWindowAttributes, hWin, NULL, eax, LWA_ALPHA mov eax, RETURN_SUCCESS Ret SetAlphaTransparency EndP CreateWebBrowser proc hWin : DWORD, lpStartPage : DWORD, X : DWORD, Y : DWORD, dwWidth : DWORD, dwHeight : DWORD, ID : DWORD, hInstance : DWORD invoke LoadLibrary, offset wbModule invoke GetProcAddress, eax, addr wbFunction call eax invoke CreateWindowEx, NULL, addr wbClass, lpStartPage, WS_VISIBLE or WS_CHILD, X, Y, dwWidth, dwHeight, hWin, ID, hInstance, NULL Ret CreateWebBrowser EndP SetWindowBackground proc hWin : DWORD, szImage : DWORD, hInstance : DWORD, szType : DWORD invoke GetWindowWidth, hWin mov ebx, eax invoke GetWindowHeight, hWin invoke CreateWindowEx, NULL, addr staticClass, NULL, WS_CHILD or WS_VISIBLE or SS_CENTERIMAGE, 0, 0, ebx, eax, hWin, NULL, hInstance, NULL mov esi, eax invoke SetStaticImage, eSI, szImage, szType, hInstance invoke SetWindowPos, esi,HWND_BOTTOM, 0, 0, 0, 0,SWP_NOSIZE or SWP_NOMOVE Ret SetWindowBackground EndP RoundBorder proc hWin : DWORD invoke GetWindowWidth, hWin mov ebx, eax invoke GetWindowHeight, hWin invoke CreateRoundRectRgn, 0, 0, ebx, eax, 20, 20 invoke SetWindowRgn, hWin, eax, TRUE Ret RoundBorder EndP CreatePlayer proc hWin : DWORD, X : DWORD, Y : DWORD, dwWidth : DWORD, dwHeight : DWORD, hInstance : DWORD mov eax, dwWidth mov ecx, 2 div ecx mov ebx, eax invoke VirtualAlloc, NULL, sizeof PLAYER, MEM_COMMIT, PAGE_READWRITE mov edi, eax assume edi : ptr PLAYER invoke CreateWindowEx, NULL, addr buttonClass, addr lpPlayText, WS_VISIBLE or WS_CHILD, X, Y, ebx, dwHeight, hWin, NULL, hInstance, NULL mov [edi].hPlay, eax mov ecx, X add ecx, ebx invoke CreateWindowEx, NULL, addr buttonClass, addr lpPauseText, WS_VISIBLE or WS_CHILD, ecx, Y, ebx, dwHeight, hWin, NULL, hInstance, NULL mov [edi].hPause, eax mov eax, hWin mov [edi].hWin, eax invoke GetWindowLong, [edi].hWin,GWL_WNDPROC mov [edi].dwWinProc, eax invoke SetWindowLong, [edi].hWin, GWL_WNDPROC, addr HookPlayerCallback mov hPlayerStruct, edi mov eax, edi Ret CreatePlayer EndP HookPlayerCallback proc hWin : DWORD, uMsg : DWORD, wParam : DWORD, lParam : DWORD mov edi, hPlayerStruct assume edi : ptr PLAYER .if (uMsg == WM_COMMAND) mov eax, lParam .if (eax == [edi].hPlay) push hWin pop [edi].PlayParms.dwCallback mov [edi].OpenParms.lpstrDeviceType, ofStr("Sequencer") mov eax, [edi].lpFileName mov [edi].OpenParms.lpstrElementName, eax invoke mciSendCommand, 0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, addr [edi].OpenParms mov esi, [edi].OpenParms.wDeviceID invoke mciSendCommand, esi, MCI_PLAY, MCI_NOTIFY, addr [edi].PlayParms .elseif (eax == [edi].hPause) push hWin pop [edi].GenericParms.dwCallback invoke mciSendCommand, [edi].OpenParms.wDeviceID, MCI_PAUSE, MCI_NOTIFY, addr [edi].GenericParms .endif .elseif (uMsg == PM_SELECTMUSIC) mov eax, lParam mov [edi].lpFileName, eax .elseif (uMsg == PM_PLAYMUSIC) invoke SendMessage, hWin, WM_COMMAND, 0, [edi].hPlay .elseif (uMsg == PM_PAUSEMUSIC) invoke SendMessage, hWin, WM_COMMAND, 0, [edi].hPause .elseif (uMsg == PM_DESTROYPLAYER) invoke SetWindowLong, hWin, GWL_WNDPROC, [edi].dwWinProc push hWin pop [edi].GenericParms.dwCallback invoke mciSendCommand, [edi].OpenParms.wDeviceID, MCI_PAUSE, MCI_NOTIFY, addr [edi].GenericParms invoke DestroyWindow, [edi].hPlay invoke DestroyWindow, [edi].hPause invoke VirtualFree, edi, sizeof PLAYER, MEM_RELEASE .endif mov eax, [edi].dwWinProc push lParam push wParam push uMsg push hWin call eax Ret HookPlayerCallback EndP ReadTextFile proc lpFileName : DWORD LOCAL hFile : DWORD LOCAL pText : DWORD LOCAL Written : DWORD invoke CreateFile, lpFileName,GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax invoke GetFileSize, hFile, NULL inc eax push eax invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE mov pText, eax pop ebx invoke ReadFile, hFile, pText, ebx, addr Written, NULL invoke CloseHandle, hFile mov eax, pText Ret ReadTextFile EndP WriteTextFile proc lpFileName : DWORD, pText : DWORD LOCAL hFile : DWORD LOCAL Written : DWORD invoke CreateFile, lpFileName,GENERIC_WRITE, FILE_SHARE_WRITE, NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax invoke lstrlen, pText mov ebx, eax invoke WriteFile, hFile, pText, ebx, addr Written, NULL invoke CloseHandle, hFile mov eax,ebx Ret WriteTextFile EndP IntToStr proc dwInt : DWORD invoke VirtualAlloc, NULL, 11, MEM_COMMIT, PAGE_READWRITE push eax invoke wsprintf, eax, lpStr("%d"), dwInt pop eax Ret IntToStr EndP IntToHex proc dwInt : DWORD invoke VirtualAlloc, NULL, 9, MEM_COMMIT, PAGE_READWRITE mov esi, eax invoke wsprintf, esi, lpStr("%X"), dwInt mov eax, esi Ret IntToHex EndP ExtractFilePath proc lpBuffy : DWORD invoke lstrlen, lpBuffy mov ecx, lpBuffy mov esi, eax .while (esi > 0) mov al, byte ptr ds:[ecx+esi] .if (al == "\") invoke VirtualAlloc, NULL, edx, MEM_COMMIT, PAGE_READWRITE mov edx, eax push eax inc esi invoke RtlMoveMemory, edx, lpBuffy, esi pop eax ret .endif dec esi .endw Ret ExtractFilePath EndP ExtractFileName proc lpBuffy : DWORD invoke lstrlen, lpBuffy mov ecx, lpBuffy mov esi, eax .while (esi > 0) mov al, byte ptr ds:[ecx+esi] .if (al == "\") dec esi add esi, lpBuffy invoke lstrlen, esi mov edi, eax inc edx push edx invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE push eax pop edx invoke RtlMoveMemory, eax,edx, edi pop eax ret .endif dec esi .endw Ret ExtractFileName EndP ExtractFileExtension proc lpBuffy : DWORD invoke lstrlen, lpBuffy mov ecx, lpBuffy mov esi, eax .while (esi > 0) mov al, byte ptr ds:[ecx+esi] .if (al == ".") dec esi add esi, lpBuffy invoke lstrlen, esi mov edi, eax inc edx push edx invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE push eax pop edx invoke RtlMoveMemory, eax,edx, edi pop eax ret .endif dec esi .endw Ret ExtractFileExtension EndP CreateGauge proc hWin : DWORD, X : DWORD, Y : DWORD, dwWidth : DWORD, dwHeight : DWORD, hInstance : DWORD mov eax, dwWidth mov ecx, 2 div ecx add eax, 20 mov ebx, eax invoke VirtualAlloc, NULL, sizeof GAUGE, MEM_COMMIT, PAGE_READWRITE mov edi, eax assume edi : ptr GAUGE invoke CreateWindowEx, NULL, lpStr("msctls_progress32"), NULL, WS_VISIBLE or WS_CHILD or PBS_MARQUEE, X, Y, dwWidth, dwHeight, hWin, NULL, hInstance, NULL mov [edi].hProgress, eax invoke CreateWindowEx, NULL, lpStr("STATIC"), lpStr("0 %"), WS_VISIBLE or WS_CHILD or SS_CENTERIMAGE or SS_CENTER, ebx, Y, 35, dwHeight, hWin, NULL, hInstance, NULL mov [edi].hStatic, eax mov eax, hWin mov [edi].hWin, eax invoke GetWindowLong, [edi].hWin,GWL_WNDPROC mov [edi].dwWinProc, eax invoke SetWindowLong, [edi].hWin, GWL_WNDPROC, addr HookGaugeCallback mov hGaugeStruct, edi mov [edi].TextBgColor, BG_TRANSPARENT invoke SendMessage, [edi].hProgress, PBM_SETMARQUEE, TRUE, 0 mov eax, edi Ret CreateGauge EndP HookGaugeCallback proc hWin : DWORD, uMsg : DWORD, wParam : DWORD, lParam : DWORD mov edi, hGaugeStruct assume edi : ptr GAUGE .if (uMsg == GM_GETPOS) invoke SendMessage, [edi].hProgress, PBM_GETPOS, 0, 0 ret .elseif (uMsg == GM_GETBARCOLOR) invoke SendMessage, [edi].hProgress, PBM_GETBARCOLOR, 0, 0 ret .elseif (uMsg == GM_GETBKCOLOR) invoke SendMessage, [edi].hProgress, PBM_GETBKCOLOR, 0, 0 ret .elseif (uMsg == GM_GETMIN) invoke SendMessage, [edi].hProgress, PBM_GETRANGE, TRUE, 0 ret .elseif (uMsg == GM_GETMAX) invoke SendMessage, [edi].hProgress, PBM_GETRANGE, FALSE, 0 ret .elseif (uMsg == GM_GETSTEP) invoke SendMessage, [edi].hProgress, PBM_GETSTEP, 0, 0 ret .elseif (uMsg == GM_STEPIT) invoke SendMessage, [edi].hProgress, PBM_STEPIT, 0, 0 invoke SendMessage, [edi].hProgress, PBM_GETPOS, 0, 0 imul eax, 100 push eax invoke SendMessage, [edi].hProgress, PBM_GETRANGE, FALSE, 0 xor edx, edx pop eax mov ecx, 100 div ecx invoke wsprintf, addr strBuff, lpStr("%d %% "), eax invoke SendMessage, [edi].hStatic, WM_SETTEXT, 0, addr strBuff invoke ShowWindow, [edi].hStatic, SW_HIDE invoke ShowWindow, [edi].hStatic, SW_SHOW ret .elseif (uMsg == GM_SETBARCOLOR) invoke SendMessage, [edi].hProgress, PBM_SETBARCOLOR, 0, lParam ret .elseif (uMsg == GM_SETBKCOLOR) invoke SendMessage, [edi].hProgress, PBM_SETBKCOLOR, 0, lParam ret .elseif (uMsg == GM_SETPOS) invoke SendMessage, [edi].hProgress, PBM_SETPOS, wParam, 0 invoke SendMessage, [edi].hProgress, PBM_GETPOS, 0, 0 imul eax, 100 push eax invoke SendMessage, [edi].hProgress, PBM_GETRANGE, FALSE, 0 xor edx, edx pop eax mov ecx, 100 div ecx invoke wsprintf, addr strBuff, lpStr("%d %% "), eax invoke SendMessage, [edi].hStatic, WM_SETTEXT, 0, addr strBuff invoke ShowWindow, [edi].hStatic, SW_HIDE invoke ShowWindow, [edi].hStatic, SW_SHOW ret .elseif (uMsg == GM_SETRANGE) invoke SendMessage, [edi].hProgress, PBM_SETRANGE32, wParam, lParam ret .elseif (uMsg == GM_SETSTEP) invoke SendMessage, [edi].hProgress, PBM_SETSTEP, wParam, 0 ret .elseif (uMsg == GM_SETTEXTCOLOR) mov eax, lParam mov [edi].TextColor, eax ret .elseif (uMsg == GM_SETBKTEXTCOLOR) mov eax, lParam mov [edi].TextBgColor, eax ret .elseif (uMsg == WM_CTLCOLORSTATIC) mov eax, lParam .if (eax == [edi].hStatic) .if ([edi].TextBgColor == BG_TRANSPARENT) invoke SetBkMode, wParam,TRANSPARENT .else invoke SetBkColor, wParam, [edi].TextBgColor .endif invoke SetTextColor, wParam, [edi].TextColor invoke GetStockObject, NULL_BRUSH ret .endif .elseif (uMsg == GM_DESTROY) invoke DestroyWindow, [edi].hProgress invoke DestroyWindow, [edi].hStatic invoke SetWindowLong, hWin,GWL_WNDPROC, [edi].dwWinProc invoke VirtualFree, edi, sizeof GAUGE, MEM_RELEASE ret .endif push lParam push wParam push uMsg push hWin mov eax, [edi].dwWinProc call eax Ret HookGaugeCallback EndP FTPConnect proc Server : DWORD, User : DWORD, Password : DWORD, Port : DWORD LOCAL hInternet : DWORD LOCAL hConnect : DWORD LOCAL Find : WIN32_FIND_DATA LOCAL W : DWORD invoke InternetOpen, lpStr("UtilFTP"), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0 mov hInternet, eax invoke InternetConnect, eax, Server, Port, User, Password, INTERNET_SERVICE_FTP, NULL, NULL Ret FTPConnect EndP FTPUpload proc hConnect : DWORD, lpFrom : DWORD, lpTo : DWORD invoke FtpPutFile, hConnect,lpFrom, lpTo, FTP_TRANSFER_TYPE_ASCII, 0 Ret FTPUpload EndP FTPClose proc hConnect : DWORD invoke InternetCloseHandle, hConnect Ret FTPClose EndP FTPDownload proc hConnect : DWORD, lpFrom : DWORD, lpTo : DWORD invoke FtpGetFile, hConnect, lpFrom, lpTo, FALSE, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII, NULL Ret FTPDownload EndP RemoteReadFile proc lpLink : DWORD, dwSize: DWORD LOCAL hConnect : DWORD LOCAL W : DWORD invoke InternetOpen, lpStr("UtilFTP"), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0 invoke InternetOpenUrl, eax, lpLink, lpStr("Accept: */*\r\n\r\n"), 19, INTERNET_FLAG_DONT_CACHE, NULL mov hConnect, eax mov eax, dwSize invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE mov esi, eax invoke InternetReadFile, hConnect, esi, dwSize, addr W invoke InternetCloseHandle, hConnect mov eax, esi Ret RemoteReadFile EndP RemoteGetFileChunk proc lpLink : DWORD, dwSize : DWORD, ChunkAt : DWORD LOCAL hConnect : DWORD LOCAL W: DWORD invoke InternetOpen, lpStr("UtilFTP"), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0 invoke InternetOpenUrl, eax, lpLink, lpStr("Accept: */*\r\n\r\n"), 19, INTERNET_FLAG_DONT_CACHE, NULL mov hConnect, eax mov eax, dwSize invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE mov esi, eax invoke InternetSetFilePointer, hConnect, ChunkAt, NULL, FILE_BEGIN, NULL invoke InternetReadFile, hConnect, esi, dwSize, addr W invoke InternetCloseHandle, hConnect mov eax, esi Ret RemoteGetFileChunk EndP ReadFileChunk proc lpFileName : DWORD, dwSize : DWORD, dwChunk : DWORD LOCAL hFile : DWORD LOCAL Written : DWORD invoke CreateFile, lpFileName, GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax invoke SetFilePointer, hFile, dwChunk, NULL, FILE_BEGIN invoke VirtualAlloc, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE xchg esi, eax invoke ReadFile, hFile, esi, dwSize, addr Written, NULL invoke CloseHandle, hFile xchg esi, eax Ret ReadFileChunk EndP IsValidPE proc lpFileName : DWORD LOCAL hFile : DWORD LOCAL W : DWORD LOCAL DOSHeader : IMAGE_DOS_HEADER LOCAL NTHeaders : IMAGE_NT_HEADERS invoke CreateFile, lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax invoke ReadFile, hFile, addr DOSHeader, sizeof IMAGE_DOS_HEADER, addr W, NULL invoke SetFilePointer, hFile, DOSHeader.e_lfanew, NULL, FILE_BEGIN invoke ReadFile, hFile, addr NTHeaders, sizeof IMAGE_NT_HEADERS, addr W, NULL invoke CloseHandle, hFile .if (NTHeaders.Signature == IMAGE_NT_SIGNATURE) mov eax, TRUE .else mov eax, FALSE .endif Ret IsValidPE EndP GetDOSHeader proc lpFileName : DWORD LOCAL hFile : DWORD LOCAL W : DWORD invoke CreateFile, lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax invoke VirtualAlloc, NULL, sizeof IMAGE_DOS_HEADER, MEM_COMMIT, PAGE_READWRITE mov esi, eax invoke ReadFile, hFile, esi, sizeof IMAGE_DOS_HEADER, addr W, NULL invoke CloseHandle, hFile mov eax, esi Ret GetDOSHeader EndP GetNTHeaders proc lpFileName : DWORD LOCAL hFile : DWORD LOCAL Written : DWORD LOCAL DOSHeader : IMAGE_DOS_HEADER LOCAL W : DWORD invoke CreateFile, lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax invoke ReadFile, hFile, addr DOSHeader, sizeof IMAGE_DOS_HEADER, addr W, NULL invoke SetFilePointer, hFile, DOSHeader.e_lfanew, NULL, FILE_BEGIN invoke VirtualAlloc, NULL, sizeof IMAGE_NT_HEADERS, MEM_COMMIT, PAGE_READWRITE mov esi, eax invoke ReadFile, hFile, esi, sizeof IMAGE_NT_HEADERS, addr W, NULL invoke CloseHandle, hFile mov eax, esi Ret GetNTHeaders EndP GetEntryPoint proc lpFileName : DWORD invoke GetNTHeaders, lpFileName assume eax : ptr IMAGE_NT_HEADERS mov eax, [eax].OptionalHeader.ImageBase add eax, [eax].OptionalHeader.AddressOfEntryPoint Ret GetEntryPoint EndP GetOptionalHeaderObject proc lpFileName : DWORD, dwType : DWORD invoke GetNTHeaders, lpFileName assume eax : ptr IMAGE_NT_HEADERS .if (dwType == OPTIONAL_GET_MAGIC) movzx esi, [eax].OptionalHeader.Magic .elseif (dwType == OPTIONAL_GET_MAJORLINKVER) movzx esi, [eax].OptionalHeader.MajorLinkerVersion .elseif (dwType == OPTIONAL_GET_MINORLINKVER) movzx esi, [eax].OptionalHeader.MinorLinkerVersion .elseif (dwType == OPTIONAL_GET_SIZEOFCODE) mov eax, [eax].OptionalHeader.SizeOfCode .elseif (dwType == OPTIONAL_GET_SIZEOFINITDATA) mov eax, [eax].OptionalHeader.SizeOfInitializedData .elseif (dwType == OPTIONAL_GET_SIZEOFUINITDATA) mov eax, [eax].OptionalHeader.SizeOfUninitializedData .elseif (dwType == OPTIONAL_GET_ADDROFEP) mov eax, [eax].OptionalHeader.AddressOfEntryPoint ret .elseif (dwType == OPTIONAL_GET_BASEOFCODE) mov eax, [eax].OptionalHeader.BaseOfCode .elseif (dwType == OPTIONAL_GET_BASEOFDATA) mov eax, [eax].OptionalHeader.BaseOfData .elseif (dwType == OPTIONAL_GET_IMAGEBASE) mov eax, [eax].OptionalHeader.ImageBase .elseif (dwType == OPTIONAL_GET_SECTIONALIGN) mov eax, [eax].OptionalHeader.SectionAlignment .elseif (dwType == OPTIONAL_GET_FILEALIGN) mov eax, [eax].OptionalHeader.FileAlignment .elseif (dwType == OPTIONAL_GET_MAJOROSVER) movzx esi, [eax].OptionalHeader.MajorOperatingSystemVersion .elseif (dwType == OPTIONAL_GET_MINOROSVER) movzx esi, [eax].OptionalHeader.MinorOperatingSystemVersion .elseif (dwType == OPTIONAL_GET_MAJORSUBSYSVER) movzx esi, [eax].OptionalHeader.MajorSubsystemVersion .elseif (dwType == OPTIONAL_GET_MINORSUBSYSVER) movzx esi, [eax].OptionalHeader.MinorSubsystemVersion .elseif (dwType == OPTIONAL_GET_WIN32VERVALUE) mov eax, [eax].OptionalHeader.Win32VersionValue .elseif (dwType == OPTIONAL_GET_SIZEOFIMAGE) mov eax, [eax].OptionalHeader.SizeOfImage .elseif (dwType == OPTIONAL_GET_SIZEOFHEADERS) mov eax, [eax].OptionalHeader.SizeOfHeaders .elseif (dwType == OPTIONAL_GET_CHECKSUM) mov eax, [eax].OptionalHeader.CheckSum .elseif (dwType == OPTIONAL_GET_SUBSYSTEM) movzx esi, [eax].OptionalHeader.Subsystem .elseif (dwType == OPTIONAL_GET_DLLCHARAC) movzx esi, [eax].OptionalHeader.DllCharacteristics .elseif (dwType == OPTIONAL_GET_SIZEOFSTACKRES) mov eax, [eax].OptionalHeader.SizeOfStackReserve .elseif (dwType == OPTIONAL_GET_SIZEOFSTACKCOM) mov eax, [eax].OptionalHeader.SizeOfStackCommit .elseif (dwType == OPTIONAL_GET_SIZEOFHEAPRES) mov eax, [eax].OptionalHeader.SizeOfHeapReserve .elseif (dwType == OPTIONAL_GET_SIZEOFHEAPCOM) mov eax, [eax].OptionalHeader.SizeOfHeapCommit .elseif (dwType == OPTIONAL_GET_LOADERFLAG) mov eax, [eax].OptionalHeader.LoaderFlags .elseif (dwType == OPTIONAL_GET_NUMBERRVASIZES) mov eax, [eax].OptionalHeader.NumberOfRvaAndSizes .endif Ret GetOptionalHeaderObject EndP GetNumberOfSections proc lpFileName : DWORD invoke GetNTHeaders, lpFileName assume eax : ptr IMAGE_NT_HEADERS movzx eax, [eax].FileHeader.NumberOfSections Ret GetNumberOfSections EndP ListSections proc lpFileName : DWORD, dwCallback : DWORD, lParam : DWORD LOCAL hFile : DWORD LOCAL SecHeader : IMAGE_SECTION_HEADER LOCAL W: DWORD invoke GetNTHeaders, lpFileName mov edi, eax invoke CreateFile, lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL mov hFile, eax assume edi : ptr IMAGE_NT_HEADERS invoke GetDOSHeader, lpFileName assume eax : ptr IMAGE_DOS_HEADER invoke SetFilePointer, hFile, [eax].e_lfanew, 0, FILE_BEGIN invoke SetFilePointer, hFile, sizeof IMAGE_NT_HEADERS, NULL, FILE_CURRENT xor ebx, ebx movzx ebx, [edi].FileHeader.NumberOfSections .while (ebx > 0) pushad invoke ReadFile, hFile, addr SecHeader, sizeof IMAGE_SECTION_HEADER, addr W, NULL invoke VirtualAlloc, NULL, sizeof IMAGE_SECTION_HEADER+1, MEM_COMMIT, PAGE_READWRITE mov esi, eax invoke RtlMoveMemory, esi, addr SecHeader, sizeof IMAGE_SECTION_HEADER push lParam push esi call dwCallback invoke SetFilePointer, hFile, sizeof IMAGE_SECTION_HEADER, NULL, FILE_CURRENT popad dec ebx .endw Ret ListSections EndP ProcExists proc pName :DWORD LOCAL hSnap : HANDLE LOCAL PE32 : PROCESSENTRY32 invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS, NULL mov hSnap, eax mov PE32.dwSize, sizeof PE32 invoke Process32First, hSnap, addr PE32 .while (eax == TRUE) invoke lstrcmp, addr PE32.szExeFile, pName .if (eax == 0) mov eax, TRUE ret .endif invoke Process32Next, hSnap, addr PE32 .endw mov eax, FALSE Ret ProcExists EndP GetPIDbyName proc pName : DWORD LOCAL hSnap : DWORD LOCAL pS : PROCESSENTRY32 invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS, 0 mov hSnap, eax mov pS.dwSize, sizeof pS invoke Process32First, hSnap, addr pS .while (eax == TRUE) invoke lstrcmp, addr pS.szExeFile, pName .if (eax == 0) mov eax, [pS.th32ProcessID] ret .endif invoke Process32Next, hSnap, addr pS .endw mov eax, 0 ret GetPIDbyName EndP SeDebugPrivilege proc LOCAL hToken : HANDLE LOCAL tokenPrivs :TOKEN_PRIVILEGES call GetCurrentProcess mov ebx, eax invoke OpenProcessToken, ebx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken invoke LookupPrivilegeValue,0, lpStr("SeDebugPrivilege"),addr tokenPrivs.Privileges[0].Luid mov tokenPrivs.PrivilegeCount, 1 mov tokenPrivs.Privileges[0].Attributes, SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges, hToken, FALSE, addr tokenPrivs, sizeof tokenPrivs, NULL, NULL invoke CloseHandle, hToken Ret SeDebugPrivilege EndP TimeGetYear proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wYear Ret TimeGetYear EndP TimeGetMonth proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wMonth Ret TimeGetMonth EndP TimeGetWeekDay proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wDayOfWeek Ret TimeGetWeekDay EndP TimeGetDay proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wDay Ret TimeGetDay EndP TimeGetHour proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wHour Ret TimeGetHour EndP TimeGetMinute proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wMinute Ret TimeGetMinute EndP TimeGetSecond proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wSecond Ret TimeGetSecond EndP TimeGetMillisecond proc LOCAL S: SYSTEMTIME invoke GetLocalTime, addr S movzx eax, S.wMilliseconds Ret TimeGetMillisecond EndP ShowTaskbar proc bBoolean : BOOL invoke FindWindow, lpStr("Shell_TrayWnd"), NULL .if (bBoolean == FALSE) invoke ShowWindow, eax, SW_HIDE .elseif (bBoolean == TRUE) invoke ShowWindow, eax, SW_SHOW .endif Ret ShowTaskbar EndP StrToInt proc lpNumber : DWORD mov esi, lpNumber invoke lstrlen, esi mov ecx, eax xor edx, edx xor ebx, ebx .while (ebx < ecx) mov al, byte ptr ds:[esi+ebx] .if (ebx > 0) imul edx, 10 .endif sub al, 48 movzx eax, al add edx, eax inc ebx .endw mov eax, edx Ret StrToInt EndP UpperCase proc lpString : DWORD LOCAL pText : DWORD mov esi, lpString invoke lstrlen, esi mov ecx, eax xor edx, edx xor ebx, ebx pushad inc ecx invoke VirtualAlloc, NULL, ecx, MEM_COMMIT, PAGE_READWRITE mov pText, eax popad .while (ebx < ecx) mov al, byte ptr ds:[esi+ebx] .if (al >= 97 && al <= 122) sub al, 32 .endif mov edx, pText mov byte ptr ds:[edx+ebx], al inc ebx .endw mov eax, pText Ret UpperCase EndP SmallerCase proc lpString : DWORD LOCAL pText : DWORD mov esi, lpString invoke lstrlen, esi mov ecx, eax xor edx, edx xor ebx, ebx pushad inc ecx invoke VirtualAlloc, NULL, ecx, MEM_COMMIT, PAGE_READWRITE mov pText, eax popad .while (ebx < ecx) mov al, byte ptr ds:[esi+ebx] .if (al >= 65 && al <= 90) add al, 32 .endif mov edx, pText mov byte ptr ds:[edx+ebx], al inc ebx .endw mov eax, pText Ret SmallerCase EndP AsciiToUnicode proc lpString : DWORD LOCAL pText : DWORD mov esi, lpString invoke lstrlen, esi mov ecx, eax xor edx, edx xor ebx, ebx pushad imul eax, 2 inc eax mov ecx, eax invoke VirtualAlloc, NULL, ecx, MEM_COMMIT, PAGE_READWRITE mov pText, eax popad .while (ebx < ecx) movzx ax, byte ptr ds:[esi+ebx] pushad mov edx, pText imul ebx, 2 mov word ptr ds:[edx+ebx], ax popad inc ebx .endw mov eax, pText Ret AsciiToUnicode EndP UnicodeToAscii proc lpString : DWORD LOCAL pText : DWORD mov esi, lpString invoke lstrlenW, lpString mov ecx, 2 idiv ecx mov ecx, eax xor edx, edx xor ebx, ebx pushad inc ecx invoke VirtualAlloc, NULL, ecx, MEM_COMMIT, PAGE_READWRITE mov pText, eax popad .while (ebx < ecx) pushad mov edx, pText imul ecx, 2 popad mov al, byte ptr ds:[esi+ebx] mov byte ptr ds:[edx+ecx], al inc ecx .endw mov eax, pText Ret UnicodeToAscii EndP ;____________________________________________________________________________________________________________________________ ; MD5hash : hashes a string using the md5 algorithm ; Credits: roy|fleur ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ MD5RESULT STRUCT dtA dd ? dtB dd ? dtC dd ? dtD dd ? MD5RESULT ENDS FF MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + F(b,c,d) + x + t) << s ) mov eax,dtb mov ebx,dtc mov ecx,dtd and ebx,eax not eax and eax,ecx or eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM GG MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + G(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; G(x,y,z) = (x and z) or (y and (not z)) and eax,ecx not ecx and ecx,ebx or eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM HH MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + H(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; H(x,y,z) = x xor y xor z xor eax,ebx xor eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM II MACRO dta,dtb,dtc,dtd,x,s,t ; a = b + ((a + I(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; I(x,y,z) = y xor (x or (not z)) not ecx or eax,ecx xor eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb mov dta,eax ENDM .code MD5hash proc uses eax ebx ecx edx edi esi,ptBuffer:dword,dtBufferLength:dword,ptMD5Result:dword local dta:dword,dtb:dword,dtc:dword,dtd:dword ; phase I · padding mov edi,ptBuffer mov eax,dtBufferLength inc eax add edi,eax mov byte ptr [edi-1],080h xor edx,edx mov ebx,64 div ebx neg edx add edx,64 cmp edx,8 jae @f add edx,64 @@: mov ecx,edx xor al,al rep stosb mov eax,dtBufferLength inc edx add dtBufferLength,edx xor edx,edx mov ebx,8 mul ebx mov dword ptr [edi-8],eax mov dword ptr [edi-4],edx mov edx,dtBufferLength mov edi,ptBuffer ; phase II · chaining variables initialization mov esi,ptMD5Result assume esi:ptr MD5RESULT mov [esi].dtA,067452301h mov [esi].dtB,0efcdab89h mov [esi].dtC,098badcfeh mov [esi].dtD,010325476h ; phase III · hashing hashloop: mov eax,[esi].dtA mov dta,eax mov eax,[esi].dtB mov dtb,eax mov eax,[esi].dtC mov dtc,eax mov eax,[esi].dtD mov dtd,eax ; round 1 FF dta,dtb,dtc,dtd,dword ptr [edi+00*4],07,0d76aa478h FF dtd,dta,dtb,dtc,dword ptr [edi+01*4],12,0e8c7b756h FF dtc,dtd,dta,dtb,dword ptr [edi+02*4],17,0242070dbh FF dtb,dtc,dtd,dta,dword ptr [edi+03*4],22,0c1bdceeeh FF dta,dtb,dtc,dtd,dword ptr [edi+04*4],07,0f57c0fafh FF dtd,dta,dtb,dtc,dword ptr [edi+05*4],12,04787c62ah FF dtc,dtd,dta,dtb,dword ptr [edi+06*4],17,0a8304613h FF dtb,dtc,dtd,dta,dword ptr [edi+07*4],22,0fd469501h FF dta,dtb,dtc,dtd,dword ptr [edi+08*4],07,0698098d8h FF dtd,dta,dtb,dtc,dword ptr [edi+09*4],12,08b44f7afh FF dtc,dtd,dta,dtb,dword ptr [edi+10*4],17,0ffff5bb1h FF dtb,dtc,dtd,dta,dword ptr [edi+11*4],22,0895cd7beh FF dta,dtb,dtc,dtd,dword ptr [edi+12*4],07,06b901122h FF dtd,dta,dtb,dtc,dword ptr [edi+13*4],12,0fd987193h FF dtc,dtd,dta,dtb,dword ptr [edi+14*4],17,0a679438eh FF dtb,dtc,dtd,dta,dword ptr [edi+15*4],22,049b40821h ; round 2 GG dta,dtb,dtc,dtd,dword ptr [edi+01*4],05,0f61e2562h GG dtd,dta,dtb,dtc,dword ptr [edi+06*4],09,0c040b340h GG dtc,dtd,dta,dtb,dword ptr [edi+11*4],14,0265e5a51h GG dtb,dtc,dtd,dta,dword ptr [edi+00*4],20,0e9b6c7aah GG dta,dtb,dtc,dtd,dword ptr [edi+05*4],05,0d62f105dh GG dtd,dta,dtb,dtc,dword ptr [edi+10*4],09,002441453h GG dtc,dtd,dta,dtb,dword ptr [edi+15*4],14,0d8a1e681h GG dtb,dtc,dtd,dta,dword ptr [edi+04*4],20,0e7d3fbc8h GG dta,dtb,dtc,dtd,dword ptr [edi+09*4],05,021e1cde6h GG dtd,dta,dtb,dtc,dword ptr [edi+14*4],09,0c33707d6h GG dtc,dtd,dta,dtb,dword ptr [edi+03*4],14,0f4d50d87h GG dtb,dtc,dtd,dta,dword ptr [edi+08*4],20,0455a14edh GG dta,dtb,dtc,dtd,dword ptr [edi+13*4],05,0a9e3e905h GG dtd,dta,dtb,dtc,dword ptr [edi+02*4],09,0fcefa3f8h GG dtc,dtd,dta,dtb,dword ptr [edi+07*4],14,0676f02d9h GG dtb,dtc,dtd,dta,dword ptr [edi+12*4],20,08d2a4c8ah ; round 3 HH dta,dtb,dtc,dtd,dword ptr [edi+05*4],04,0fffa3942h HH dtd,dta,dtb,dtc,dword ptr [edi+08*4],11,08771f681h HH dtc,dtd,dta,dtb,dword ptr [edi+11*4],16,06d9d6122h HH dtb,dtc,dtd,dta,dword ptr [edi+14*4],23,0fde5380ch HH dta,dtb,dtc,dtd,dword ptr [edi+01*4],04,0a4beea44h HH dtd,dta,dtb,dtc,dword ptr [edi+04*4],11,04bdecfa9h HH dtc,dtd,dta,dtb,dword ptr [edi+07*4],16,0f6bb4b60h HH dtb,dtc,dtd,dta,dword ptr [edi+10*4],23,0bebfbc70h HH dta,dtb,dtc,dtd,dword ptr [edi+13*4],04,0289b7ec6h HH dtd,dta,dtb,dtc,dword ptr [edi+00*4],11,0eaa127fah HH dtc,dtd,dta,dtb,dword ptr [edi+03*4],16,0d4ef3085h HH dtb,dtc,dtd,dta,dword ptr [edi+06*4],23,004881d05h HH dta,dtb,dtc,dtd,dword ptr [edi+09*4],04,0d9d4d039h HH dtd,dta,dtb,dtc,dword ptr [edi+12*4],11,0e6db99e5h HH dtc,dtd,dta,dtb,dword ptr [edi+15*4],16,01fa27cf8h HH dtb,dtc,dtd,dta,dword ptr [edi+02*4],23,0c4ac5665h ; round 4 II dta,dtb,dtc,dtd,dword ptr [edi+00*4],06,0f4292244h II dtd,dta,dtb,dtc,dword ptr [edi+07*4],10,0432aff97h II dtc,dtd,dta,dtb,dword ptr [edi+14*4],15,0ab9423a7h II dtb,dtc,dtd,dta,dword ptr [edi+05*4],21,0fc93a039h II dta,dtb,dtc,dtd,dword ptr [edi+12*4],06,0655b59c3h II dtd,dta,dtb,dtc,dword ptr [edi+03*4],10,08f0ccc92h II dtc,dtd,dta,dtb,dword ptr [edi+10*4],15,0ffeff47dh II dtb,dtc,dtd,dta,dword ptr [edi+01*4],21,085845dd1h II dta,dtb,dtc,dtd,dword ptr [edi+08*4],06,06fa87e4fh II dtd,dta,dtb,dtc,dword ptr [edi+15*4],10,0fe2ce6e0h II dtc,dtd,dta,dtb,dword ptr [edi+06*4],15,0a3014314h II dtb,dtc,dtd,dta,dword ptr [edi+13*4],21,04e0811a1h II dta,dtb,dtc,dtd,dword ptr [edi+04*4],06,0f7537e82h II dtd,dta,dtb,dtc,dword ptr [edi+11*4],10,0bd3af235h II dtc,dtd,dta,dtb,dword ptr [edi+02*4],15,02ad7d2bbh II dtb,dtc,dtd,dta,dword ptr [edi+09*4],21,0eb86d391h mov eax,dta add [esi].dtA,eax mov eax,dtb add [esi].dtB,eax mov eax,dtc add [esi].dtC,eax mov eax,dtd add [esi].dtD,eax add edi,64 sub edx,64 jnz hashloop ; phase IV · results mov ecx,4 @@: mov eax,dword ptr [esi] xchg al,ah rol eax,16 xchg al,ah mov dword ptr [esi],eax add esi,4 loop @b ret MD5hash endp