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

📄 stub_lzma.asm

📁 RLPack1.20 一款优秀的压缩壳源代码.这个是官方最新的版本的源代码。壳完全采用masm32开发. 里面自带两款压缩引擎.
💻 ASM
字号:

 __L_DLL_STUB_START:
	CMP BYTE PTR[ESP+8],1		; DLL entry point check
	JNE __L_STUB_OEP_JUMP		; unpack the .dll file!
 __L_STUB_START:
 	PUSHAD
 	CALL __L_start
 __L_start:
 	MOV EBP,DWORD PTR[ESP]
 	ADD ESP,4
	.if DWORD PTR[ESP+28h] == 1	; DLL ImageBase loader
		MOV EAX,DWORD PTR[ESP+24h]
		MOV DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)],EAX
	.else
		MOV EAX,DWORD PTR[EBP+(offset __L_PE32_IMAGEBASE - offset __L_start)]
		MOV DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)],EAX
	.endif
 	LEA ESI,DWORD PTR[EBP+(offset __L_data - offset __L_start)+12]
 	LEA EBX,DWORD PTR[EBP+(offset __L_lzma_unpack - offset __L_start)]
 	XOR EDI,EDI

	PUSH PAGE_EXECUTE_READWRITE
	PUSH MEM_COMMIT
	PUSH 0C2000h
	PUSH NULL
	CALL DWORD PTR[EBP+(offset __L_locva - offset __L_start)]
	MOV DWORD PTR[EBP+(offset __L_LZMA_alloc - offset __L_start)],EAX

	CALL __L_FIX_ACCESS
 __L_unpack_sections:
	.while DWORD PTR[ESI+EDI] != 0
		PUSHAD
		MOV EAX,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
		PUSH DWORD PTR[EBP+(offset __L_LZMA_alloc - offset __L_start)]
		PUSH DWORD PTR[ESI+EDI]
		ADD DWORD PTR[ESP],EAX
		PUSH DWORD PTR[ESI+EDI+4]
		ADD DWORD PTR[ESP],EAX
		CALL EBX
		POPAD
		ADD EDI,8
	.endw
 	.if DWORD PTR[EBP+(offset __L_FILTER_CODE_START - offset __L_start)] != 0 && DWORD PTR[EBP+(offset __L_FILTER_CODE_SIZE - offset __L_start)] != 0
		CALL __L_FIX_FILTER_CODE
 	.endif
	LEA ESI,DWORD PTR[ESI+EDI+4]
	PUSH EBX
		PUSH PAGE_EXECUTE_READWRITE
		PUSH MEM_COMMIT
 __L_STUB_VA_SIZE:
		PUSH 20000h
		PUSH NULL
		CALL DWORD PTR[EBP+(offset __L_locva - offset __L_start)]
		MOV DWORD PTR[EBP+(offset __L_data - offset __L_start)+8],EAX
	POP EBX
		PUSHAD
		PUSH DWORD PTR[EBP+(offset __L_LZMA_alloc - offset __L_start)]
		PUSH ESI
		PUSH DWORD PTR[EBP+(offset __L_data - offset __L_start)+8]
		CALL EBX
		POPAD

	MOV ESI,DWORD PTR[EBP+(offset __L_data - offset __L_start)+8]
	MOV EAX,ESI
	.while BYTE PTR[EAX] != 01
		INC EAX
	.endw
	INC EAX
	MOV EDI,DWORD PTR[EAX]
	ADD EDI,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
	ADD EAX,4
	MOV DWORD PTR[EBP+(offset __L_data - offset __L_start)+4],EAX

	.while BYTE PTR[ESI] != 01
		PUSH ESI
		CALL DWORD PTR[EBP+(offset __L_locloadlib - offset __L_start)]
		.if EAX == NULL
			CALL __L_AlternatePathCheck
		.endif
		TEST EAX,EAX
		JE __L_ERROR_EXIT
		MOV DWORD PTR[EBP+(offset __L_data - offset __L_start)],EAX
		MOV EAX,ESI
		.while DWORD PTR[EAX] != 0
			MOV EAX,DWORD PTR[EBP+(offset __L_data - offset __L_start)+4]
			MOV EAX,DWORD PTR[EAX]
			PUSH EAX
			PUSH DWORD PTR[EBP+(offset __L_data - offset __L_start)]
			CALL __L_GLOBAL_GETPROCADDRESS
			TEST EAX,EAX
			JE __L_ERROR_EXIT
			MOV DWORD PTR[EDI],EAX
			ADD DWORD PTR[EBP+(offset __L_data - offset __L_start)+4],4
			ADD EDI,4
			MOV EAX,DWORD PTR[EBP+(offset __L_data - offset __L_start)+4]
		.endw
		.while BYTE PTR[ESI] != 0
			INC ESI
		.endw
		INC ESI
		ADD EAX,4
                MOV EDI,DWORD PTR[EAX]
                ADD EDI,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
                ADD EAX,4
		MOV DWORD PTR[EBP+(offset __L_data - offset __L_start)+4],EAX
	.endw

	PUSH MEM_DECOMMIT
 __L_STUB_VF_SIZE:
	PUSH 20000h
	PUSH DWORD PTR[EBP+(offset __L_data - offset __L_start)+8]
	CALL DWORD PTR[EBP+(offset __L_locvf - offset __L_start)]

	PUSH MEM_RELEASE
	PUSH 0
	PUSH DWORD PTR[EBP+(offset __L_data - offset __L_start)+8]
	CALL DWORD PTR[EBP+(offset __L_locvf - offset __L_start)]

	PUSH MEM_RELEASE
	PUSH 0
	PUSH DWORD PTR[EBP+(offset __L_LZMA_alloc - offset __L_start)]
	CALL DWORD PTR[EBP+(offset __L_locvf - offset __L_start)]

	CALL __L_FIX_RELOCATIONS

	CALL __L_TLS_CALLBACK_EMULATE

	POPAD

 __L_STUB_OEP_JUMP:
	JMP pack

 __L_ERROR_EXIT:
 	POPAD
 	RET

 __L_FIX_ACCESS:
 	PUSHAD

	LEA EAX,DWORD PTR[EBP+(offset __L_OLD_PROTECT - offset __L_start)]
 	PUSH EAX
 	PUSH PAGE_EXECUTE_READWRITE
 	PUSH 200h
 	PUSH DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
        CALL DWORD PTR[EBP+(offset __L_locvp - offset __L_start)]
	MOV DWORD PTR[EBP+(offset __L_OLD_PROTECT - offset __L_start)],02040001h

	MOV EAX,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
	ADD EAX,DWORD PTR[EAX+3Ch]
	ADD AX,WORD PTR[EAX+14h]
	ADD EAX,18h
	MOV EBX,DWORD PTR[EAX+12]
	ADD EBX,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
	MOV ECX,DWORD PTR[EAX+8]

	LEA EAX,DWORD PTR[EBP+(offset __L_OLD_PROTECT - offset __L_start)]
 	PUSH EAX
 	PUSH PAGE_EXECUTE_READWRITE
 	PUSH ECX
 	PUSH EBX
        CALL DWORD PTR[EBP+(offset __L_locvp - offset __L_start)]

	POPAD
	RET

 __L_FIX_RELOCATIONS:
 	PUSHAD
	MOV ESI,DWORD PTR[EBP+(offset __L_RELOCATION - offset __L_start)]
	.if ESI != 0
		MOV EDI,DWORD PTR[EBP+(offset __L_PE32_IMAGEBASE - offset __L_start)]
		MOV EAX,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
		.if EAX != EDI
			ADD ESI,EAX
			.while DWORD PTR[ESI] != 0
				MOV EDX,DWORD PTR[ESI]
				MOV EAX,DWORD PTR[ESI+4]
				MOV DWORD PTR[EBP+(offset __L_RELOCATION_SIZE - offset __L_start)],EAX
				ADD DWORD PTR[EBP+(offset __L_RELOCATION_SIZE - offset __L_start)],ESI
				MOV EBX,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
				XOR ECX,ECX
				ADD ESI,8
				.while ESI < DWORD PTR[EBP+(offset __L_RELOCATION_SIZE - offset __L_start)]
					MOVZX EAX,BYTE PTR[ESI]
					.if AL < 0E0h
						PUSH EAX
						ADD EAX,EDX
						ADD EAX,EBX
						ADD EAX,ECX
						ADD ECX,DWORD PTR[ESP]
						ADD ESP,4
						SUB DWORD PTR[EAX],EDI
						ADD DWORD PTR[EAX],EBX
						INC ESI
					.else
						MOVZX EAX,WORD PTR[ESI]
						XCHG AL,AH
						SUB AX,0E000h
						PUSH EAX
						ADD EAX,EDX
						ADD EAX,EBX
						ADD EAX,ECX
						ADD ECX,DWORD PTR[ESP]
						ADD ESP,4
						SUB DWORD PTR[EAX],EDI
						ADD DWORD PTR[EAX],EBX
						ADD ESI,2
					.endif
				.endw
			.endw
		.endif
	.endif
	POPAD
	RET

 __L_FIX_FILTER_CODE:
 	PUSHAD
 	MOV ESI,DWORD PTR[EBP+(offset __L_FILTER_CODE_START - offset __L_start)]
 	ADD ESI,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
 	MOV EDI,ESI
	MOV ECX,DWORD PTR[EBP+(offset __L_FILTER_CODE_SIZE - offset __L_start)]
	.if DWORD PTR[EBP+(offset __L_FILTER_CODE_BYTE - offset __L_start)] != NULL
		.while ECX > 0
			.if BYTE PTR[ESI] == 0E8h || BYTE PTR[ESI] == 0E9h
			       MOV EAX,DWORD PTR[ESI+1]
			       .if AL == BYTE PTR[EBP+(offset __L_FILTER_CODE_BYTE - offset __L_start)]
				       MOV AL,0
				       BSWAP EAX
				       SUB EAX,5
				       ADD EAX,EDI
				       SUB EAX,ESI
				       MOV DWORD PTR[ESI+1],EAX
				.endif
			       ADD ESI,4
			       SUB ECX,4
			.endif
			INC ESI
			DEC ECX
		.endw
	.else
		CDQ
		.while ECX > 0
			INC EDX
			.if BYTE PTR[ESI] == 0E8h || BYTE PTR[ESI] == 0E9h
			       MOV EAX,DWORD PTR[ESI+1]
			       BSWAP EAX
			       SUB EAX,EDX
			       MOV DWORD PTR[ESI+1],EAX
			       ADD ESI,4
			       ADD EDX,4
			       SUB ECX,4
			.endif
			INC ESI
			DEC ECX
		.endw
	.endif
 	POPAD
 	RET

 __L_TLS_CALLBACK_EMULATE:
	PUSHAD
	MOV ESI,DWORD PTR[EBP+(offset __L_RELOCATION - offset __L_start)]
	MOV ESI,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
	ADD ESI,DWORD PTR[ESI+3Ch]
	MOV ESI,DWORD PTR[ESI+0C0h]
	.if ESI != 0
		ADD ESI,DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
		ADD ESI,12
		MOV ESI,DWORD PTR[ESI]
		.if ESI != 0
			MOV EAX,DWORD PTR[ESI]
			.while EAX != 0
				PUSH ESI
				.if DWORD PTR[EAX] != 0
					PUSH NULL
					PUSH DLL_PROCESS_ATTACH
					PUSH DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
					CALL EAX
				.endif
				POP ESI
				ADD ESI,4
				MOV EAX,DWORD PTR[ESI]
			.endw
		.endif
	.endif
	POPAD
	RET
	
 __L_GLOBAL_GETPROCADDRESS:
	LEA EAX,DWORD PTR[ESP+4]
	PUSHAD
	MOV ESI,EAX
	MOV EAX,DWORD PTR[ESI+4]
	ROL EAX,8
	.if AL == 80h
		ROR EAX,8
		XOR EAX,80000000h
		.if EAX > 10000h
			XOR EAX,80000000h
			PUSH EAX
			PUSH DWORD PTR[ESI]
			CALL __L_FindAPIName
		.endif
	.else
		ROR EAX,8
		PUSH DWORD PTR[ESI+4]
		PUSH DWORD PTR[ESI]
		CALL __L_FindAPIName
	.endif

	PUSH EAX
	PUSH DWORD PTR[ESI]
	CALL DWORD PTR[EBP+(offset __L_locgpa - offset __L_start)]
	MOV DWORD PTR[ESP+1Ch],EAX

	POPAD
	RET 8

 __L_FindAPIName:
	db 060h,08Bh,05Ch,024h,024h,08Bh,0CBh,003h
	db 05Bh,03Ch,08Bh,05Bh,078h,003h,0D9h,08Bh
	db 07Bh,020h,003h,0F9h,033h,0F6h,08Dh,014h
	db 0B7h,08Bh,012h,003h,0D1h,033h,0C0h,0C1h
	db 0C0h,007h,032h,002h,042h,080h,03Ah,000h
	db 075h,0F5h,03Bh,044h,024h,028h,074h,006h
	db 046h,03Bh,073h,018h,072h,0E0h,08Dh,014h
	db 0B7h,08Bh,012h,003h,0D1h,089h,054h,024h
	db 01Ch,061h,0C2h,008h,000h
	
 __L_AlternatePathCheck:
 	PUSHAD

	LEA EAX,DWORD PTR[EBP+(offset __L_kernel32 - offset __L_start)]
	PUSH EAX
	CALL DWORD PTR[EBP+(offset __L_locloadlib - offset __L_start)]

	PUSH 774393E8h	;Hashed GetModuleFileNameA
	PUSH EAX
	CALL __L_GLOBAL_GETPROCADDRESS
	MOV EDI,EAX

	PUSH PAGE_EXECUTE_READWRITE
	PUSH MEM_COMMIT
	PUSH MAX_PATH
	PUSH NULL
	CALL DWORD PTR[EBP+(offset __L_locva - offset __L_start)]
	MOV DWORD PTR[EBP+(offset __L_ALTERNATE_PATH - offset __L_start)],EAX

	PUSH MAX_PATH
	PUSH DWORD PTR[EBP+(offset __L_ALTERNATE_PATH - offset __L_start)]
	.if DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)] != 0
		PUSH DWORD PTR[EBP+(offset __L_LOADED_IMAGEBASE - offset __L_start)]
	.else
		PUSH DWORD PTR[EBP+(offset __L_PE32_IMAGEBASE - offset __L_start)]
	.endif
	CALL EDI

	MOV EAX,DWORD PTR[EBP+(offset __L_ALTERNATE_PATH - offset __L_start)]
	.while BYTE PTR[EAX] != 0
		INC EAX
	.endw
	.while BYTE PTR[EAX] != "\"
		MOV BYTE PTR[EAX],0
		DEC EAX
	.endw
	INC EAX
	.while BYTE PTR[ESI] != NULL
		MOVZX EBX,BYTE PTR[ESI]
		MOV BYTE PTR[EAX],BL
		INC ESI
		INC EAX
	.endw
	PUSH DWORD PTR[EBP+(offset __L_ALTERNATE_PATH - offset __L_start)]
	CALL DWORD PTR[EBP+(offset __L_locloadlib - offset __L_start)]
	MOV DWORD PTR[ESP+1Ch],EAX

 	PUSH MEM_RELEASE
	PUSH 0
	PUSH DWORD PTR[EBP+(offset __L_ALTERNATE_PATH - offset __L_start)]
	CALL DWORD PTR[EBP+(offset __L_locvf - offset __L_start)]

 	POPAD
 	RET

 __L_lzma_unpack:
	include lzma_depack.inc

 __L_iat:
	__L_OriginalFirstThunk_k dd 00000000h
	__L_TimeDateStamp_k dd 00000000h
	__L_ForwarderChain_k dd 00000000h
	__L_dllName_k dd ?					;Kernel32.dll
	__L_FirstThunk_k dd ?					;LoadLibraryA
		dd ?
		dd ?
		dd ?
		dd ?
		dd ?
	__L_kernel32 db "kernel32.dll",00h
	__L_locloadlib dd ?
	__L_locgpa dd ?
	__L_locva dd ?
	__L_locvf dd ?
	__L_locvp dd ?
		db 00h,00h,00h,00h,00h,00h
	__L_loadlib db "LoadLibraryA",00h,00h
	__L_gpa db "GetProcAddress",00h,00h
	__L_va db "VirtualAlloc",00h,00h
	__L_vf db "VirtualFree",00h,00h
	__L_vp db "VirtualProtect",00h,00h

	__L_WIN9x_RELOCATION dd 00001000h
			     dd 00000008h

	__L_OLD_PROTECT dd 02040001h
	__L_LZMA_alloc dd ?
 	__L_PE32_IMAGEBASE dd ?
 	__L_LOADED_IMAGEBASE dd ?
 	__L_RELOCATION dd ?
 	__L_RELOCATION_SIZE dd ?
 	__L_FILTER_CODE_START dd ?
 	__L_FILTER_CODE_SIZE dd ?
 	__L_FILTER_CODE_BYTE dd ?
 	__L_ALTERNATE_PATH dd ?

 __L_data:
 __L_STUB_END:

⌨️ 快捷键说明

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