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

📄 cmd_pedump.asm

📁 Cracker终结者——提供最优秀的软件保护技术
💻 ASM
字号:
%include "util.mac"
%include "vxdn.inc"
%include "icedump.inc"
%include "wiat.inc"
%include "taskmod.inc"
%include "fileio.inc"
%include "pedata.inc"
%include "peutil.inc"
%include "peio.inc"
%include "peimp.inc"
%include "options.inc"
%include "memio.inc"
%include "common.inc"
%include "win32n.inc"


%ifndef MAKEDEP

global Parse_Pedump
global Service_Pedump
global rOptions


extern SetCB
extern sdata
extern Parser.error
extern Parser.errorMsg
extern Error_V86
extern Error_PM16
extern Error_PMR0
extern ParseExpression


bits 32


segment _LTEXT
;-------------------------------------------------------------------------------
; PEDUMP <ImageBase> <entry RVA> <FileName>
;-------------------------------------------------------------------------------
Parse_Pedump:
	mov	edi,Error_V86
	mov	ebp,[dClient_EFLAGS]
	test	byte [ebp+2],2			; is client in V86 mode?
	jnz	near Parser.errorMsg

	mov	edi,Error_PM16
	mov	ebp,[dClient_CS]
	lar	eax,[ebp]			; is client 32 bit?
	bt	eax,22
	jnc	near Parser.errorMsg

	mov	edi,Error_PMR0
	test	byte [ebp],3			; is client in ring-0?
	jz	near Parser.errorMsg

	push	byte SERVICE_PEDUMP
	mov	ebp,[dClient_EAX]
	pop	dword [ebp]

	call	ParseExpression
	jb	near Parser.error

	mov	[PEBuffer], eax

	call	[pSkipWhiteSpace]
	jz	near Parser.error

	call	ParseExpression
	jb	near Parser.error

	mov	[FinalEIP], eax

	call	[pSkipWhiteSpace]
	jz	near Parser.error

	push	dword __Dest
	push	esi
	Call	strcopy

	call	SetCB
	jc	near Parser.error

	xor	eax,eax
	inc	eax

	mov	ebp,[fPAGEIN_InProgress]	; set internal Winice flag to 1
	mov	[ebp],eax
	mov	ebp,[fExecuteMoreCommands]	; set internal Winice flag to 0
	mov	[ebp],ah

	popad
	retn


;-------------------------------------------------------------------------------
;
;-------------------------------------------------------------------------------
Service_Pedump:
	Trace_Out "ICEDUMP: Phoenix engine v2.10 (C) G-RoM 1998/2000"
	Trace_Out ""

	mov	[.ESP],esp

	mov	esi, EH_Pedump1
	VMMCall	Install_Exception_Handler
	jnc	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to install exception handler [1]"
	debug_end

	jmp	.ret

@@
	mov	esi, EH_Pedump2
	VMMCall	Install_Exception_Handler
	jnc	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to install exception handler [2]"
	debug_end

	jmp	.free_eh1

@@
	mov	esi, EH_Pedump3
	VMMCall	Install_Exception_Handler
	jnc	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to install exception handler [3]"
	debug_end

	jmp	.free_eh2

@@
	mov	esi, EH_Pedump4
	VMMCall	Install_Exception_Handler
	jnc	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to install exception handler [4]"
	debug_end

	jmp	.free_eh3

@@
.protect_start:

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Exception handlers installed"
	debug_end

	call	GetCurrentProcessID

	push	dword FileNameBuffer
	push	eax
	call	GetNamePID
	test	eax, eax
	jz	.SkipUpdateHeader

	push	dword [PEBuffer]
	push	dword FileNameBuffer
	call	ReloadPEHeader

	cmp	[rOptions+RebuildOptions.ComputeImage], byte 1
	jnz	.SkipUpdateHeader

	push	dword [PEBuffer]
	call	ComputeImageSize

.SkipUpdateHeader:
	push	dword PEInfos
	push	dword [PEBuffer]
	call	GetPEInfos
	test	eax, eax
	jnz	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	mov	eax,[PEBuffer]
	Trace_Out "ICEDUMP: Phoenix : No PE header at #eax"
	debug_end

	jmp	.free_eh4
@@
	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PEInfos Collected [1]"
	debug_end

	mov	ecx, [PEBuffer]				; Effective IMGBase
	mov	[PEInfos+PEStruc.ImageBase], ecx
	mov	ecx, [PEInfos+PEStruc.ImageSize]
	mov	[PEInfos+PEStruc.FileSize], ecx

	push	ecx
	call	GetMem
	test	eax, eax
	jnz	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to allocate PE Buffer, size: #ecx"
	debug_end

	jmp	.free_eh4

@@
	mov	[hBuffer], eax

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PE Buffer allocated"
	debug_end

	mov	ecx, [PEInfos+PEStruc.ImageSize]
	mov	edi, [hBuffer]
	mov	esi, [PEBuffer]
	rep	movsb

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PE Image replicated"
	debug_end

	push	dword PEInfos
	push	dword [hBuffer]
	call	UpdateSections

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PEInfos Collected [2]"
	debug_end

	call	GetCurrentProcessID

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Current TaskDB: #eax"
	debug_end

	push	dword [PEBuffer]
	push	dword DBuffer
	push	eax
	call	BuildDLLList
	test	eax, eax
	jnz	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to allocate DLL List"
	debug_end

	jmp	.Free1

@@
	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : DLL List allocated"
	debug_end

	push	dword IBuffer
	push	dword IData
	push	dword [DBuffer]
	push	dword PEInfos
	push	dword [hBuffer]
	call	RebuildImport
	test	eax, eax
	jnz	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to rebuild Import table"
	debug_end

	jmp	.Free3

@@
	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Import table rebuilt"
	debug_end

	mov	eax, [FinalEIP]
	mov	[PEInfos+PEStruc.EIP], eax

	push	dword PEInfos
	push	dword [hBuffer]
	call	SetPEInfos

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PEInfos updated"
	debug_end

	push	dword CSBannerLen
	push	dword CSBanner
	push	dword PEInfos
	push	dword [hBuffer]
	call	OptimizePE
	test	eax, eax
	jnz	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to optimize PE Image"
	debug_end

	jmp	.Free3

@@
	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PE Image Optimized"
	debug_end

	cmp	byte [rOptions+RebuildOptions.ImportMode], 3
	jl	.SaveItNow

	cmp	dword [IData+Object.Offset], byte 0
	jz	.SaveItNow

	push	byte 1
	push	dword IData
	push	dword PEInfos
	push	dword [hBuffer]
	call	AddSection

.SaveItNow:
	push	dword __Dest
	push	dword [PEInfos+PEStruc.FileSize]
	push	dword [hBuffer]
	call	SaveBufferToDisk
	test	eax, eax
	jnz	@F

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to save main image to disk"
	debug_end

	jmp	.Free3

@@
	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Saved main image to disk"
	debug_end

	cmp	byte [rOptions+RebuildOptions.ImportMode], 3
	jl	.ExitNow

	cmp	dword [IData+Object.Offset], byte 0
	jz	.ExitNow

	push	dword __Dest
	push	dword [IData+Object.Offset]
	push	dword [IData+Object.PSize]
	push	dword [IBuffer]
	call	AppendBufferToDisk
	test	eax, eax
	jnz	.ExitNow

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Failed to save import object"
	debug_end

	jmp	short .Free3

.ExitNow:
	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Saved import object"
	debug_end

.protect_end:

	jmp	short .Free3

.EH:
	mov	esp,[.ESP]

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Exception Handler Invoked !"
	debug_end

.Free3:
	cmp	dword [IBuffer], byte 0
	jz	.Free2

	push	dword [IBuffer]
	call	FreeMem

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Import buffer deallocated"
	debug_end

.Free2:
	cmp	dword [DBuffer],byte 0
	jz	.Free1

	push	dword [DBuffer]
	call	FreeMem

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : DLL list deallocated"
	debug_end

.Free1:
	cmp	dword [hBuffer].byte 0
	jz	.free_eh3

	push	dword [hBuffer]
	call	FreeMem

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : PE buffer deallocated"
	debug_end

.free_eh4:
	mov	esi,EH_Pedump4
	VMMCall	Remove_Exception_Handler

.free_eh3:
	mov	esi,EH_Pedump3
	VMMCall	Remove_Exception_Handler

.free_eh2:
	mov	esi,EH_Pedump2
	VMMCall	Remove_Exception_Handler

.free_eh1:
	mov	esi,EH_Pedump1
	VMMCall	Remove_Exception_Handler

	debug_start sdata+DebugFlags, ICEDUMP_DEBUG_PEDUMP
	Trace_Out "ICEDUMP: Phoenix : Exception Handlers uninstalled"
	debug_end

.ret:
	popfd
	popad
	retn				; client will return to an INT3


segment _LDATA
	ALIGN 4
.ESP:		dd 0
FileNameBuffer: TIMES 256 DB 0
__Dest:		TIMES 256 DB 0

IBuffer		dd	0
DBuffer		dd	0		; DLL List Holder
PEBuffer	dd	0		; Target Base
hBuffer		dd	0
FinalEIP	dd	0


EH_Pedump1:	ISTRUC Exception_Handler_Struc
	at EHS_Reserved,	dd 0
	at EHS_Start_EIP,	dd __PEIMPCODESTART__
	at EHS_End_EIP,		dd __PEIMPCODEEND__
	at EHS_Handler,		dd Service_Pedump.EH
	IEND

EH_Pedump2:	ISTRUC Exception_Handler_Struc
	at EHS_Reserved,	dd 0
	at EHS_Start_EIP,	dd __PEIOCODESTART__
	at EHS_End_EIP,		dd __PEIOCODEEND__
	at EHS_Handler,		dd Service_Pedump.EH
	IEND

EH_Pedump3:	ISTRUC Exception_Handler_Struc
	at EHS_Reserved,	dd 0
	at EHS_Start_EIP,	dd __PEUTILCODESTART__
	at EHS_End_EIP,		dd __PEUTILCODEEND__
	at EHS_Handler,		dd Service_Pedump.EH
	IEND

EH_Pedump4:	ISTRUC Exception_Handler_Struc
	at EHS_Reserved,	dd 0
	at EHS_Start_EIP,	dd Service_Pedump.protect_start
	at EHS_End_EIP,		dd Service_Pedump.protect_end
	at EHS_Handler,		dd Service_Pedump.EH
	IEND

IData:	ISTRUC	Object
	at Object.Name, db '.idata',0
	At Object.Flags, dd 0C0000040h
	IEND

rOptions:	ISTRUC RebuildOptions
	at RebuildOptions.BuildSection,	db 0
	at RebuildOptions.ShrinkPE,	db 1
	at RebuildOptions.MergeSection,	db 0
	at RebuildOptions.RawMode,	db 0
	at RebuildOptions.ReloadHeader,	db 0
	at RebuildOptions.RestoreReloc,	db 0
	at RebuildOptions.RestoreRsrc,	db 0
	at RebuildOptions.ImportMode,	db 3
	at RebuildOptions.UpdatePSize,	db 1
	at RebuildOptions.UpdateVSize,	db 1
	at RebuildOptions.CaveImport,	db 0
	at RebuildOptions.DllFromDisk,	db 0
	at RebuildOptions.ComputeImage,	db 0
	at RebuildOptions.Reserved,	db 0,0,0
	at RebuildOptions.ImportPlugin,	TIMES 256 db 0
	IEND

PEInfos:	ISTRUC PEStruc
	IEND

CSBanner:	DB 0dh,0ah
	DB '哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪

⌨️ 快捷键说明

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