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

📄 pe.bas

📁 这是一个电子书制作生成的工具源码,十分有价值,而且运用了加密解密的技术
💻 BAS
📖 第 1 页 / 共 2 页
字号:
Attribute VB_Name = "PE"

Option Explicit
Public Type IMAGE_DOS_HEADER
    Magic    As Integer
    cblp     As Integer
    cp       As Integer
    crlc     As Integer
    cparhdr  As Integer
    minalloc As Integer
    maxalloc As Integer
    ss       As Integer
    sp       As Integer
    csum     As Integer
    ip       As Integer
    cs       As Integer
    lfarlc   As Integer
    ovno     As Integer
    res(3)   As Integer
    oemid    As Integer
    oeminfo  As Integer
    res2(9)  As Integer
    lfanew      As Long
End Type

Public Type IMAGE_FILE_HEADER
    Machine              As Integer
    NumberOfSections     As Integer
    TimeDateStamp        As Long
    PointerToSymbolTable As Long
    NumberOfSymbols      As Long
    SizeOfOtionalHeader  As Integer
    Characteristics      As Integer
End Type

Public Type IMAGE_DATA_DIRECTORY
    DataRVA     As Long
    DataSize    As Long
End Type

Public Type IMAGE_OPTIONAL_HEADER
    Magic             As Integer
    MajorLinkVer      As Byte
    MinorLinkVer      As Byte
    CodeSize          As Long
    InitDataSize      As Long
    unInitDataSize    As Long
    EntryPoint        As Long
    CodeBase          As Long
    DataBase          As Long
    ImageBase         As Long
    SectionAlignment  As Long
    FileAlignment     As Long
    MajorOSVer        As Integer
    MinorOSVer        As Integer
    MajorImageVer     As Integer
    MinorImageVer     As Integer
    MajorSSVer        As Integer
    MinorSSVer        As Integer
    Win32Ver          As Long
    ImageSize         As Long
    HeaderSize        As Long
    Checksum          As Long
    Subsystem         As Integer
    DLLChars          As Integer
    StackRes          As Long
    StackCommit       As Long
    HeapReserve       As Long
    HeapCommit        As Long
    LoaderFlags       As Long
    RVAsAndSizes      As Long
    DataEntries(15)   As IMAGE_DATA_DIRECTORY
End Type

Public Type IMAGE_SECTION_HEADER
    SectionName(7)    As Byte
    Address           As Long
    VirtualAddress    As Long
    SizeOfData        As Long
    PData             As Long
    PReloc            As Long
    PLineNums         As Long
    RelocCount        As Integer
    LineCount         As Integer
    Characteristics   As Long
End Type

Type IMAGE_RESOURCE_DIR
    Characteristics   As Long
    TimeStamp         As Long
    MajorVersion      As Integer
    MinorVersion      As Integer
    NamedEntries      As Integer
    IDEntries         As Integer
End Type

Type RESOURCE_DIR_ENTRY
    Name              As Long
    Offset            As Long
End Type

Type RESOURCE_DATA_ENTRY
    Offset            As Long
    Size              As Long
    CodePage          As Long
    Reserved          As Long
End Type

Public Type IconDescriptor
    ID       As Long
    Offset   As Long
    Size     As Long
End Type

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
Public Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private SectionAlignment   As Long
Private FileAlignment      As Long
Private ResSectionRVA      As Long
Private ResSectionOffset   As Long
'检测PE文件是否有效
Public Function Valid_PE(hFile As Long) As Boolean

    Dim Buffer(12)      As Byte
    Dim lngBytesRead    As Long
    Dim tDosHeader      As IMAGE_DOS_HEADER

    If (hFile > 0) Then
        ReadFile hFile, tDosHeader, ByVal Len(tDosHeader), lngBytesRead, ByVal 0&
        CopyMemory Buffer(0), tDosHeader.Magic, 2
        If (Chr(Buffer(0)) & Chr(Buffer(1)) = "MZ") Then
            SetFilePointer hFile, tDosHeader.lfanew, 0, 0
            ReadFile hFile, Buffer(0), 4, lngBytesRead, ByVal 0&
            If (Chr(Buffer(0)) = "P") And (Chr(Buffer(1)) = "E") And (Buffer(2) = 0) And (Buffer(3) = 0) Then
                Valid_PE = True
                Exit Function
            End If
        End If
    End If

    Valid_PE = False

End Function
Public Function GetResTreeOffset(hFile As Long) As Long
    On Error GoTo ErrHandler:

    Dim tDos          As IMAGE_DOS_HEADER
    Dim tFile         As IMAGE_FILE_HEADER
    Dim tOptional     As IMAGE_OPTIONAL_HEADER
    Dim tSections()   As IMAGE_SECTION_HEADER
    Dim BytesRead     As Long
    Dim intC          As Integer
    Dim TreeFound     As Boolean

    TreeFound = False
    If (hFile > 0) Then
        SetFilePointer hFile, 0, 0, 0
        ' Get the offset of the Image File Header
        ReadFile hFile, tDos, Len(tDos), BytesRead, ByVal 0&
        SetFilePointer hFile, ByVal tDos.lfanew + 4, 0, 0
        ' Get the Image File Header and the Image Optional Header
        ReadFile hFile, tFile, Len(tFile), BytesRead, ByVal 0&
        ReadFile hFile, tOptional, Len(tOptional), BytesRead, ByVal 0&
        ' Get section headers
        ReDim tSections(tFile.NumberOfSections - 1) As IMAGE_SECTION_HEADER
        ReadFile hFile, tSections(0), Len(tSections(0)) * tFile.NumberOfSections, BytesRead, ByVal 0&
        ' Make sure there is a resource tree in this file
        If (tOptional.DataEntries(2).DataSize) Then
            ' Save section alignment and file alignment of image
            SectionAlignment = tOptional.SectionAlignment
            FileAlignment = tOptional.FileAlignment
            ' Determine which section contains the resource tree
            For intC = 0 To UBound(tSections)
                If (tSections(intC).VirtualAddress <= tOptional.DataEntries(2).DataRVA) _
                        And ((tSections(intC).VirtualAddress + tSections(intC).SizeOfData) > tOptional.DataEntries(2).DataRVA) Then
                    TreeFound = True
                    ' Save RVA and offset of resource section for future calculations
                    ResSectionRVA = tSections(intC).VirtualAddress
                    ResSectionOffset = tSections(intC).PData
                    ' Calculate the physical file offset of the resouce tree
                    GetResTreeOffset = tSections(intC).PData + (tOptional.DataEntries(2).DataRVA - tSections(intC).VirtualAddress)
                    Exit For
                End If
            Next intC
            If Not TreeFound Then
                GetResTreeOffset = -1
            End If
        Else
            GetResTreeOffset = -1
        End If
    Else
        GetResTreeOffset = -1
    End If
    Exit Function

ErrHandler:
    MsgBox "An error occurred while locating the resource tree. " _
            & " Please make sure neither of the specified files are in use.", vbOKOnly + vbExclamation, _
            App.EXEName & " - " & Err.Description

End Function
Public Function GetIconOffsets(hFile As Long, TreeOffset As Long, Icons() As IconDescriptor) As Long
    On Error GoTo ErrHandler:

    Dim Root          As IMAGE_RESOURCE_DIR                ' Root node of resource tree
    Dim L1Entries()   As RESOURCE_DIR_ENTRY                ' 1st level of directory entries
    Dim L2Root()      As IMAGE_RESOURCE_DIR                ' Level 2 resource directories
    Dim L2Entries()   As RESOURCE_DIR_ENTRY                ' 2nd level of directory entries
    Dim L3Root()      As IMAGE_RESOURCE_DIR                ' Level 3 resource directories
    Dim L3Entries()   As RESOURCE_DIR_ENTRY                ' 3rd level of directory entries
    Dim DataEntries() As RESOURCE_DATA_ENTRY               ' Resource data entries
    Dim DIB           As DIB_HEADER                        ' Descriptor for icon images
    Dim iLvl1         As Integer                           ' Loop Counter (first level)
    Dim iLvl2         As Integer                           ' Loop Counter (second level)
    Dim iLvl3         As Integer                           ' Loop Counter (third level)
    Dim Cursor        As Long                              ' Temp val for setting file pointer
    Dim BytesRead     As Long                              ' For ReadFile()
    Dim Count         As Integer                           ' Number of icons found

    If (hFile > 0) Then
        Count = 0

⌨️ 快捷键说明

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