?? rlp.asm
字號:
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 + -