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

📄 cmd_option.asm

📁 Cracker终结者——提供最优秀的软件保护技术
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	or	byte [rOptions+RebuildOptions.ComputeImage], 1	mov	byte [OP.OCompute],'E'	jmp	.next.I:	cmp	al,'i'	jz	@F	cmp	al,'I'	jnz	.H@@	mov	al,[esi]	cmp	al,'0'	jb	near .next	cmp	al,'3'	ja	near .next	inc	esi	mov	[OP.OImportmode], al	sub	al, '0'	mov	[rOptions+RebuildOptions.ImportMode], al	jmp	.next.H:	cmp	al, 'h'	jz	@F	cmp	al, 'H'	jnz	near .next@@	mov	al,[esi]	cmp	al,'0'	jb	near .next	cmp	al,'7'	ja	near .next	inc	esi	mov	[OP.OReloadmode], al	sub	al, '0'	mov	[rOptions+RebuildOptions.ReloadHeader], al	jmp	.nextsegment _LDATAOP:.msgVSIZE:		db 'Virtual size update (Enabled/Disabled): '.OVSizemode:		db 'E',0.msgPSIZE:		db 'Physical size update (Enabled/Disabled): '.OPSizemode:		db 'E',0.msgCAVE:		db 'Import caving attempt (Enabled/Disabled): '.OCavemode:		db 'D',0.msgBUILD:		db 'PE header rebuilding (Enabled/Disabled): '.OBuildmode:		db 'D',0.msgRELOAD:		db 'PE header reload mode : '.OReloadmode:		db '0',0.msgPESHRINK:		db 'PE Structure Optimization (Enabled/Disabled): '.OShrinkmode:		db 'E',0.msgCOMPUTE:		db 'Compute ImageSize (Enabled/Disabled): '.OCompute:		db 'D',0.msgIMPORT:		db 'Actual Import mode : '.OImportmode:		db '3',0segment _LTEXTO_BHRAMA:	call	[pSkipWhiteSpace]	; skip to real params	jz	.status.next:	lodsb				; get subcommand	cmp	al,0	jnz	.r.status:	mov	esi,OB.msgOBJECTSIZE	call	[pPrintToCommandWindow]	mov	esi,OB.msgPESHRINK	call	[pPrintToCommandWindow]	mov	esi,OB.msgHEADER	call	[pPrintToCommandWindow]	mov	esi,OB.msgIMPORT	call	[pPrintToCommandWindow]	jmp	Parser.return.r:	cmp	al,'r'	jnz	.R	and 	byte [Bhrama_Struc+BhramaComStruc.OptL3+1], 0xFE	mov	byte [OB.OSizemode],'D'	jmp	short .next.R:	cmp	al,'R'	jnz	.s	or 	byte [Bhrama_Struc+BhramaComStruc.OptL3+1], 1	mov	byte [OB.OSizemode],'E'	jmp	short .next.s:	cmp	al,'s'	jnz	.S	and 	byte [Bhrama_Struc+BhramaComStruc.OptL3], 0xFE	mov	byte [OB.OShrinkmode],'D'	jmp	short .next.S:	cmp	al,'S'	jnz	.h	or 	byte [Bhrama_Struc+BhramaComStruc.OptL3], 1	mov	byte [OB.OShrinkmode],'E'	jmp	.next.h:	cmp	al,'h'	jnz	.H	and 	byte [Bhrama_Struc+BhramaComStruc.OptL4+2], 0xFE	mov	byte [OB.OHeadermode],'D'	jmp	.next.H:	cmp	al,'H'	jnz	.03	or 	byte [Bhrama_Struc+BhramaComStruc.OptL4+2], 1	mov	byte [OB.OHeadermode],'E'	jmp	.next.03:	cmp	al,'0'	jb	near .next	cmp	al,'3'	ja	near .next	mov	[OB.OImportmode],al	sub	al,'0'	mov	[Bhrama_Struc+BhramaComStruc.OptL4+1],al	jmp	.nextsegment _LDATAOB:.msgOBJECTSIZE:		db 'PE Object size recomputation (Enabled/Disabled): '.OSizemode:		db 'E',0.msgPESHRINK:		db 'PE Structure Optimization (Enabled/Disabled): '.OShrinkmode:		db 'E',0.msgHEADER:		db 'PE Header restoration (Enabled/Disabled): '.OHeadermode:		db 'D',0.msgIMPORT:		db 'Actual Import mode : '.OImportmode:		db '3',0segment _LTEXTO_SCREENDUMP:	call	[pSkipWhiteSpace]	; skip to real params	jz	ON_TOGGLE_EXPERT_MODE	lodsb				; get subcommand	and	al,0x5F			; upcase	cmp	al,'D'	jz	ON_SET_DUMP_NUMBER	cmp	al,'F'	jz	ON_SET_DUMP_BASEFILENAME	cmp	al,'V'	jz	ON_VIEW_SCREENDUMP_OPTIONS	jmp	Option_HELPON_TOGGLE_EXPERT_MODE:	xor	byte [ON_TOGGLE_EXPERT_MODE.Emode],1	mov	esi,.msgEXPERT_MODE	call	[pPrintToCommandWindow]	jmp	Parser.returnsegment _LDATA.msgEXPERT_MODE:db 'Screendump expert mode (Enabled/Disabled): '.Emode:		db 'D',0segment _LTEXTON_SET_DUMP_NUMBER:	call	[pSkipWhiteSpace]	;skip to real params	jz	near Option_HELP	mov	edi,Parse_ScreenDump.EmodeFileName	add	edi,[Parse_ScreenDump.EmodeExtPtr]	call	EmodeSub.SetDumpNum	jmp	Parser.returnON_SET_DUMP_BASEFILENAME:	call	[pSkipWhiteSpace]	; skip to real params	jz	near Option_HELP	mov	edi,Parse_ScreenDump.EmodeFileName	mov	ebx,Parse_ScreenDump.EmodeExtPtr	; num ptr	call	EmodeSub.SetBaseFileName	jmp	near Parser.returnON_VIEW_SCREENDUMP_OPTIONS:	mov	esi,ON_TOGGLE_EXPERT_MODE.msgEXPERT_MODE	mov	ebp,[pPrintToCommandWindow]	call	ebp	mov	esi,Parse_ScreenDump.EmodeFileName	call	ebp	mov	esi,Parse_ScreenDump.modeMsg	call	ebp	jmp	Parser.errorO_MEMDUMP:	call	[pSkipWhiteSpace]	; skip to real params	jz	OD_TOGGLE_EXPERT_MODE	lodsb				; get subcommand	and	al,0x5F			; upcase	cmp	al,'D'	jz	near OD_SET_DUMP_NUMBER	cmp	al,'F'	jz	near OD_SET_DUMP_BASEFILENAME	cmp	al,'V'	jz	near OD_VIEW_DUMP_OPTIONS	jmp	Option_HELPOD_TOGGLE_EXPERT_MODE:	xor	byte [OD_TOGGLE_EXPERT_MODE.Emode],1	mov	esi,.msgEXPERT_MODE	call	[pPrintToCommandWindow]	jmp	near Parser.returnsegment _LDATA.msgEXPERT_MODE:db 'Memdump expert mode (Enabled/Disabled): '.Emode:		db 'D',0segment _LTEXTOD_SET_DUMP_NUMBER:	call	[pSkipWhiteSpace]	;skip to real params	jz	near Option_HELP	mov	edi,Parse_Dump.EmodeFileName	add	edi,[Parse_Dump.EmodeExtPtr]	call	EmodeSub.SetDumpNum	jmp	Parser.returnOD_SET_DUMP_BASEFILENAME:	call	[pSkipWhiteSpace]	; skip to real params	jz	near Option_HELP	mov	edi,Parse_Dump.EmodeFileName	mov	ebx,Parse_Dump.EmodeExtPtr	; num ptr	call	EmodeSub.SetBaseFileName	jmp	Parser.returnOD_VIEW_DUMP_OPTIONS:	mov	ebp,[pPrintToCommandWindow]	mov	esi,OD_TOGGLE_EXPERT_MODE.msgEXPERT_MODE	call	ebp	mov	esi,Parse_Dump.EmodeFileName	call	ebp	jmp	Parser.error; Expert/Auto Mode subroutinesEmodeSub:.SetDumpNum:	; EDI = number space in filename, ESI = param	push	esi	mov	ecx,OPT_EMODE_NUMLEN	mov	edx,ecx.sdn_loop1:	lodsb			; validate the param	cmp	al,'0'	jb	.sdn_store0	cmp	al,'9'	ja	.sdn_store0	loop	.sdn_loop1.sdn_store0:	pop	esi	sub	edx,ecx		; how many positions are actually valid	or	ecx,ecx	jz	.sdn_storeN	mov	al,'0'	rep	stosb		; 0-prepend if the number is smaller than 3-pos.sdn_storeN:	mov	ecx,edx	jecxz	.sdn_end	; do we have ANY valid numbers ? =)	rep	movsb.sdn_end:	dec	edi		; need to dec once due to the auto-inc on dump	dec	byte [edi]	retn.SetBaseFileName:	; ESI = params, EDI = filename buf, EBX = num ptr	push	edi	xor	ecx,ecx		; get length.sbf_loop1:	lodsb	cmp	al,'*'	jne	.sbf_notstar.sbf_star:	or	ebx,ebx		; check if numptr already stored	jz	.sbf_noovfl	mov	[ebx],ecx	; set number ptr	xor	ebx,ebx		; ptr set, flag it	push	eax	push	ecx	mov	ecx,OPT_EMODE_NUMLEN - 1	mov	al,'0'		; store init dump number, ie '000'	rep	stosb	dec	eax	stosb	pop	ecx	pop	eax	jmp	.sbf_noovfl.sbf_notstar:	inc	ecx	cmp	ecx,byte OPT_EMODE_FILENAMELEN	jbe	.sbf_noovfl	xor	eax,eax		; filename length limit reached	jmp	.sbf_star	; store the number ptr and init.sbf_noovfl:	or	al,al	jz	.sbf_zero	cmp	al,'*'	jz	.sbf_loop1	stosb	jmp	.sbf_loop1.sbf_zero:	or	ebx,ebx		; if there was no * in the filename	jnz	.sbf_star	; append dump number	stosb			; store 0-term;	cmp	ecx,byte OPT_EMODE_FILENAMELEN;	jbe	.sbf_nameok;	mov	esi,.helpOFE	; error - filename too long;	call	[pPrintToCommandWindow].sbf_nameok:	pop	esi	call	[pPrintToCommandWindow]	retn;segment _LDATA;.helpOFE:	db 'Filename is too long and was trimmed. Edit source and recompile for larger filename buffer.',0segment _LTEXT.IncDumpNum:	; EDI = dump number ptr	mov	ecx,OPT_EMODE_NUMLEN	add	edi,ecx	dec	edi		; now we got a ptr to the last digit	mov	esi,edi	std			; and going in reverse	mov	ah,1.idn_loop1:	lodsb	add	al,ah	mov	ah,1		; have to set ah=0	dec	ah		; and clear AF	aaa	or	al,0x30	stosb	loop	.idn_loop1	cld			; the rest of the code assumes DF=0 =)	retn

⌨️ 快捷键说明

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