|
发表于 2011-7-25 08:39:24
|
显示全部楼层
话说我以前也分析过,写出这样的代码(还没分析完,因此不能使用):- Option Explicit
- Public Declare Function EbInitHost Lib "vba6.dll" (ByVal Unknown1 As Long, ByVal Unknown2 As Long, ByVal Unknown3 As Long, ByVal CallbacksAddress As Long, ByVal Unknown4 As Long, ByVal Unknown5 As Long, ByVal Unknown6 As Long, ByVal Unknown7 As Long, ByVal BaseAddress As Long, ByVal hwnd As Long) As Long
- Public Declare Function EbInitHostPart2 Lib "vba6.dll" (ByVal pString As Long, ByVal Unknown As Long) As Long
- Public Declare Function EbCreateCVbaExtEditors Lib "vba6.dll" (ByVal Unused1 As Long, ByVal Unused2 As Long, ByVal Unused3 As Long, ByVal Pointer As Long) As Long
- Public Declare Function EbInvokeItem Lib "vba6.dll" (ByVal Unknown As Long) As Long
- Public Declare Function EbExecuteLine Lib "vba6.dll " (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long
- Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleW" (ByVal lpModuleName As Long) As Long
- Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
- Function ExecuteLine(StringToExec As String, ByVal fCheckOnly As Long) As Long
- Dim hVBA6 As Long, Lng(4) As Long, Ptr1(67) As Long, Ptr As Long, MyStr As String, MyVar As Long
- hVBA6 = GetModuleHandle(StrPtr("vba6.dll"))
- If hVBA6 = 0 Then
- hVBA6 = LoadLibrary("vba6.dll")
- MsgBox Hex(hVBA6)
- Lng(0) = &H824448B
- Lng(1) = &HB24C0D8B
- Lng(2) = &H8890059
- Lng(3) = &H8C2C033
- Lng(4) = &H0
- Ptr1(23) = VarPtr(Lng(3))
- Ptr1(59) = VarPtr(Lng(0))
- Ptr1(67) = VarPtr(Lng(3))
- Ptr = VarPtr(Ptr1(0))
- MyStr = "Microsoft Visual Basic"
- EbInitHost 6, 0, &H1FE9, Ptr, &H134, 4, &H4E4, 0, GetModuleHandle(0), 0
- EbInitHostPart2 StrPtr(MyStr), 0
- EbCreateCVbaExtEditors 0, 0, 0, VarPtr(MyVar)
- EbInvokeItem &H1B
- End If
- ExecuteLine = EbExecuteLine(StrPtr(StringToExec), 0, 0, fCheckOnly)
- End Function
复制代码 |
|