?? gui.asm
字號:
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
.const
WM_FINISH equ WM_USER+100h
WM_SHELLNOTIFY equ WM_USER+5
IDI_TRAY equ 0
IDM_RESTORE equ 1000
IDM_EXIT equ 1010
DLG_ABOUT equ 1200 ;dialog - about
ID_ABOUT_OK equ 1201
ID_EMAIL equ 1202
ID_HOMEPAGE equ 1203
IDC_HANDLE equ 101
IDI_MAIN equ 500
IDM_MAIN equ 600
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
IpbClassName db "IPBKG",0 ;the name of our window class
EditClassName db "EDIT",0
LabelClassName db "STATIC",0
ButtonClassName db "BUTTON",0
striPB db "inside Pandora's Box - iPB",0
strFont db "MS Sans Serif",0
outFrt db "%8X",0
strlblName db "Input file name to unpack:",0
strlblAuthor db "fORGAT/iPB",0
strbtnBrowse db "Browse",0
strbtnUnpack db "Unpack",0
strbtnAbout db "About",0
RestoreString db "&Restore",0
ExitString db "E&xit Program",0
szHomePage db "http://ipbchina.org/",0
szEmail db "mailto:forgat@yeah.net",0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AppName db " DeArmor For Hying's PE-Armor v0.46x ",0 ; the name of our window
ofn OPENFILENAME <>
FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0
db "All Files",0,"*.*",0,0
UnpackOK db " Success unpacked!",0
strWarn db "Please backup your file if you are not sure",0
strbak db '.BAK',0
strtmp db '.TMP',0
curdir db 260 dup (0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data?
note NOTIFYICONDATA <>
hPopupMenu dd ?
hEditName dd ?
btnBrowse dd ?
btnUnpack dd ?
btnAbout dd ?
hwnd dd ?
hedit dd ?
hCursor dd ?
hWinDialog dd ?
idActiveDialog dd ? ;當(dāng)前激活的對話框
hInstance HINSTANCE ? ; Instance handle of our program
CommandLine LPSTR ?
InFileName db 512 dup(?)
BakFileName db 512 dup(?)
TmpFileName db 512 dup(?)
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, hInstance,NULL,NULL, SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_CLASSDC or CS_PARENTDC or CS_DBLCLKS
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET IpbClassName
invoke LoadIcon,hInstance,IDI_MAIN ;IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL,\
ADDR IpbClassName,\
ADDR AppName,\
WS_VISIBLE+WS_SYSMENU+WS_MINIMIZEBOX,\
193,150,352,260,
NULL,\
NULL,\
hInst,\
NULL
mov hwnd,eax
invoke LoadCursor,hInstance,IDC_HANDLE
mov hCursor,eax
.while TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.endw
mov eax,msg.wParam
ret
WinMain endp
_CenterWindow proc hWnd:DWORD
local @stRectDeskTop:RECT,@stRectWin:RECT
local @dwWidth:DWORD,@dwHeight:DWORD
invoke GetWindowRect,hWnd,addr @stRectWin
invoke GetDesktopWindow
mov ebx,eax
invoke GetWindowRect,ebx,addr @stRectDeskTop
mov eax,@stRectWin.bottom
sub eax,@stRectWin.top
mov @dwHeight,eax
mov eax,@stRectWin.right
sub eax,@stRectWin.left
mov @dwWidth,eax
mov ebx,@stRectDeskTop.bottom
sub ebx,@dwHeight
shr ebx,1
mov ecx,@stRectDeskTop.right
sub ecx,@dwWidth
shr ecx,1
invoke MoveWindow,hWnd,ecx,ebx,@dwWidth,@dwHeight,FALSE
ret
_CenterWindow endp
; #########################################################################
HyperLinkProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,uMsg
.if eax ==WM_LBUTTONUP
invoke GetDlgCtrlID,hWnd
.if eax == ID_HOMEPAGE
invoke ShellExecute,0,0,offset szHomePage,0,0,0
.elseif eax == ID_EMAIL
invoke ShellExecute,0,0,offset szEmail,0,0,0
.endif
.elseif eax == WM_NCHITTEST
;將 WM_NCHITTEST 返回 TRUE 可以接收鼠標(biāo)動作,實現(xiàn)按下功能 !
.elseif eax == WM_SETCURSOR
invoke SetCursor,hCursor
.else
invoke GetWindowLong,hWnd,GWL_USERDATA
invoke CallWindowProc,eax,hWnd,uMsg,wParam,lParam
ret
.endif
mov eax,TRUE
ret
HyperLinkProc endp
DialogMainProc proc uses ebx edi esi, \
hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
local @stWindow:RECT
local @dwWidth:DWORD,@dwHeight:DWORD
local @hWinTemp:DWORD
local @stFont:LOGFONT,@hFont:DWORD
mov eax,uMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
mov eax,hWnd
mov hWinDialog,eax
invoke _CenterWindow,hWnd
mov eax,lParam
mov idActiveDialog,eax
invoke GetDlgItem,hWnd,ID_HOMEPAGE
mov @hWinTemp,eax
invoke SetWindowLong,@hWinTemp,GWL_WNDPROC,addr HyperLinkProc
invoke SetWindowLong,@hWinTemp,GWL_USERDATA,eax
invoke GetDlgItem,hWnd,ID_EMAIL
mov @hWinTemp,eax
invoke SetWindowLong,@hWinTemp,GWL_WNDPROC,addr HyperLinkProc
invoke SetWindowLong,@hWinTemp,GWL_USERDATA,eax
.elseif eax == WM_CTLCOLORSTATIC
invoke GetDlgCtrlID,lParam
.if eax == ID_HOMEPAGE || eax == ID_EMAIL
invoke SendMessage,lParam,WM_GETFONT,0,0
mov @hFont,eax
invoke GetObject,@hFont,sizeof LOGFONT,addr @stFont
mov @stFont.lfUnderline,TRUE
invoke CreateFontIndirect,addr @stFont
mov @hFont,eax
invoke SelectObject,wParam,eax
invoke SetTextColor,wParam,Blue
invoke GetSysColor,COLOR_MENU
invoke SetBkColor,wParam,eax
;********************************************************************
; 注意此處一定要把StockOject的返回值返回,否則無法顯示顏色
;********************************************************************
invoke GetStockObject,HOLLOW_BRUSH
.else
mov eax,FALSE
ret
.endif
ret
.elseif eax == WM_COMMAND
mov eax,wParam
;********************************************************************
.if eax == ID_ABOUT_OK
invoke EndDialog,hWnd,NULL
.endif
;********************************************************************
; 注意:對話框的消息處理后,要返回 TRUE,對沒有處理的消息
; 要返回 FALSE
;********************************************************************
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DialogMainProc endp
;顯示關(guān)于信息
ShowAbout proc
invoke DialogBoxParam,hInstance,DLG_ABOUT,\
hwnd,offset DialogMainProc,DLG_ABOUT
ret
ShowAbout endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL pt:POINT
LOCAL hFont1:HFONT
LOCAL PaintDC:HDC
LOCAL PaintStruct:PAINTSTRUCT
.if uMsg==WM_CREATE
;創(chuàng)建圖像
invoke CreateWindowEx,0, ADDR LabelClassName,NULL, WS_VISIBLE or WS_CHILD or SS_BITMAP,
2,2,350,110, hWnd, 0, hInstance, NULL;
mov hedit,eax
invoke LoadBitmap,hInstance,IDM_MAIN
invoke SendMessage,hedit,STM_SETIMAGE,IMAGE_BITMAP,eax
invoke CreateFont,-11,0,0,0,0,0,0,0,DEFAULT_CHARSET,0,0,0,0,ADDR strFont
mov hFont1,eax
;創(chuàng)建標(biāo)簽
invoke CreateWindowEx,0, ADDR LabelClassName,ADDR strlblAuthor,\ ;下面顯示Cracker信息
WS_VISIBLE or WS_CHILD or SS_LEFT or WS_DISABLED,\
255,200,109,15,hWnd,8,hInstance,NULL
;invoke SendMessage,eax,WM_SETFONT,hFont1,0
invoke CreateWindowEx,0, ADDR LabelClassName,ADDR strlblName,\ ;下面顯示Name提示信息
WS_CHILD or WS_VISIBLE or ES_LEFT or ES_AUTOHSCROLL,\
10,130,200,15,hWnd,8,hInstance,NULL
invoke SendMessage,eax,WM_SETFONT,hFont1,0
;創(chuàng)建編輯框
invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,ADDR strWarn,\
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
ES_AUTOHSCROLL,\
10,145,330,23,hWnd,8,hInstance,NULL
mov hEditName,eax
invoke SendMessage,eax,WM_SETFONT,hFont1,0
;下面創(chuàng)建命令按鈕
invoke CreateWindowEx,0,ADDR ButtonClassName,ADDR strbtnBrowse,\
WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_TABSTOP or BS_FLAT,
30,175,62,22, hWnd, 0, hInstance, NULL;
mov btnBrowse,eax
invoke SendMessage,eax,WM_SETFONT,hFont1,0
invoke CreateWindowEx,0,ADDR ButtonClassName,ADDR strbtnUnpack,\
WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_TABSTOP or BS_FLAT,
110,175,62,22, hWnd, 0, hInstance, NULL;
mov btnUnpack,eax
invoke SendMessage,eax,WM_SETFONT,hFont1,0
invoke CreateWindowEx,0,ADDR ButtonClassName,ADDR strbtnAbout,\
WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_TABSTOP or BS_FLAT,
190,175,62,22, hWnd, 0, hInstance, NULL;
mov btnAbout,eax
invoke SendMessage,eax,WM_SETFONT,hFont1,0
invoke ShowWindow, hWnd,NULL ; display our window on desktop
invoke UpdateWindow, hWnd ; refresh the client area
invoke CreatePopupMenu
mov hPopupMenu,eax
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString
.elseif uMsg==WM_PAINT
invoke BeginPaint,hWnd,ADDR PaintStruct
mov PaintDC,eax
invoke MoveToEx,PaintDC,5,107,NULL
invoke LineTo,PaintDC,343,107
invoke MoveToEx,PaintDC,9,109,NULL
invoke LineTo,PaintDC,341,109
invoke CreateFont,-11,0,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,0,0,0,0,ADDR strFont
mov hFont1,eax
invoke SelectObject,PaintDC,hFont1
invoke GetSysColor,COLOR_BTNFACE
invoke SetBkColor,PaintDC,eax
RGB 033H,099H,033H
invoke SetTextColor,PaintDC,eax
invoke TextOut,PaintDC,100,110,ADDR striPB,26
invoke MoveToEx,PaintDC,8,125,NULL
invoke LineTo,PaintDC,341,125
invoke MoveToEx,PaintDC,5,127,NULL
invoke LineTo,PaintDC,343,127
;畫豎線
invoke MoveToEx,PaintDC,5,107,NULL
invoke LineTo,PaintDC,5,127
invoke MoveToEx,PaintDC,7,109,NULL
invoke LineTo,PaintDC,7,125
;
invoke MoveToEx,PaintDC,341,109,NULL
invoke LineTo,PaintDC,341,125
invoke MoveToEx,PaintDC,343,107,NULL
invoke LineTo,PaintDC,343,127
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.elseif uMsg == WM_COMMAND
mov eax,lParam
.if eax == btnUnpack
push offset InFileName
Call TouchFile
.elseif eax == btnAbout
Call ShowAbout
.elseif eax == btnBrowse
mov ofn.lStructSize,SIZEOF ofn
mov ofn.lpstrFilter, OFFSET FilterString
mov ofn.lpstrFile, OFFSET InFileName
mov ofn.nMaxFile,512
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, ADDR ofn
invoke SetWindowText,hEditName,ADDR InFileName
.endif
.elseif uMsg == WM_CLOSE ; for system close button
GetOutaHere:
invoke PostQuitMessage,NULL ; quit our application
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Default message processing
ret
.endif
xor eax,eax
ret
WndProc endp
end start
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -