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

📄 rlp.asm

📁 RLPack1.20 一款优秀的压缩壳源代码.这个是官方最新的版本的源代码。壳完全采用masm32开发. 里面自带两款压缩引擎.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
			ADD EAX,12
			.if DWORD PTR[EAX] == 0
				MOV DLLPointer,0
			.endif
		.endw
	.endif

;------------------------------------------------------------------
; Strip IAT
;
;

	MOV EAX,FileMapVA
	ADD EAX,3Ch
	ADD AX,WORD PTR[EAX]		;WinME/98/95 compatibility!
	SUB AX,3Ch			;
	MOV EBX,DWORD PTR[EAX+0D8h]
	MOV ECX,DWORD PTR[EAX+0DCh]
	.if EBX > 0 && ECX > 0
		ADD EBX,ImageBase
		INVOKE ConvertVA2FO,FileMapVA,EBX
		ADD EAX,FileMapVA
		INVOKE RtlZeroMemory,EAX,ECX
	.endif

;------------------------------------------------------------------
; Strip export table
;
;

	.if oExportTable == 1 && IsDll == 0
		MOV EAX,FileMapVA
		ADD EAX,3Ch
		ADD AX,WORD PTR[EAX]		;WinME/98/95 compatibility!
		SUB AX,3Ch			;
		MOV EBX,DWORD PTR[EAX+78h]
		MOV ECX,DWORD PTR[EAX+7Ch]
		.if EBX > 0 && ECX > 0
			ADD EBX,ImageBase
			INVOKE ConvertVA2FO,FileMapVA,EBX
			ADD EAX,FileMapVA
			INVOKE RtlZeroMemory,EAX,ECX
		.endif
	.endif

;------------------------------------------------------------------

	CALL FindMainIcon

;------------------------------------------------------------------
; Load Resources
;
;

	PUSH offset szPackingResources
	CALL _show_log_message

	PUSH MAIN_ICON

	MOV pFirst,1
	MOV EBX,FileMapVA
	ADD EBX,3Ch
	ADD BX,WORD PTR[EBX]		;WinME/98/95 compatibility!
	SUB BX,3Ch			;

	MOV PEHeader,EBX
	MOV EAX,DWORD PTR[EBX+88h]
	.if EAX != 0
		ADD EAX,ImageBase
		INVOKE ConvertVA2FO,FileMapVA,EAX
		ADD EAX,FileMapVA
		MOV pRSRC,EAX

		MOVZX EBX,WORD PTR[EAX+12]
		ADD BX,WORD PTR[EAX+14]
		MOV Level1_CNT,EBX
		ADD EAX,16
		.while Level1_CNT > 0
			MOV EBX,DWORD PTR[EAX]
			MOV pType,EBX
			MOV EBX,DWORD PTR[EAX+4]
			XOR EBX,80000000h
			ADD EBX,pRSRC
			MOVZX ECX,WORD PTR[EBX+12]
			ADD CX,WORD PTR[EBX+14]
			MOV Level2_CNT,ECX
			ADD EBX,16
                        .while Level2_CNT > 0
				MOV ECX,DWORD PTR[EBX]
				MOV pName,ECX
				.if pFirst == 1
					PUSHAD
					MOV ECX,DWORD PTR[EBX]
					.if ECX > 80000000h || pType > 80000000h
						.if ECX < 80000000h
							MOV ECX,pType
						.endif
						XOR ECX,80000000h
						ADD ECX,pRSRC
						.if BYTE PTR[ECX] != NULL
							.while BYTE PTR[ECX] != NULL
								ADD ECX,2
							.endw
							MOV pFirst,2
							ADD ECX,2
							SUB ECX,pRSRC
							MOV RSRCSize,ECX
						.endif
					.endif
					POPAD
				.endif
				MOV ECX,DWORD PTR[EBX+4]
				XOR ECX,80000000h
				ADD ECX,pRSRC
				MOVZX EDX,WORD PTR[ECX+12]
				ADD DX,WORD PTR[ECX+14]
				MOV Level3_CNT,EDX
				ADD ECX,16
				.while Level3_CNT > 0
					MOV EDX,DWORD PTR[ECX+4]
					ADD EDX,pRSRC
					MOV EDI,DWORD PTR[EDX]
					MOV pDataRVA,EDI
					MOV EDI,DWORD PTR[EDX+4]
					MOV pSize,EDI

					.if pFirst == 1
						MOV pFirst,0
						PUSHAD
						MOV EAX,pDataRVA
						ADD EAX,ImageBase
						INVOKE ConvertVA2FO,FileMapVA,EAX
						ADD EAX,FileMapVA
						SUB EAX,pRSRC
						MOV RSRCSize,EAX
						PUSHAD
						ADD EAX,500000h
						MOV pRSRCBuffSize,EAX
						INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
						MOV pRSRCBuff,EAX
						MOV pRSRCBuffPos,EAX
						INVOKE RtlMoveMemory,pRSRCBuff,pRSRC,RSRCSize
						MOV EAX,RSRCSize
						ADD pRSRCBuffPos,EAX
						POPAD
						POPAD
					.elseif pFirst == 2
						MOV pFirst,0
						PUSHAD
						MOV EAX,RSRCSize
						ADD EAX,500000h
						MOV pRSRCBuffSize,EAX
						INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
						MOV pRSRCBuff,EAX
						MOV pRSRCBuffPos,EAX
						INVOKE RtlMoveMemory,pRSRCBuff,pRSRC,RSRCSize
						MOV EAX,RSRCSize
						ADD pRSRCBuffPos,EAX
						POPAD
					.endif
					PUSHAD
					MOV rPack,0
					MOV EAX,pType
					MOV EBX,offset rawbuffer
					.while DWORD PTR[EBX] != 0
						.if DWORD PTR[EBX] == EAX
							MOV rPack,1
						.endif
						ADD EBX,4
					.endw
					.if rPack == 0
						MOV EAX,pType
						.if EAX > 80000000h
							XOR EAX,80000000h
							ADD EAX,pRSRC
							.if WORD PTR[EAX] > 0
								MOVZX ECX,WORD PTR[EAX]
								ADD EAX,2
								.while ECX > 0 && BYTE PTR[EAX] != 0
									ADD EAX,2
									DEC ECX
								.endw
								.if ECX == NULL
									XOR EDX,EDX
									MOV EAX,pType
									XOR EAX,80000000h
                                                                        ADD EAX,pRSRC
                                                                        ADD EAX,2
                                                                        MOV EBX,EAX
                                                                        MOV EAX,offset szTYPELIB
                                                                        .while BYTE PTR[EAX] != 0
										MOVZX ECX,BYTE PTR[EAX]
										.if CL != BYTE PTR[EBX]
											INC EDX
										.endif
										ADD EBX,2
										ADD EAX,2
                                                                        .endw
                                                                        .if EDX == NULL
										MOV rPack,1
                                                                        .endif
								.endif
							.endif
						.endif
					.endif
					POPAD
					.if pType == 03h || pType == 10h || pType == 0Eh || pType == 18h || rPack == 1
						PUSHAD
						.if ((pType == 03h) && (MAIN_ICON > 0)) || (pType != 03h) || rPack == 1
							.if pType == 03h
								DEC MAIN_ICON
							.endif
							MOV EAX,pDataRVA
							ADD EAX,ImageBase
							INVOKE ConvertVA2FO,FileMapVA,EAX
							ADD EAX,FileMapVA
							MOV EBX,SizeOfImage
							ADD EBX,1000h
							MOV ECX,hPackedFilePos
							SUB ECX,hPackedFileBuff
							SUB ECX,200h
							ADD ECX,EBX
							MOV EBX,pRSRCBuffPos
							SUB EBX,pRSRCBuff
							ADD ECX,EBX

							PUSHAD
							INVOKE RtlMoveMemory,pRSRCBuffPos,EAX,pSize
							MOV EAX,pSize
							ADD pRSRCBuffPos,EAX
							POPAD

							SUB EDX,pRSRC
							ADD EDX,pRSRCBuff
							MOV DWORD PTR[EDX],ECX
						.endif
						POPAD
					.endif

					ADD ECX,8
					DEC Level3_CNT
				.endw
				ADD EBX,8
				DEC Level2_CNT
                        .endw
			ADD EAX,8
			DEC Level1_CNT
		.endw

		MOV EBX,hPackedFileBuff
		ADD EBX,3Ch
		ADD BX,WORD PTR[EBX]		;WinME/98/95 compatibility!
		SUB BX,3Ch			;

		MOV PEHeader,EBX
	
		MOV EBX,SizeOfImage
		ADD EBX,1000h
		MOV ECX,hPackedFilePos
		SUB ECX,hPackedFileBuff
		SUB ECX,200h
		ADD ECX,EBX

		MOV EAX,pRSRCBuffPos
		SUB EAX,pRSRCBuff
		PUSH EAX
		PUSH pRSRCBuff
		CALL WriteData
	
		MOV EAX,PEHeader
		MOV DWORD PTR[EAX+88h],ECX
		MOV ECX,pRSRCBuffPos
		SUB ECX,pRSRCBuff
		MOV DWORD PTR[EAX+8Ch],ECX
	.endif

	POP MAIN_ICON

	MOV EBX,FileMapVA
	ADD EBX,3Ch
	ADD BX,WORD PTR[EBX]		;WinME/98/95 compatibility!
	SUB BX,3Ch			;
	MOV PEHeader,EBX

;------------------------------------------------------------------

	PUSH offset szPackingSections
	CALL _show_log_message

;------------------------------------------------------------------
; Pack sections / aplib
;

	.if Compressor == 1
		MOV FirstSection,0
		MOV EAX,PEHeader
		ADD AX,WORD PTR[EAX+14h]
		ADD EAX,18h
		MOV CurrentSectionOffset,EAX
		MOV ESI,offset PackedSectionTable
		MOV EDI,hPackedFilePos
		.while CurrentSectionNumber > 0
			MOV EBX,CurrentSectionOffset
			MOV ECX,FileMapVA
			ADD EBX,8
			MOV EAX,DWORD PTR[EBX]
			MOV VirtualSize,EAX
			MOV EAX,DWORD PTR[EBX+4]
			MOV VirtualOffset,EAX
			MOV EAX,DWORD PTR[EBX+8]
			MOV RawSize,EAX
			MOV EAX,DWORD PTR[EBX+12]
			MOV RawOffset,EAX
			MOV CompressSectionOffset,EAX
			ADD CompressSectionOffset,ECX
			MOV EAX,DWORD PTR[EBX+1Ch]
			MOV SectionFlags,EAX
	
			SUB EBX,8
			PUSH EBX
			PUSH SectionFlags
			CALL IsSectionPackable
			.if RawSize > 0
				.if EAX == 1
					CALL initProgress
					.if FirstSection == 0
						PUSHAD
						MOV EAX,VirtualOffset
						ADD EAX,ImageBase
						INVOKE FilterCode,EAX,CompressSectionOffset,RawSize
						MOV EAX,VirtualOffset
						MOV FirstSectionOffset,EAX
						MOV EAX,RawSize
						MOV FirstSectionSize,EAX
						MOV FirstSection,1
						POPAD
					.endif
					MOV DWORD PTR[ESI],EDI
					ADD ESI,4
					MOV EAX,VirtualOffset
;					ADD EAX,ImageBase
					MOV DWORD PTR[ESI],EAX
					ADD ESI,4
	
					INVOKE aP_max_packed_size,RawSize
					MOV OutMemBuffSize,EAX
		
					INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
		
					MOV OutMemBuff,EAX
					INVOKE aP_workmem_size,RawSize
					MOV WorkMemSize,EAX
		
					INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
		
					MOV WorkMemBuff,EAX
		
					INVOKE aP_pack,CompressSectionOffset,OutMemBuff,RawSize,WorkMemBuff,addr cProgress,NULL
					ADD EAX,4
					MOV PackedSize,EAX
					ADD EDI,PackedSize
	
					INVOKE VirtualFree,WorkMemBuff,WorkMemSize,MEM_DECOMMIT
					PUSH PackedSize
					PUSH OutMemBuff
					CALL WriteData
		
					INVOKE VirtualFree,OutMemBuff,OutMemBuffSize,MEM_DECOMMIT
				.elseif EAX == 2
					NOP
				.elseif EAX == 3
					.if oStripRSRC == 0
						CALL RSRCPack
					.endif
					CALL initProgress			
					MOV DWORD PTR[ESI],EDI
					ADD ESI,4
					MOV EAX,VirtualOffset
;					ADD EAX,ImageBase
					MOV DWORD PTR[ESI],EAX
					ADD ESI,4
		
					INVOKE aP_max_packed_size,RawSize
					MOV OutMemBuffSize,EAX
		
					INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
		
					MOV OutMemBuff,EAX
					INVOKE aP_workmem_size,RawSize
					MOV WorkMemSize,EAX
		
					INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
		
					MOV WorkMemBuff,EAX
		
					INVOKE aP_pack,CompressSectionOffset,OutMemBuff,RawSize,WorkMemBuff,addr cProgress,NULL
					ADD EAX,4
					MOV PackedSize,EAX
					ADD EDI,PackedSize
		
					INVOKE VirtualFree,WorkMemBuff,WorkMemSize,MEM_DECOMMIT
					PUSH PackedSize
					PUSH OutMemBuff
					CALL WriteData
		
					INVOKE VirtualFree,OutMemBuff,OutMemBuffSize,MEM_DECOMMIT
					INVOKE VirtualFree,pRSRC,pSize,MEM_DECOMMIT
				.elseif EAX == 4
					MOV DWORD PTR[ESI],EDI
					ADD ESI,4
					MOV EAX,VirtualOffset
;					ADD EAX,ImageBase
					MOV DWORD PTR[ESI],EAX
					ADD ESI,4
					INVOKE CompressRelocations,CompressSectionOffset,RawSize
					MOV RawSize,EBX
					MOV CompressSectionOffset,EAX
					
					INVOKE aP_max_packed_size,RawSize
					MOV OutMemBuffSize,EAX
		
					INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
		
					MOV OutMemBuff,EAX
					INVOKE aP_workmem_size,RawSize
					MOV WorkMemSize,EAX
		
					INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
		
					MOV WorkMemBuff,EAX
		
					INVOKE aP_pack,CompressSectionOffset,OutMemBuff,RawSize,WorkMemBuff,addr cProgress,NULL
					ADD EAX,4
					MOV PackedSize,EAX
					ADD EDI,PackedSize
		
					INVOKE VirtualFree,WorkMemBuff,WorkMemSize,MEM_DECOMMIT
					PUSH PackedSize
					PUSH OutMemBuff
					CALL WriteData
		
					INVOKE VirtualFree,OutMemBuff,OutMemBuffSize,MEM_DECOMMIT
					INVOKE VirtualFree,CompressSectionOffset,RawSize,MEM_DECOMMIT
				.else
					ADD EDI,RawSize
		
					PUSH RawSize
					PUSH CompressSectionOffset
					CALL WriteData
				.endif
			.endif
			ADD CurrentSectionOffset,28h
			DEC CurrentSectionNumber
		.endw
	.endif

;------------------------------------------------------------------
; Pack sections / lzma
;

	.if Compressor == 2
		MOV FirstSection,0
		MOV EAX,PEHeader
		ADD AX,WORD PTR[EAX+14h]
		ADD EAX,18h
		MOV CurrentSectionOffset,EAX
		MOV ESI,offset PackedSectionTable
		MOV EDI,hPackedFilePos
		.while CurrentSectionNumber > 0
			MOV EBX,CurrentSectionOffset
			MOV ECX,FileMapVA
			ADD EBX,8
			MOV EAX,DWORD PTR[EBX]
			MOV VirtualSize,EAX
			MOV EAX,DWORD PTR[EBX+4]
			MOV VirtualOffset,EAX
			MOV EAX,DWORD PTR[EBX+8]
			MOV RawSize,EAX
			MOV EAX,DWORD PTR[EBX+12]
			MOV RawOffset,EAX
			MOV CompressSectionOffset,EAX
			ADD CompressSectionOffset,ECX
			MOV EAX,DWORD PTR[EBX+1Ch]
			MOV SectionFlags,EAX
	
			SUB EBX,8
			PUSH EBX
			PUSH SectionFlags
			CALL IsSectionPackable
			.if RawSize > 0
				.if EAX == 1
					CALL initProgress
					.if FirstSection == 0
						PUSHAD
						MOV EAX,VirtualOffset
						ADD EAX,ImageBase
						INVOKE FilterCode,EAX,CompressSectionOffset,RawSize
						MOV EAX,VirtualOffset

⌨️ 快捷键说明

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