get COM interface method address .
来源:互联网 发布:动力学分析软件 编辑:程序博客网 时间:2024/05/16 15:38
在r3 hook之前, 需要得到API地址.
如果要 hook 的是COM接口中的方法, 得到API地址的方法和得到普通Win32API地址的方法不同.
- /// @file prjGetComInterfaceMethodAddr.cpp
- /// @brief 得到COM接口方法地址
- #include "stdafx.h" ///< 由 <WinInet.h> 包含COM接口定义
- #include "prjGetComInterfaceMethodAddr.h"
- /// 自己从C++接口定义中拷贝出来的C风格接口定义
- /// 当前是C++程序,无法直接使用C风格接口定义
- /// 使用C风格接口定义,是为了得到COM接口虚表中的方法地址
- #include "ctype_interace.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- // The one and only application object
- CWinApp theApp;
- using namespace std;
- /// 得到 IWebBrowser::get_LocationURL 的函数地址
- ULONG_PTR GetComApiInterfaceAddr_IWebBrowser_get_LocationURL();
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- DWORD_PTR dwAddr = 0;
- int nRetCode = 0;
- HMODULE hModule = ::GetModuleHandle(NULL);
- if (hModule != NULL)
- {
- // initialize MFC and print and error on failure
- if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
- {
- // TODO: change error code to suit your needs
- _tprintf(_T("Fatal Error: MFC initialization failed\n"));
- nRetCode = 1;
- }
- else
- {
- dwAddr = GetComApiInterfaceAddr_IWebBrowser_get_LocationURL();
- _tprintf(
- L"GetComApiInterfaceAddr_"
- L"IWebBrowser_get_LocationURL = 0x%X\r\n",
- dwAddr);
- }
- }
- else
- {
- // TODO: change error code to suit your needs
- _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
- nRetCode = 1;
- }
- /** runresults
- GetComApiInterfaceAddr_IWebBrowser_get_LocationURL = 0x5D9C680C
- */
- getwchar();
- return nRetCode;
- }
- typedef HRESULT (STDMETHODCALLTYPE * PFN_get_LocationURL)(
- IWebBrowser * This,
- BSTR *LocationURL);
- DWORD_PTR GetComApiInterfaceAddr_IWebBrowser_get_LocationURL()
- {
- DWORD_PTR dwAddr = 0;
- HRESULT hr;
- IWebBrowser* pInterface = NULL;
- ctype_IWebBrowser * pCtypeInterface = NULL;
- PFN_get_LocationURL pfn_get_LocationURL = NULL;
- CoInitialize ( NULL );
- hr = CoCreateInstance ( CLSID_WebBrowser,
- NULL,
- CLSCTX_INPROC_SERVER,
- IID_IWebBrowser,
- (void**) &pInterface);
- if (SUCCEEDED(hr))
- {
- pCtypeInterface = (ctype_IWebBrowser *)pInterface;
- pfn_get_LocationURL = pCtypeInterface->lpVtbl->get_LocationURL;
- dwAddr = (DWORD_PTR)pfn_get_LocationURL;
- pInterface->Release();
- }
- CoUninitialize();
- return dwAddr;
- }
/// @file prjGetComInterfaceMethodAddr.cpp/// @brief 得到COM接口方法地址#include "stdafx.h" ///< 由 <WinInet.h> 包含COM接口定义#include "prjGetComInterfaceMethodAddr.h"/// 自己从C++接口定义中拷贝出来的C风格接口定义/// 当前是C++程序,无法直接使用C风格接口定义/// 使用C风格接口定义,是为了得到COM接口虚表中的方法地址#include "ctype_interace.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// The one and only application objectCWinApp theApp;using namespace std;/// 得到 IWebBrowser::get_LocationURL 的函数地址ULONG_PTR GetComApiInterfaceAddr_IWebBrowser_get_LocationURL();int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ DWORD_PTR dwAddr = 0;int nRetCode = 0;HMODULE hModule = ::GetModuleHandle(NULL);if (hModule != NULL){// initialize MFC and print and error on failureif (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0)){// TODO: change error code to suit your needs_tprintf(_T("Fatal Error: MFC initialization failed\n"));nRetCode = 1;}else{dwAddr = GetComApiInterfaceAddr_IWebBrowser_get_LocationURL(); _tprintf( L"GetComApiInterfaceAddr_" L"IWebBrowser_get_LocationURL = 0x%X\r\n", dwAddr);}}else{// TODO: change error code to suit your needs_tprintf(_T("Fatal Error: GetModuleHandle failed\n"));nRetCode = 1;} /** runresults GetComApiInterfaceAddr_IWebBrowser_get_LocationURL = 0x5D9C680C */ getwchar();return nRetCode;}typedef HRESULT (STDMETHODCALLTYPE * PFN_get_LocationURL)( IWebBrowser * This, BSTR *LocationURL);DWORD_PTR GetComApiInterfaceAddr_IWebBrowser_get_LocationURL(){ DWORD_PTR dwAddr = 0; HRESULT hr; IWebBrowser* pInterface = NULL; ctype_IWebBrowser * pCtypeInterface = NULL; PFN_get_LocationURL pfn_get_LocationURL = NULL; CoInitialize ( NULL ); hr = CoCreateInstance ( CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER, IID_IWebBrowser, (void**) &pInterface); if (SUCCEEDED(hr)) { pCtypeInterface = (ctype_IWebBrowser *)pInterface; pfn_get_LocationURL = pCtypeInterface->lpVtbl->get_LocationURL; dwAddr = (DWORD_PTR)pfn_get_LocationURL; pInterface->Release(); } CoUninitialize(); return dwAddr;}
- // stdafx.h : include file for standard system include files,
- // or project specific include files that are used frequently, but
- // are changed infrequently
- //
- #pragma once
- #include "targetver.h"
- #include <stdio.h>
- #include <tchar.h>
- #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
- #ifndef VC_EXTRALEAN
- #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
- #endif
- #include <afx.h>
- #include <afxwin.h> // MFC core and standard components
- #include <WinInet.h> ///< for COM Interface !
- #include <afxext.h> // MFC extensions
- #ifndef _AFX_NO_OLE_SUPPORT
- #include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
- #endif
- #ifndef _AFX_NO_AFXCMN_SUPPORT
- #include <afxcmn.h> // MFC support for Windows Common Controls
- #endif // _AFX_NO_AFXCMN_SUPPORT
- #include <iostream>
- // TODO: reference additional headers your program requires here
// stdafx.h : include file for standard system include files,// or project specific include files that are used frequently, but// are changed infrequently//#pragma once#include "targetver.h"#include <stdio.h>#include <tchar.h>#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit#ifndef VC_EXTRALEAN#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers#endif#include <afx.h>#include <afxwin.h> // MFC core and standard components#include <WinInet.h> ///< for COM Interface !#include <afxext.h> // MFC extensions#ifndef _AFX_NO_OLE_SUPPORT#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls#endif#ifndef _AFX_NO_AFXCMN_SUPPORT#include <afxcmn.h> // MFC support for Windows Common Controls#endif // _AFX_NO_AFXCMN_SUPPORT#include <iostream>// TODO: reference additional headers your program requires here
- /// @file ctype_interace.h
- /// @brief C风格的接口与方法定义
- /// 在C++程序中, 为了使用COM接口的虚表指针,
- /// 如果该COM接口为C++风格和C风格接口混合提供,
- /// 需要将C风格的接口拷贝出来改名使用
- /// 直接包含头文件,无法编译通过
- #ifndef __CTYPE_INTERACE_H__
- #define __CTYPE_INTERACE_H__
- /* C style interface */
- typedef struct IWebBrowserVtbl
- {
- BEGIN_INTERFACE
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- __RPC__in IWebBrowser * This,
- /* [in] */ __RPC__in REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- __RPC__in IWebBrowser * This);
- ULONG ( STDMETHODCALLTYPE *Release )(
- __RPC__in IWebBrowser * This);
- HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
- __RPC__in IWebBrowser * This,
- /* [out] */ __RPC__out UINT *pctinfo);
- HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
- __RPC__in IWebBrowser * This,
- /* [in] */ UINT iTInfo,
- /* [in] */ LCID lcid,
- /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
- HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
- __RPC__in IWebBrowser * This,
- /* [in] */ __RPC__in REFIID riid,
- /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
- /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
- /* [in] */ LCID lcid,
- /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
- /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
- IWebBrowser * This,
- /* [in] */ DISPID dispIdMember,
- /* [in] */ REFIID riid,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [out][in] */ DISPPARAMS *pDispParams,
- /* [out] */ VARIANT *pVarResult,
- /* [out] */ EXCEPINFO *pExcepInfo,
- /* [out] */ UINT *puArgErr);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GoBack )(
- __RPC__in IWebBrowser * This);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GoForward )(
- __RPC__in IWebBrowser * This);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GoHome )(
- __RPC__in IWebBrowser * This);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GoSearch )(
- __RPC__in IWebBrowser * This);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Navigate )(
- __RPC__in IWebBrowser * This,
- /* [in] */ __RPC__in BSTR URL,
- /* [unique][optional][in] */ __RPC__in_opt VARIANT *Flags,
- /* [unique][optional][in] */ __RPC__in_opt VARIANT *TargetFrameName,
- /* [unique][optional][in] */ __RPC__in_opt VARIANT *PostData,
- /* [unique][optional][in] */ __RPC__in_opt VARIANT *Headers);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(
- __RPC__in IWebBrowser * This);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh2 )(
- __RPC__in IWebBrowser * This,
- /* [unique][optional][in] */ __RPC__in_opt VARIANT *Level);
- /* [helpcontext][helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Stop )(
- __RPC__in IWebBrowser * This);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Application )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt IDispatch **ppDisp);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Parent )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt IDispatch **ppDisp);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Container )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt IDispatch **ppDisp);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Document )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt IDispatch **ppDisp);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_TopLevelContainer )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__out VARIANT_BOOL *pBool);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt BSTR *Type);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Left )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__out long *pl);
- /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Left )(
- __RPC__in IWebBrowser * This,
- /* [in] */ long Left);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Top )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__out long *pl);
- /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Top )(
- __RPC__in IWebBrowser * This,
- /* [in] */ long Top);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Width )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__out long *pl);
- /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Width )(
- __RPC__in IWebBrowser * This,
- /* [in] */ long Width);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Height )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__out long *pl);
- /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Height )(
- __RPC__in IWebBrowser * This,
- /* [in] */ long Height);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LocationName )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt BSTR *LocationName);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LocationURL )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__deref_out_opt BSTR *LocationURL);
- /* [helpcontext][helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Busy )(
- __RPC__in IWebBrowser * This,
- /* [retval][out] */ __RPC__out VARIANT_BOOL *pBool);
- END_INTERFACE
- } IWebBrowserVtbl;
- interface ctype_IWebBrowser ///< 改名了
- {
- CONST_VTBL struct IWebBrowserVtbl *lpVtbl;
- };
- #endif
0 0
- get COM interface method address .
- note : get COM interface method address
- Get ip address from an interface name
- Get IP Address using PHP(Accurate Method)
- How can I get the IPv4 address of an interface in linux from C code ?
- Get the IP address of a network interface in C using SIOCGIFADDR
- get ip address & mac address
- METHOD? or INTERFACE?
- method invocation of interface
- get ip address
- Get IP Address
- get mac address
- Get Mac Address
- This is class com.sumiplus.servlet.RedirectServlet, using the GET method
- COM 接口 Interface
- Get Mac Address in Java
- How to Get Mac Address
- ios & android get mac address
- 蓝桥杯【入门训练】 Fibonacci数列
- VS2013下cocos2dx3.0alpha1新工程创建
- hadoop-入门
- php main 与 iframe 相互通讯类(同域/跨域)
- [LeetCode] Permutations
- get COM interface method address .
- 【Java.Web】创建一个简单的Java Web项目
- [LeetCode] Permutations II
- AS函数复习
- 直接插入排序
- c# 异常找不到源代码的情况
- [cocos2dx]随机数的使用
- 模拟器设计--未完待续
- DP32 单词按照字典分割问题 Word Break Problem @geeksforgeeks