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

📄 rlp.asm

📁 RLPack1.20 一款优秀的压缩壳源代码.这个是官方最新的版本的源代码。壳完全采用masm32开发. 里面自带两款压缩引擎.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD

      .if uMsg == WM_INITDIALOG
		invoke SendMessage,hWin,WM_SETTEXT,0,ADDR dlgTitle
		invoke LoadIcon,hInstance,500    ; icon ID

		PUSH EAX
		PUSH 0
		PUSH 80h
		PUSH hWin
		CALL SendMessage

		PUSH 600
		PUSH DWORD PTR DS:[hWin]
		CALL GetDlgItem
		PUSH 1
		PUSH 600
		PUSH [hWin]
		CALL CheckDlgButton
		
		PUSH 601
		PUSH DWORD PTR DS:[hWin]
		CALL GetDlgItem
		PUSH 1
		PUSH 601
		PUSH [hWin]
		CALL CheckDlgButton

		PUSH 610
		PUSH DWORD PTR DS:[hWin]
		CALL GetDlgItem
		PUSH 1
		PUSH 610
		PUSH [hWin]
		CALL CheckDlgButton

		PUSH 611
		PUSH DWORD PTR DS:[hWin]
		CALL GetDlgItem
		PUSH 1
		PUSH 611
		PUSH [hWin]
		CALL CheckDlgButton

		PUSH 6Fh
		PUSH [hWin]
		CALL GetDlgItem
		MOV [BoxHwnd],EAX
		PUSH 0
		PUSH 0
		PUSH 184h
		PUSH [BoxHwnd]
		CALL SendMessage

		PUSHAD
		INVOKE LoadLibrary,addr szLZMA
		MOV hLZMA,EAX
		INVOKE GetProcAddress,hLZMA,addr szCompress
		MOV hCompress,EAX
		INVOKE GetProcAddress,hLZMA,addr szFreeCompressionMemory
		MOV hFreeCompressionMemory,EAX
		INVOKE GetDlgItem,hWin,1001
		MOV BoxHwnd2,EAX
		INVOKE SendMessage,BoxHwnd2,CB_ADDSTRING,NULL,addr szAPLIB
		INVOKE SendMessage,BoxHwnd2,CB_ADDSTRING,NULL,addr szSLZMA
		INVOKE SendMessage,BoxHwnd2,CB_SETCURSEL,NULL,NULL
		POPAD

		MOV EAX,[hWin]
		MOV [HW],EAX

		PUSHAD
		PUSH offset szInfo_Version
		CALL _show_log_message_2
		PUSH offset szInfo_UserName
		CALL _show_log_message_2
		PUSH offset szInfo_License1
		CALL _show_log_message_2
		POPAD

      .elseif uMsg == WM_DROPFILES
		PUSHAD
		invoke DragQueryFile,wParam,0,ADDR buffer,256
		INVOKE lstrcpy,addr szOpenFileName,addr buffer
		INVOKE lstrcpy,addr szPackedFileName,addr buffer
		INVOKE lstrcat,addr szPackedFileName,addr szPackedExe
		PUSH offset szOpenFileName
		PUSH 102
		PUSH DWORD PTR DS:[hWin]
		CALL SetDlgItemText
		POPAD

      .elseif uMsg == WM_CLOSE
        invoke EndDialog,hWin,0

      .elseif uMsg == WM_COMMAND

        .if wParam == 107
		.if BYTE PTR[szOpenFileName] != 0
			.if ThreadRunning == 0
				PUSH offset ThreadRunning
				PUSH NULL
				PUSH NULL
				PUSH offset pack
				PUSH NULL
				PUSH NULL
				CALL CreateThread
			.endif
		.else
			INVOKE MessageBox,NULL,addr szErrorText,addr szErrorTitle,30h
		.endif
        .endif
        .if wParam == 106
		INVOKE ShellExecute,NULL,addr szOpen,addr szCHM,NULL,NULL,TRUE
        .endif
        .if wParam == 108
		INVOKE GetExeFile

		.if BYTE PTR[szOpenFileName] != 0
			PUSH offset szOpenFileName
			PUSH 102
			PUSH DWORD PTR DS:[hWin]
			CALL SetDlgItemText
		.endif
        .endif
        .if wParam == 109
		INVOKE FindWindow,NULL,addr dlgTitle2
		.if EAX == NULL
		        INVOKE DialogBoxParam,hInstance,ADDR dlgname2,0,ADDR WndProc2,0
		.endif
        .endif
        .if wParam == 110
		INVOKE ShellExecute,NULL,addr szOpen,addr WebSite,NULL,NULL,TRUE
        .endif
        .if wParam == 112
		INVOKE FindWindow,NULL,addr dlgTitle3
		.if EAX == NULL
		        INVOKE DialogBoxParam,hInstance,ADDR dlgname3,0,ADDR WndProc3,0
		.endif
        .endif

      .endif

    xor eax, eax
    ret

WndProc endp
;------------------------------------------------------------------
; Pocetak packera
;
;
pack:
	PUSHAD
;
; Erase all variables!
;
	INVOKE RtlZeroMemory,addr FileHWND,4000
	MOV ThreadRunning,1

	INVOKE SendMessage,BoxHwnd2,CB_GETCURSEL,NULL,NULL
	INC EAX
	MOV Compressor,EAX

	PUSH 6Fh
	PUSH DWORD PTR DS:[HW]
	CALL GetDlgItem
	MOV [BoxHwnd],EAX
	PUSH 0
	PUSH 0
	PUSH 184h
	PUSH [BoxHwnd]
	CALL SendMessage

	PUSH offset szPackStart
	CALL _show_log_message

	INVOKE GetDlgItem,HW,1002
	MOV ESI,EAX
	INVOKE GetWindowTextLength,ESI
	INC EAX
	INVOKE GetWindowText,ESI,addr buffer,EAX
	INVOKE lstrcat,addr buffer,addr comma

	MOV EAX,offset buffer
	MOV EBX,offset rawbuffer
	MOV ECX,EAX
	.while BYTE PTR[EAX] != 0
		.if BYTE PTR[EAX] == ','
			MOV BYTE PTR[EAX],0
			MOV EDX,EAX
			PUSH ECX
			CALL _convert_text_2_number
			MOV DWORD PTR[EBX],EAX
			ADD EBX,4
			MOV EAX,EDX
			LEA ECX,DWORD PTR[EAX+1]
		.endif
		INC EAX
	.endw

	PUSH 600
	PUSH [HW]
	CALL IsDlgButtonChecked
	.if EAX == TRUE
		INVOKE CopyFile,addr szOpenFileName,addr szPackedFileName,FALSE
	.endif

	PUSH 601
	PUSH [HW]
	CALL IsDlgButtonChecked
	.if EAX == TRUE
		MOV oStripReloc,1
	.endif

	PUSH 602
	PUSH [HW]
	CALL IsDlgButtonChecked
	.if EAX == TRUE
		MOV oStripTLS,1
		INVOKE MessageBox,NULL,addr szStripTLS,addr szWarningTitle,MB_ICONWARNING+MB_YESNO
		.if EAX == 7
			MOV oStripTLS,0
		.endif
	.endif

	PUSH 610
	PUSH [HW]
	CALL IsDlgButtonChecked
	.if EAX == TRUE
		MOV oStripRSRC,1
	.endif

	PUSH 611
	PUSH [HW]
	CALL IsDlgButtonChecked
	.if EAX == TRUE
		MOV oOverlay,1
	.endif

	PUSH 619
	PUSH [HW]
	CALL IsDlgButtonChecked
	.if EAX == TRUE
		MOV oExportTable,1
	.endif

;------------------------------------------------------------------
; Check the PE32/exe file
;

	INVOKE MapFile,addr szOpenFileName
	MOV EBX,FileMapVA
	.if WORD PTR[EBX] != 'ZM'
		INVOKE MessageBox,NULL,addr szNotAValidEXEFile,addr szErrorTitle,MB_ICONERROR+MB_OK
		PUSH offset szUnpackable
		CALL _show_log_message
		INVOKE UnmapFile
		MOV EAX,offset ERROR_EXIT
		JMP EAX
	.endif
	ADD EBX,3Ch
	ADD BX,WORD PTR[EBX]		;WinME/98/95 compatibility!
	SUB BX,3Ch			;
	.if WORD PTR[EBX] != 'EP'
		INVOKE MessageBox,NULL,addr szNotAValidPEFile,addr szErrorTitle,MB_ICONERROR+MB_OK
		PUSH offset szUnpackable
		CALL _show_log_message
		INVOKE UnmapFile
		MOV EAX,offset ERROR_EXIT
		JMP EAX
	.endif
	MOVZX ECX,WORD PTR[EBX+6h]
	MOV EAX,DWORD PTR[EBX+28h]
	INVOKE GetSectionNumber,FileMapVA,EAX
	.if ECX > EAX
		INVOKE MessageBox,NULL,addr szFileAlreadyPacked,addr szErrorTitle,MB_ICONERROR+MB_YESNO
		.if EAX == 7
			INVOKE UnmapFile
			PUSH offset szUnpackable
			CALL _show_log_message
			INVOKE UnmapFile
			MOV EAX,offset ERROR_EXIT
			JMP EAX
		.endif
	.endif
	INVOKE UnmapFile

;------------------------------------------------------------------
; Copy Overlay
;

	.if oOverlay == 1
		INVOKE ExtractOverlay,addr szOpenFileName,addr szTMP
		.if EAX > 0
			MOV OverlayExists,EAX
		.endif
	.endif

;------------------------------------------------------------------
; Begin packing
;

	INVOKE MapFile,addr szOpenFileName

	MOV EAX,FileSize
	MOV OriginalSize,EAX
	PUSH EAX
	PUSH offset OSize_format
	PUSH offset buffer
	CALL wsprintf
	ADD ESP,0Ch
	PUSH 603
	PUSH DWORD PTR DS:[HW]
	CALL GetDlgItem
	PUSH offset buffer
	PUSH EAX
	CALL SetWindowText

	MOV EAX,FileSize
	ADD EAX,500000h
	INVOKE VirtualAlloc,NULL,EAX,MEM_COMMIT,PAGE_EXECUTE_READWRITE
	MOV hPackedFileBuff,EAX
	MOV hPackedFilePos,EAX

	INVOKE RtlMoveMemory,hPackedFilePos,addr nPEHeader,200h
	ADD hPackedFilePos,200h

	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+28h]
	MOV PackedOEP,EAX
	MOV EAX,DWORD PTR[EBX+34h]
	MOV ImageBase,EAX
	ADD PackedOEP,EAX
	MOVZX EAX,WORD PTR[EBX+6h]
	MOV NumberOfSections,EAX
	MOV CurrentSectionNumber,EAX

;------------------------------------------------------------------
; Load needed PE.data
;
;
	MOV EAX,DWORD PTR[EBX+8h]
	MOV TimeDateStamp,EAX
	MOV EAX,DWORD PTR[EBX+16h]
	MOV Characteristics,EAX
	MOVZX EAX,WORD PTR[EBX+5Ch]
	MOV SubSytem,EAX
	MOV EAX,DWORD PTR[EBX+0A0h]
	MOV IsDll,0
	MOV RelocationRVA,0
	TEST WORD PTR[Characteristics],2000h
	JE _not_a_dll
		MOV RelocationRVA,EAX
		MOV IsDll,1
 _not_a_dll:
 	.if IsDll == 1
		MOV EAX,hPackedFileBuff
		LEA EAX,DWORD PTR[EAX+1D0h]
		MOV DWORD PTR[EAX],"."
		MOV DWORD PTR[EAX+4],0
		INC EAX
		MOV DWORD PTR[EAX],"crsr"
 	.endif
	MOV EAX,DWORD PTR[EBX+098h]
	.if EAX != 0 && oOverlay == 1
		PUSHAD
		INVOKE MessageBox,NULL,addr szFoundCertificate,addr szWarningTitle,MB_ICONWARNING+MB_OK
		INVOKE DeleteFile,addr szTMP
		MOV oOverlay,0
		POPAD
	.endif
	MOV EAX,DWORD PTR[EBX+0E0h]
	MOV DelayImportTable,EAX
	MOV EAX,DWORD PTR[EBX+0E4h]
	MOV DelayImportTableSize,EAX

;------------------------------------------------------------------
; SizeOfImage calculation
;
;
	MOV EAX,DWORD PTR[EBX+50h]
	MOV EDI,EAX
	CDQ
	MOV ECX,1000h
	DIV ECX
	IMUL EAX,1000h
	.if EDI > EAX
		ADD EAX,1000h
	.endif
	MOV SizeOfImage,EAX

;------------------------------------------------------------------
; Load IAT
;
;

	PUSH offset szLoadIat
	CALL _show_log_message

	INVOKE VirtualAlloc,NULL,500000h,MEM_COMMIT,PAGE_EXECUTE_READWRITE
	MOV DLLNameBuff,EAX
	MOV DLLNameBuff_Base,EAX
	INVOKE VirtualAlloc,NULL,500000h,MEM_COMMIT,PAGE_EXECUTE_READWRITE
	MOV APINameBuff,EAX
	MOV APINameBuff_Base,EAX

	MOV EAX,PEHeader
	MOV EAX,DWORD PTR[EAX+80h]
	.if EAX != 0
		ADD EAX,ImageBase
		INVOKE ConvertVA2FO,FileMapVA,EAX
		ADD EAX,FileMapVA
		MOV DLLPointer,EAX
		.while DLLPointer != 0
			INC DLLNumber

			MOV EBX,DLLPointer
			ADD EBX,12
			MOV EBX,DWORD PTR[EBX]
			ADD EBX,ImageBase

			INVOKE ConvertVA2FO,FileMapVA,EBX
			ADD EAX,FileMapVA
			MOV EDI,EAX
			INVOKE lstrcpy,DLLNameBuff,EAX
			INVOKE lstrlen,DLLNameBuff
			INC EAX
			ADD DLLNameBuff,EAX
			INVOKE RtlZeroMemory,EDI,EAX

			MOV EBX,DLLPointer
			MOV ECX,DWORD PTR[EBX]
			MOV EDX,ECX
			ADD EDX,ImageBase

			ADD EBX,16
			MOV ECX,DWORD PTR[EBX]
			.if EDX == ImageBase
				ADD EDX,ECX
			.endif

;			ADD ECX,ImageBase

			MOV EAX,APINameBuff
			MOV DWORD PTR[EAX],ECX
			ADD APINameBuff,4

			INVOKE ConvertVA2FO,FileMapVA,EDX
			ADD EAX,FileMapVA
			.while DWORD PTR[EAX] != 0
				MOV EBX,DWORD PTR[EAX]
				.if EBX < 80000000h
					ADD EBX,2
					ADD EBX,ImageBase
					PUSHAD
					INVOKE ConvertVA2FO,FileMapVA,EBX
					ADD EAX,FileMapVA
					MOV EDI,EAX
					XOR EBX,EBX
					PUSHAD
					.while BYTE PTR[EDI] != 0
						MOV DL,BYTE PTR[EDI]
						ROL EBX,7
						XOR BL,DL
						INC EDI
					.endw
					MOV ECX,APINameBuff
					MOV DWORD PTR[ECX],EBX
					ADD APINameBuff,4
					POPAD

					INVOKE lstrlen,EDI
					ADD EAX,2
					SUB EDI,2
					INVOKE RtlZeroMemory,EDI,EAX
					POPAD
;					INC APINumber
				.else
					PUSHAD
					MOV ECX,APINameBuff
					MOV DWORD PTR[ECX],EBX
					ADD APINameBuff,4
					POPAD
;					INC APINumber
				.endif
				MOV DWORD PTR[EAX],0
				ADD EAX,4
			.endw
			ADD APINameBuff,4
			ADD DLLPointer,14h
			MOV EAX,DLLPointer

⌨️ 快捷键说明

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