⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.asm

📁 这是脱壳 PE-ARMOR 的程序源代码汇编的
💻 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 ?	;当前激活的对话框
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 可以接收鼠标动作,实现按下功能 !
		.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

;显示关于信息
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
            ;创建图像
            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    
            ;创建标签
            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                   
            ;创建编辑框
            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
            ;下面创建命令按钮
            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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -