Created
August 5, 2015 14:36
-
-
Save jmbrito01/94ebadf64d333f301ea5 to your computer and use it in GitHub Desktop.
A number of usefull functions and macros to help you work with intel x86 assembly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 <offset lText> | |
endM | |
lpStr MACRO Text : req | |
local lText | |
.data | |
lText db Text, 0 | |
.code | |
exitm <addr lText> | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment