?? rlp.asm
字號:
LEA ECX,DWORD PTR[EDX+((offset __locvf - offset __STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __vp - offset __STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __locvp - offset __STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __PE32_IMAGEBASE - offset __STUB_START))]
MOV EAX,ImageBase
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __RELOCATION - offset __STUB_START))]
MOV EAX,RelocationRVA
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __FILTER_CODE_START - offset __STUB_START))]
MOV EAX,FirstSectionOffset
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __FILTER_CODE_SIZE - offset __STUB_START))]
MOV EAX,FirstSectionSize
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __FILTER_CODE_BYTE - offset __STUB_START))]
MOV EAX,FilterByte
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __STUB_OEP_JUMP - offset __STUB_START))+1]
LEA ECX,DWORD PTR[EDX+((offset __STUB_OEP_JUMP - offset __STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,ECX
ADD EAX,ImageBase
MOV ECX,PackedOEP
SUB ECX,EAX
SUB ECX,5
MOV DWORD PTR[EBX],ECX
MOV EAX,RawSize
LEA EBX,DWORD PTR[EDX+((offset __STUB_VA_SIZE - offset __STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __STUB_VF_SIZE - offset __STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __iat - offset __STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV EBX,PEHeader
MOV DWORD PTR[EBX+80h],EAX
MOV DWORD PTR[EBX+84h],28h
.endif
;------------------------------------------------------------------
; Fix OEP and IAT / lzma
;
.if Compressor == 2 && IsDll == 0
INVOKE ConvertFO2VA,hPackedFileBuff,STUB_OEP
MOV EBX,PEHeader
ADD EBX,28h
MOV DWORD PTR[EBX],EAX
MOV ESI,EAX
ADD ESI,ImageBase
MOV EDX,STUB_OEP_OFFSET
LEA EBX,DWORD PTR[EDX+((offset __L_kernel32 - offset __L_STUB_START))]
LEA ECX,DWORD PTR[EDX+((offset __L_dllName_k - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_locloadlib - offset __L_STUB_START))]
LEA ECX,DWORD PTR[EDX+((offset __L_FirstThunk_k - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_loadlib - offset __L_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locloadlib - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_gpa - offset __L_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locgpa - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_va - offset __L_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locva - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_vf - offset __L_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locvf - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_vp - offset __L_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locvp - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_PE32_IMAGEBASE - offset __L_STUB_START))]
MOV EAX,ImageBase
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_RELOCATION - offset __L_STUB_START))]
MOV EAX,RelocationRVA
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_FILTER_CODE_START - offset __L_STUB_START))]
MOV EAX,FirstSectionOffset
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_FILTER_CODE_SIZE - offset __L_STUB_START))]
MOV EAX,FirstSectionSize
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_FILTER_CODE_BYTE - offset __L_STUB_START))]
MOV EAX,FilterByte
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_STUB_OEP_JUMP - offset __L_STUB_START))+1]
LEA ECX,DWORD PTR[EDX+((offset __L_STUB_OEP_JUMP - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,ECX
ADD EAX,ImageBase
MOV ECX,PackedOEP
SUB ECX,EAX
SUB ECX,5
MOV DWORD PTR[EBX],ECX
MOV EAX,RawSize
LEA EBX,DWORD PTR[EDX+((offset __L_STUB_VA_SIZE - offset __L_STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_STUB_VF_SIZE - offset __L_STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_iat - offset __L_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV EBX,PEHeader
MOV DWORD PTR[EBX+80h],EAX
MOV DWORD PTR[EBX+84h],28h
.endif
;------------------------------------------------------------------
; Fix OEP and IAT / aplib
;
.if Compressor == 1 && IsDll == 1
INVOKE ConvertFO2VA,hPackedFileBuff,STUB_OEP
MOV EBX,PEHeader
ADD EBX,28h
MOV DWORD PTR[EBX],EAX
MOV ESI,EAX
ADD ESI,ImageBase
MOV EDX,STUB_OEP_OFFSET
LEA EBX,DWORD PTR[EDX+((offset __kernel32 - offset __DLL_STUB_START))]
LEA ECX,DWORD PTR[EDX+((offset __dllName - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __locloadlib - offset __DLL_STUB_START))]
LEA ECX,DWORD PTR[EDX+((offset __FirstThunk - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __loadlib - offset __DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __locloadlib - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __gpa - offset __DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __locgpa - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __va - offset __DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __locva - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __vf - offset __DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __locvf - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __vp - offset __DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __locvp - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __PE32_IMAGEBASE - offset __DLL_STUB_START))]
MOV EAX,ImageBase
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __RELOCATION - offset __DLL_STUB_START))]
MOV EAX,RelocationRVA
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __FILTER_CODE_START - offset __DLL_STUB_START))]
MOV EAX,FirstSectionOffset
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __FILTER_CODE_SIZE - offset __DLL_STUB_START))]
MOV EAX,FirstSectionSize
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __FILTER_CODE_BYTE - offset __DLL_STUB_START))]
MOV EAX,FilterByte
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __STUB_OEP_JUMP - offset __DLL_STUB_START))+1]
LEA ECX,DWORD PTR[EDX+((offset __STUB_OEP_JUMP - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,ECX
ADD EAX,ImageBase
MOV ECX,PackedOEP
SUB ECX,EAX
SUB ECX,5
MOV DWORD PTR[EBX],ECX
MOV EAX,RawSize
LEA EBX,DWORD PTR[EDX+((offset __STUB_VA_SIZE - offset __DLL_STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __STUB_VF_SIZE - offset __DLL_STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __iat - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV EBX,PEHeader
MOV DWORD PTR[EBX+080h],EAX
MOV DWORD PTR[EBX+084h],28h
LEA EAX,DWORD PTR[EDX+((offset __WIN9x_RELOCATION - offset __DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EAX
MOV DWORD PTR[EBX+0A0h],EAX
MOV DWORD PTR[EBX+0A4h],8
.endif
;------------------------------------------------------------------
; Fix OEP and IAT / lzma
;
.if Compressor == 2 && IsDll == 1
INVOKE ConvertFO2VA,hPackedFileBuff,STUB_OEP
MOV EBX,PEHeader
ADD EBX,28h
MOV DWORD PTR[EBX],EAX
MOV ESI,EAX
ADD ESI,ImageBase
MOV EDX,STUB_OEP_OFFSET
LEA EBX,DWORD PTR[EDX+((offset __L_kernel32 - offset __L_DLL_STUB_START))]
LEA ECX,DWORD PTR[EDX+((offset __L_dllName_k - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_locloadlib - offset __L_DLL_STUB_START))]
LEA ECX,DWORD PTR[EDX+((offset __L_FirstThunk_k - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_loadlib - offset __L_DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locloadlib - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_gpa - offset __L_DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locgpa - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_va - offset __L_DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locva - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_vf - offset __L_DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locvf - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_vp - offset __L_DLL_STUB_START))-2]
LEA ECX,DWORD PTR[EDX+((offset __L_locvp - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_PE32_IMAGEBASE - offset __L_DLL_STUB_START))]
MOV EAX,ImageBase
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_RELOCATION - offset __L_DLL_STUB_START))]
MOV EAX,RelocationRVA
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_FILTER_CODE_START - offset __L_DLL_STUB_START))]
MOV EAX,FirstSectionOffset
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_FILTER_CODE_SIZE - offset __L_DLL_STUB_START))]
MOV EAX,FirstSectionSize
MOV DWORD PTR[ECX],EAX
LEA ECX,DWORD PTR[EDX+((offset __L_FILTER_CODE_BYTE - offset __L_DLL_STUB_START))]
MOV EAX,FilterByte
MOV DWORD PTR[ECX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_STUB_OEP_JUMP - offset __L_DLL_STUB_START))+1]
LEA ECX,DWORD PTR[EDX+((offset __L_STUB_OEP_JUMP - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,ECX
ADD EAX,ImageBase
MOV ECX,PackedOEP
SUB ECX,EAX
SUB ECX,5
MOV DWORD PTR[EBX],ECX
MOV EAX,RawSize
LEA EBX,DWORD PTR[EDX+((offset __L_STUB_VA_SIZE - offset __L_DLL_STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_STUB_VF_SIZE - offset __L_DLL_STUB_START))+1]
MOV DWORD PTR[EBX],EAX
LEA EBX,DWORD PTR[EDX+((offset __L_iat - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EBX
MOV EBX,PEHeader
MOV DWORD PTR[EBX+80h],EAX
MOV DWORD PTR[EBX+84h],28h
LEA EAX,DWORD PTR[EDX+((offset __L_WIN9x_RELOCATION - offset __L_DLL_STUB_START))]
INVOKE ConvertFO2VA,hPackedFileBuff,EAX
MOV DWORD PTR[EBX+0A0h],EAX
MOV DWORD PTR[EBX+0A4h],8
.endif
;------------------------------------------------------------------
; Write packed file to disk
;
;
INVOKE UnmapFile
INVOKE CreateOutFile,addr szOpenFileName
MOV EAX,hPackedFilePos
SUB EAX,hPackedFileBuff
INVOKE WriteFile,hPackedFile,hPackedFileBuff,EAX,addr NumberOfBytesWritten,NULL
INVOKE CloseOutFile
;------------------------------------------------------------------
; Copy Overlay
;
.if oOverlay == 1 && OverlayExists > 0
PUSH offset szSaveOverlay
CALL _show_log_message
INVOKE AddOverlay,addr szOpenFileName,addr szTMP
INVOKE DeleteFile,addr szTMP
.endif
;------------------------------------------------------------------
; Free memory
;
;
INVOKE VirtualFree,pRSRCBuff,pRSRCBuffSize,MEM_DECOMMIT
INVOKE VirtualFree,DLLNameBuff_Base,500000h,MEM_DECOMMIT
INVOKE VirtualFree,APINameBuff_Base,500000h,MEM_DECOMMIT
MOV EAX,FileSize
ADD EAX,500000h
INVOKE VirtualFree,hPackedFileBuff,EAX,MEM_DECOMMIT
PUSH offset szFilePacked
CALL _show_log_message
INVOKE MapFile,addr szOpenFileName
MOV EAX,FileSize
MOV PackedSize,EAX
PUSH EAX
PUSH offset PSize_format
PUSH offset buffer
CALL wsprintf
ADD ESP,0Ch
PUSH 604
PUSH DWORD PTR DS:[HW]
CALL GetDlgItem
PUSH offset buffer
PUSH EAX
CALL SetWindowText
INVOKE UnmapFile
MOV Ratio,0
FILD PackedSize
FILD OriginalSize
FDIV ST(1),ST(0)
FILD Hundred
FMUL ST(0),ST(2)
FIST Ratio
PUSH Ratio
PUSH offset Ratio_format
PUSH offset buffer
CALL wsprintf
ADD ESP,0Ch
PUSH 605
PUSH DWORD PTR DS:[HW]
CALL GetDlgItem
PUSH offset buffer
PUSH EAX
CALL SetWindowText
ERROR_EXIT:
PUSH offset szPackEnded
CALL _show_log_message
MOV ThreadRunning,0
POPAD
RET
;
; Kraj packera
;------------------------------------------------------------------
; Predefinisane funkcije
;------------------------------------------------------------------
CompressRelocations proc dwRelocationOffset:DWORD,dwRelocationSize:DWORD
LOCAL dwLastRelocPlace :DWORD
LOCAL dwCompressedReloc :DWORD
LOCAL dwCompressedRelocPos :DWORD
LOCAL dwCompressedRelocBase :DWORD
LOCAL dwThisRelocationSize :DWORD
PUSHAD
MOV dwCompressedReloc,0
MOV ESI,dwRelocationOffset
.if ESI != 0
INVOKE VirtualAlloc,NULL,dwRelocationSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE
MOV dwCompressedReloc,EAX
MOV dwCompressedRelocPos,EAX
MOV EDI,ImageBase
.while DWORD PTR[ESI] != 0
MOV EDX,DWORD PTR[ESI]
MOV EAX,DWORD PTR[ESI+4]
MOV dwThisRelocationSize,EAX
ADD dwThisRelocationSize,ESI
MOV EAX,dwCompressedRelocPos
MOV DWORD PTR[EAX],EDX
MOV DWORD PTR[EAX+4],8
MOV dwCompressedRelocBase,EAX
ADD dwCompressedRelocBase,4
ADD dwCompressedRelocPos,8
MOV dwLastRelocPlace,-1
; ADD ESI,8
INVOKE SortRelocations,ESI,DWORD PTR[ESI+4]
.while DWORD PTR[ESI] != NULL;ESI < dwThisRelocationSize
MOVZX EAX,WORD PTR[ESI]
.if EAX != NULL
MOV EBX,EAX
SHR EBX,12
MOV ECX,EBX
IMUL EBX,1000h
SUB EAX,EBX
ADD EAX,EDX
ADD EAX,ImageBase
MOV EBX,EAX
INVOKE ConvertVA2FO,FileMapVA,EAX
ADD EAX,FileMapVA
.if ECX == 3
; SUB DWORD PTR[EAX],EDI
SUB EBX,ImageBase
MOV ECX,EBX
SUB EBX,EDX
.if dwLastRelocPlace != -1
ADD EBX,EDX
MOV EAX,EBX
SUB EBX,dwLastRelocPlace
MOV dwLastRelocPlace,EAX
.if EBX < 0E0h
MOV EAX,dwCompressedRelocPos
MOV BYTE PTR[EAX],BL
INC dwCompressedRelocPos
MOV EAX,dwCompressedRelocBase
INC DWORD PTR[EAX]
.else
ADD BX,0E000h
XCHG BL,BH
MOV EAX,dwCompressedRelocPos
MOV WORD PTR[EAX],BX
ADD dwCompressedRelocPos,2
MOV EAX,dwCompressedRelocBase
ADD DWORD PTR[EAX],2
.endif
.else
MOV dwLastRelocPlace,ECX
.if EBX < 0E0h
MOV EAX,dwCompressedRelocPos
MOV BYTE PTR[EAX],BL
INC dwCompressedRelocPos
MOV EAX,dwCompressedRelocBase
INC DWORD PTR[EAX]
.else
ADD BX,0E000h
XCHG BL,BH
MOV EAX,dwCompressedRelocPos
MOV WORD PTR[EAX],BX
ADD dwCompressedRelocPos,2
MOV EAX,dwCompressedRelocBase
ADD DWORD PTR[EAX],
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -