Dag allen.
Ik heb een vraag. Ik programmeer aardig wat in vba, en ik heb laatst iets nieuws uitgeprobeerd:
vbWatchdog (http://www.everythingaccess.com/vbwatchdog.htm).
Ik kwam er alleen maar niet achter hoe het werkte, dus was ik op onderzoek uit gegaan. Uiteindelijk blijkt dat (volgens de enige echte comment) een "virtueel com object" in het geheugen wordt geinjecteerd, door middel van precompiled code, waarna een object aangemaakt kan worden welke vast en zeker beschreven staat in dit object, en daarna zijn ook alle functies beschikbaar welke daar bij horen.
Nu heb ik daar op zich vraagtekens bij: in theorie kun je dus vast ook nare dingen doen met zo iets?
Maar meer geinteresseerd ben ik naar de mogelijkheden die mij dit zelf zou bieden: ik zou essentiele delen van code welke ik liever niet aan iedereen geef kennelijk een stuk beter kunnen beveiligen met zo een oplossing.
Wie is bekend met dit fenomeen en kan mij er meer over vertellen? Misschien heb ik het wel heel erg verkeerd.
en vanaf nu kan ie allerlei dingen doen zoals
Ik heb een vraag. Ik programmeer aardig wat in vba, en ik heb laatst iets nieuws uitgeprobeerd:
vbWatchdog (http://www.everythingaccess.com/vbwatchdog.htm).
Ik kwam er alleen maar niet achter hoe het werkte, dus was ik op onderzoek uit gegaan. Uiteindelijk blijkt dat (volgens de enige echte comment) een "virtueel com object" in het geheugen wordt geinjecteerd, door middel van precompiled code, waarna een object aangemaakt kan worden welke vast en zeker beschreven staat in dit object, en daarna zijn ook alle functies beschikbaar welke daar bij horen.
Nu heb ik daar op zich vraagtekens bij: in theorie kun je dus vast ook nare dingen doen met zo iets?
Maar meer geinteresseerd ben ik naar de mogelijkheden die mij dit zelf zou bieden: ik zou essentiele delen van code welke ik liever niet aan iedereen geef kennelijk een stuk beter kunnen beveiligen met zo een oplossing.
Wie is bekend met dit fenomeen en kan mij er meer over vertellen? Misschien heb ik het wel heel erg verkeerd.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| ‘ ———————————————-
‘ Virtual-COM initialization routine:
‘ ———————————————-
Private m_VCOMObject As Object
Private Sub Class_Initialize()
With m_Loader
.NativeCode = “%EEEE%::::PPPPPPPPPH+D$ XXXtNXXXXXXVSPPPPj PPPPPPPP4T)D$04P)D$,4’4 )D$($ PZ3D$@+D$ YQ3H +L$ XP3Q +T$0XPf55ntvf)B|+T$0+T$0+T$0R[YQ^VXP2CP<0tF1D$$kD$$@!L$$2CQ1D$$kD$$@!L$$2CR1D$$kD$$@!L$$2CS+\$,3BP1BP1rP3rP+T$( XXXXXXXXXXXXX[^tJAYAZQ4tPPPPH)D$@4pH)D$84'4 H)D$0$ PH+L$ H3AtH+D$ L3PtL+T$HXPf55{L+T$HL+T$HtqfA)B8ARA[YQXPA2CDHirF[Q^Z[IrzRM wGDDoeTtKTfdGVduCVduCGhiCGhygGhygCmzXGcH[D_J^DV VfF VX<TI@<_veu]flqomliCuelQxpdudatE@hrwIkzSMzvOizw_Mzw_MssLJssLZBCLZ@A]^@A]^TNa^oFmn^nIv@aSsbT?WeWnSg_DCgKjKWCgHe[wJGe;?@fj;Ifyr@cfMAmTN_rNKNzxilIhMnADMgDV@cm;<jihu?aE=]rdY\puMUpgDuAa;UqSWBSPSUG=LUFNNESSOPGVYEbGXQWROj__GHKjOj_MIHKj^x?IRh=XVh=XVKHa;r>cruLna=QKmvHmtvO]HXO]J\O]J\m]hV?]mXmQvgl=tdpaS RUqPBV \PRocNMQflywB>;gFluaO?jKF@UIO ai_vUJ[apwFqeFGfACZVu>[0″
.LoaderMem = VirtualAlloc(0, Len(.NativeCode), MEM_RESERVE_AND_COMMIT, PAGE_EXECUTE_RW)
If .LoaderMem = 0 Then Err.Raise ERR_OUT_OF_MEMORY
.RootObjectMem = VirtualAlloc(0, ROOTOBJECT_SIZE, MEM_RESERVE_AND_COMMIT, PAGE_EXECUTE_RW)
If .RootObjectMem = 0 Then Err.Raise ERR_OUT_OF_MEMORY
.vtbl_QueryInterface = .LoaderMem
.VTablePtr = VarPtr(m_Loader)
.Kernel32Handle = GetModuleHandleA(“KERNEL32″)
.GetProcAddress = GetProcAddress(.Kernel32Handle, “GetProcAddress”)
.SysFreeString = GetProcAddress(GetModuleHandleA(“OLEAUT32″), “SysFreeString”)
Set .HelperObject = New ErrEx_Helper
Call CopyMemory(ByVal .LoaderMem, ByVal .NativeCode, Len(.NativeCode))
Call CopyMemory(.RootObject, VarPtr(.VTablePtr), LenB(.VTablePtr))
.IgnoreFlag = TypeOf .RootObject Is VBA.Collection
Set .ClassFactory = (.RootObject)
Set .RootObject = Nothing
VirtualFree .LoaderMem, 0, MEM_RELEASE
Call .ClassFactory.Init(.Kernel32Handle, .GetProcAddress, OPTION_BASE + OPTION_FLAGS, VBA_VERSION, .HelperObject)
Set m_VCOMObject = .ClassFactory.GetErrEx()
End With
End Sub |
en vanaf nu kan ie allerlei dingen doen zoals
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Sub DoFinally()
Call m_VCOMObject.DoFinally
End Sub
Property Get IsEnabled() As Boolean
IsEnabled = m_VCOMObject.IsEnabled
End Property
Property Get SourceProject() As String
SourceProject = m_VCOMObject.SourceProject
End Property
Property Get SourceProjectFilename() As String
SourceProjectFilename = m_VCOMObject.SourceProjectFilename
End Property |