在研究挂马网页的时候,为了获得一个网页调用的ActiveX的函数,想出了如下方法:
Hook CoGetClassObject和CoGetClassObjectFromURL,IE创建AcitiveX的时候都调用这两个函数。
函数原型如下
CoGetClassObjectFromURL(REFCLSID rCLASSID, LPCWSTR szCODE, DWORD dwFileVersionMS, DWORD dwFileVersionLS, LPCWSTR szTYPE, LPBINDCTX pBindCtx, DWORD dwClsContext, LPVOID pvReserved, REFIID riid, LPVOID * ppv)
CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved,REFIID riid, LPVOID FAR* ppv)
其中 rCLASSID 是需要创建的ActiveX,LPVOID FAR* ppv是返回的接口指针,
对于我们感兴趣的ActiveX,我们直接返回自己实现的 IDispatch 接口,脚本要调用ActiveX的函数,都需要调用 IDispatch的 GetIDsOfNames方法来获得函数的Invoke ID,该方法原型如下:
GetIDsOfNames(REFIID riid,
LPOLESTR __RPC_FAR *rgszNames,
UINT cNames,
LCID lcid,
DISPID __RPC_FAR *rgDispId);
其中,rgszNames就是网页将要调用的函数名。
对于从IE不用GUID,而用ProgID调用ActiveX的方法,需要HOOK CLSIDFromProgID和CLSIDFromProgIDEx。
本文介绍了如何在研究挂马网页时,通过Hook CoGetClassObject和CoGetClassObjectFromURL函数来获取网页创建及调用ActiveX控件的详细过程。通过返回自定义的IDispatch接口,可以监控脚本调用ActiveX的函数,并利用GetIDsOfNames方法获取被调用的函数名。同时提到了对于使用ProgID调用ActiveX的情况,需要Hook CLSIDFromProgID和CLSIDFromProgIDEx。
1815

被折叠的 条评论
为什么被折叠?



