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

📄 importdlg.asm

📁 汇编写的pe文件信息查看工具
💻 ASM
字号:



;初始化显示输入表列表控件
_Initlist1	proc	hWnd
		local	@stlvColumn:LVCOLUMN,@hList:DWORD
		invoke	RtlZeroMemory,addr @stlvColumn,sizeof @stlvColumn
		invoke	GetDlgItem,hWnd,IDC_LIST1_IMPORT
		mov	@hList,eax
		invoke	SendMessage,@hList,LVM_SETEXTENDEDLISTVIEWSTYLE,NULL,LVS_EX_FULLROWSELECT

		mov	@stlvColumn.imask,LVCF_FMT or LVCF_TEXT or LVCF_WIDTH or LVCF_SUBITEM
		mov	@stlvColumn.fmt,LVCFMT_LEFT
		mov	@stlvColumn.iSubItem,0 
		mov	@stlvColumn.lx,90									
		mov	@stlvColumn.pszText,OFFSET szDllName		
		invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTCOLUMN,0,addr @stlvColumn
		
		
		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.fmt,LVCFMT_LEFT 
		mov	@stlvColumn.lx,120
		mov	@stlvColumn.pszText,OFFSET szOriginal
		invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTCOLUMN,1,addr @stlvColumn

		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.lx,120
		mov	@stlvColumn.pszText,OFFSET szTime
		invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTCOLUMN,2,addr @stlvColumn

		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.lx,120
		mov	@stlvColumn.pszText,OFFSET szForward
		invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTCOLUMN,3,addr @stlvColumn

		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.lx,60
		mov	@stlvColumn.pszText,OFFSET szname
		invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTCOLUMN,4,addr @stlvColumn

		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.lx,85
		mov	@stlvColumn.pszText,OFFSET szFirst
		invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTCOLUMN,5,addr @stlvColumn
		ret
_Initlist1	endp
_Initlist2	proc	hWnd
		local	@stlvColumn:LVCOLUMN,@hList:DWORD
		invoke	RtlZeroMemory,addr @stlvColumn,sizeof @stlvColumn
		invoke	GetDlgItem,hWnd,IDC_LIST2_IMPORTFUN
		mov	@hList,eax
		invoke	SendMessage,@hList,LVM_SETEXTENDEDLISTVIEWSTYLE,NULL,LVS_EX_FULLROWSELECT

		mov	@stlvColumn.imask,LVCF_FMT or LVCF_TEXT or LVCF_WIDTH or LVCF_SUBITEM
		mov	@stlvColumn.fmt,LVCFMT_LEFT
		mov	@stlvColumn.iSubItem,0 
		mov	@stlvColumn.lx,100									
		mov	@stlvColumn.pszText,OFFSET szThunkRVA		
		invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_INSERTCOLUMN,0,addr @stlvColumn
		
		
		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.fmt,LVCFMT_LEFT 
		mov	@stlvColumn.lx,100
		mov	@stlvColumn.pszText,OFFSET szThunkValue
		invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_INSERTCOLUMN,1,addr @stlvColumn

		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.lx,100
		mov	@stlvColumn.pszText,OFFSET szHint
		invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_INSERTCOLUMN,2,addr @stlvColumn

		inc	@stlvColumn.iSubItem
		mov	@stlvColumn.lx,200
		mov	@stlvColumn.pszText,OFFSET szAPIName
		invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_INSERTCOLUMN,3,addr @stlvColumn

		ret
_Initlist2	endp

;显示输入表
_ShowImport	proc	hWnd,_lpFile,_lpPEHeader
		local	@stlvItem:LVITEM
		local	@szbuffer[1024]:byte
		pushad
		mov	esi,_lpPEHeader
		assume	esi:ptr IMAGE_NT_HEADERS
		mov	eax,[esi].OptionalHeader.DataDirectory[8].VirtualAddress
		.if !eax
		invoke	MessageBox,hWnd,addr szErrNoImport,NULL,MB_OK
		jmp	_ret
		.endif
		invoke	_RVAToOffset,_lpPEHeader,eax
		add	eax,_lpFile
		mov	esi,eax
		assume esi:ptr IMAGE_IMPORT_DESCRIPTOR
		.while	[esi].OriginalFirstThunk || [esi].TimeDateStamp || \
		           [esi].ForwarderChain || [esi].Name1 || [esi].FirstThunk
			invoke  _RVAToOffset,_lpPEHeader,[esi].Name1
			add	eax,_lpFile
			mov	ebx,eax
			invoke	RtlZeroMemory,addr @stlvItem,sizeof @stlvItem
			mov	@stlvItem.imask,LVIF_TEXT
			mov	@stlvItem.iItem,0

			mov	@stlvItem.pszText,ebx
			mov	@stlvItem.iSubItem,0
			invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_INSERTITEM,0,addr @stlvItem
			
			invoke	wsprintf,addr @szbuffer, offset szFmtHex,[esi].OriginalFirstThunk
			lea	ebx,@szbuffer
			mov	@stlvItem.pszText,ebx
			mov	@stlvItem.iSubItem,1
			invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_SETITEM,0,addr @stlvItem


			invoke	wsprintf,addr @szbuffer, offset szFmtHex,[esi].TimeDateStamp
			lea	ebx,@szbuffer
			mov	@stlvItem.pszText,ebx
			mov	@stlvItem.iSubItem,2
			invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_SETITEM,0,addr @stlvItem


			invoke	wsprintf,addr @szbuffer, offset szFmtHex,[esi].ForwarderChain
			lea	ebx,@szbuffer
			mov	@stlvItem.pszText,ebx
			mov	@stlvItem.iSubItem,3
			invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_SETITEM,0,addr @stlvItem


			invoke	wsprintf,addr @szbuffer, offset szFmtHex,[esi].Name1
			lea	ebx,@szbuffer
			mov	@stlvItem.pszText,ebx
			mov	@stlvItem.iSubItem,4
			invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_SETITEM,0,addr @stlvItem

			invoke	wsprintf,addr @szbuffer, offset szFmtHex,[esi].FirstThunk
			lea	ebx,@szbuffer
			mov	@stlvItem.pszText,ebx
			mov	@stlvItem.iSubItem,5
			invoke	SendDlgItemMessage,hWnd,IDC_LIST1_IMPORT,LVM_SETITEM,0,addr @stlvItem
			inc	@stlvItem.iItem
			add	esi,sizeof IMAGE_IMPORT_DESCRIPTOR
		.endw
		dec	@stlvItem.iItem
		mov	eax,@stlvItem.iItem
		
_ret:
		assume esi:nothing
		popad
		ret
_ShowImport	endp
		


_ShowFunction	proc	hWnd,_lpFile,_lpPEHeader,index
		local	@stlvItem:LVITEM
		local	@szbuffer[64]:byte,@szbuffer1[64]:byte,@lpThunkRVA:dword,@hList,@lpThunkVal
		local	@dwHint:dword
		pushad
		mov	esi,_lpPEHeader
		assume	esi:ptr IMAGE_NT_HEADERS
		mov	eax,[esi].OptionalHeader.DataDirectory[8].VirtualAddress
		.if !eax
		invoke	MessageBox,hWnd,addr szErrNoImport,NULL,MB_OK
		jmp	_ret
		.endif
		invoke	_RVAToOffset,_lpPEHeader,eax
		add	eax,_lpFile
		mov	esi,eax
		mov	eax,sizeof IMAGE_IMPORT_DESCRIPTOR
		mul	index
		add	esi,eax
		assume esi:ptr IMAGE_IMPORT_DESCRIPTOR
		 .if     [esi].OriginalFirstThunk
			mov     eax,[esi].OriginalFirstThunk
		.else
			mov     eax,[esi].FirstThunk
		.endif
		mov	@lpThunkRVA,eax
		invoke  _RVAToOffset,_lpPEHeader,eax
		
		add     eax,_lpFile
		xor	ebx,ebx
		mov	ebx,eax	
		invoke	RtlZeroMemory,addr @stlvItem,sizeof @stlvItem
		invoke	GetDlgItem,hWnd,IDC_LIST2_IMPORTFUN
		mov	@hList,eax
		invoke	SendMessage,@hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT
		invoke	SendMessage,@hList,LVM_DELETEALLITEMS ,0,0
		.while	dword ptr [ebx]
			push	ebx
			push	edx
			
			mov	@stlvItem.imask,LVIF_TEXT
			mov	@stlvItem.iItem,0
			
			invoke	wsprintf,addr @szbuffer, offset szFmtHex,@lpThunkRVA
			lea	edx,@szbuffer
			mov	@stlvItem.pszText,edx
			mov	@stlvItem.iSubItem,0
			invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_INSERTITEM,0,addr @stlvItem
			
			
			invoke	wsprintf,addr @szbuffer, offset szFmtHex,dword ptr [ebx]
			lea	edx,@szbuffer
			mov	@stlvItem.pszText,edx
			mov	@stlvItem.iSubItem,1
			invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_SETITEM,0,addr @stlvItem
			
			.if dword ptr [ebx] & IMAGE_ORDINAL_FLAG32	;判断最高位为1,函数是按序号导入
				mov	eax,dword ptr [ebx]
				and	eax,0FFFFh
				invoke	wsprintf,addr @szbuffer, offset szFmtHex,eax
				invoke	wsprintf,addr @szbuffer1,offset szFmtchar,addr szHint1
				
			.else					
			        invoke  _RVAToOffset,_lpPEHeader,dword ptr [ebx]
				add     eax,_lpFile
				assume  eax:ptr IMAGE_IMPORT_BY_NAME
				mov	edx,dword ptr [eax]
				and	edx,0ffffh
				mov	@dwHint,edx
				
				invoke	wsprintf,addr @szbuffer, offset szFmtchar,addr [eax].Name1
				invoke	wsprintf,addr @szbuffer1,offset szFmtHex1,@dwHint
								
			.endif
			
			lea	edx,@szbuffer1
			mov	@stlvItem.pszText,edx
			mov	@stlvItem.iSubItem,2
			invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_SETITEM,0,addr @stlvItem
			
			lea	edx,@szbuffer
			mov	@stlvItem.pszText,edx
			mov	@stlvItem.iSubItem,3
			invoke	SendDlgItemMessage,hWnd,IDC_LIST2_IMPORTFUN,LVM_SETITEM,0,addr @stlvItem
			pop	edx
			pop	ebx			
			inc	@stlvItem.iItem
			add	ebx,4
		.endw
_ret:
		assume eax:nothing
		assume esi:nothing
		popad		
		ret
_ShowFunction	endp




;Import?
_ProcDlgImport	proc	uses ebx edi esi hWnd,wMsg,wParam,lParam
			mov	eax,wMsg
		.if	eax == WM_CLOSE
			invoke  EndDialog,hWnd,NULL
		.elseif	eax ==  WM_INITDIALOG
			invoke	InitCommonControls
			invoke	_Initlist1,hWnd
			invoke	_Initlist2,hWnd
			invoke	_UnLoadFile,offset stMapFile
			invoke	_LoadIsPEFile,offset szFileName,offset stMapFile,hWnd
			invoke	_ShowImport,hWnd,stMapFile.ImageBase,stMapFile.lpPEHeader
			ret
		.elseif	eax == WM_NOTIFY
			pushad
			mov	eax,wParam
			mov	ebx,lParam
			.if	ax == IDC_LIST1_IMPORT				
				assume ebx:ptr NMHDR
				.if [ebx].code == LVN_ITEMCHANGED
					assume ebx:ptr NM_LISTVIEW
					.if [ebx].uNewState
					invoke	_ShowFunction,hWnd,stMapFile.ImageBase,stMapFile.lpPEHeader,[ebx].iItem
						
					.endif
				.endif			
			.endif
			assume ebx:nothing
			popad
			ret
		.else	
			mov	eax,FALSE
			ret
		.endif	
		mov	eax,TRUE
		ret
_ProcDlgImport	endp

⌨️ 快捷键说明

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