• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            春暖花開
            雪化了,花開了,春天來了
            posts - 149,comments - 125,trackbacks - 0

            摘自: http://yulinlu.blog.163.com/blog/static/588156982008113111911557/
            PerformCallBack4

            強制令別的進程調用某個API,如果這個API是LoadLibrary的話,就相當于線程注入了,由coredll.dll提供

            PerformCallBack4函數的定義:

            [DllImport("coredll.dll")]
            public static extern uint PerformCallBack4(ref CallBackInfo CallBackInfo,
            IntPtr ni_pVoid1,IntPtr ni_pVoid2,IntPtr ni_pVoid3);

            其中函數的參數CallBackInfo結構定義:
            public struct CallBackInfo
            {
            public IntPtr hProc; //遠程的目標進程
            public IntPtr pfn; //指向遠程目標進程的函數地址的指針
            public IntPtr pvArg0; //函數的需要的第一個參數
            }

            而PerformCallback4的 ni_pVoid1、ni_pVoid2、ni_pVoid3為傳遞到遠程目標進程執行函數的其它三個參數。

            例子:
            /*-------------------------------------------------------------------
               FUNCTION: CallCoredllInProc
               PURPOSE:  CallCoredllInProc uses undocumented method
                PerformCallBack4 to call exported methods from coredll.dll in
                the specified process.
               PARAMETERS:
                HANDLE  p_hProcess - handle to the process, where the call should
                    be made
                LPCTSTR p_pszMethodName - name of method exported from coredll,
                    such as VirtualAlloc, VirtualFree, etc.
                DWORD p_dwParam1, p_dwParam2, p_dwParam3, p_dwParam4 - arguments
                DWORD * p_pdwResult - pointer to the return value
               RETURNS:
                TRUE on success, FALSE on failure
            -------------------------------------------------------------------*/
            BOOL CallCoredllInProc
            (
                HANDLE  p_hProcess,
                LPCTSTR p_pszMethodName,
                DWORD   p_dwParam1, DWORD p_dwParam2,
                DWORD   p_dwParam3, DWORD p_dwParam4,
                DWORD * p_pdwResult)
            {
                HINSTANCE l_hCoreDll = NULL;
                BOOL l_bReturn = FALSE;
                __try
                {
                    //Use undocumented method PerformCallBack4
                    //to call method in NK.EXE.
                    CALLBACKINFO CallbackInfo;
                    CallbackInfo.m_hDestinationProcessHandle = p_hProcess;
                    l_hCoreDll = LoadLibrary(_T("COREDLL"));
                    CallbackInfo.m_pFunction =
                        (FARPROC)GetProcAddress(l_hCoreDll, p_pszMethodName);
                    if(!CallbackInfo.m_pFunction)
                    {
                        /*HTRACE(TG_Error,
                            _T("GetProcAddress(%x, %s) failed. Err %d"),
                            l_hCoreDll, p_pszMethodName, GetLastError());
                        */
                    }
                    else
                    {
                        CallbackInfo.m_pFirstArgument = (LPVOID)p_dwParam1;
                        DWORD l_dwResult = PerformCallBack4
                            (&CallbackInfo, p_dwParam2, p_dwParam3, p_dwParam4);
                        if(p_pdwResult)
                        {
                            *p_pdwResult = l_dwResult;
                        }
                        l_bReturn = TRUE;
                    }
                }
                __except(1)
                {
                    /*
                    HTRACE(TG_Error, _T("Exception in CallCoredllInProc(%s)"),
                        p_pszMethodName);
                    */
                    l_bReturn = FALSE;
                }
                if(l_hCoreDll)
                {
                    FreeLibrary(l_hCoreDll);
                }
                return l_bReturn;
            }//BOOL CallCoredllInProc


            CreateAPISet
            CE6.0以前是個未公開API,不過6.0以后就公開了
            This function creates an API set from the list of functions passed as a parameter.

            Syntax

            HANDLE CreateAPISet(
              char acName[4],
              USHORT cFunctions,
              const PFNVOID *ppfnMethods,
              const ULONGLONG *pu64Sig
            );
            Parameters
            acName
            [in] Name of the API set.

            cFunctions
            [in] Number of functions for this API set.

            ppfnMethods
            [in] Array of functions for the API set.

            pu64Sig
            [in] Array of signatures for the functions.


            Return Value
            A handle to the API set.

            Remarks
            Before any process can become a handle server, the process must create and register a handle-based API set with this function and RegisterAPISet.

            Requirements
            Header pkfuncs.h
            Library coredll.lib
            Windows Embedded CE Windows Embedded CE 6.0 and later
            CE6.0以前在coredll.dll里面有這個函數


            RegisterAPISet
            CE6.0以前是個未公開API,不過6.0以后就公開了
            This function registers an API set.

            Syntax
            BOOL RegisterAPISet(
              HANDLE hASet,
              DWORD dwSetID
            );

            Parameters
            hASet
            [in] Handle to API set created by the CreateAPISet function.

            dwSetID
            [in] Type of API set. You must perform a bitwise OR operation on this parameter with REGISTER_APISET_TYPE to create a handle-based API set.

            Return Value
            TRUE indicates success. FALSE indicates failure. Call GetLastError to get extended error information.

            Remarks
            Before any process can become a handle server, the process must create and register a handle-based API set with CreateAPISet and RegisterAPISet.

            Requirements
            Header pkfuncs.h
            Library coredll.lib
            Windows Embedded CE Windows Embedded CE 6.0 and later
            CE6.0以前在coredll.dll里面有這個函數

             

            QueryAPISetID
            根據名字查詢該API的ID,由coredll.dll提供
            Syntax
            int QueryAPISetID(
              char *pName
            );

            Parameters
            pName
            [in] API的名字

            Return Value
            API的ID

             

            GetAPIAddress
            獲取特定API的特定Method的地址,由coredll.dll提供
            FARPROC GetAPIAddress(
              int setId,
              int iMethod
            );

            Parameters
            setId
            [in] API的ID

            iMethod
            [in] Method的ID

            Return Value
            該Method的地址

             

            GetProcessIndexFromID
            根據進程的ID計算出進程的序號(這個序號就是進程處于第幾個slot),由coredll.dll提供
            Syntax
            DWORD GetProcessIndexFromID(
              HANDLE hProc
            );

            Parameters
            hProc
            [in] 進程的句柄,這里為什么不是進程的ID而是進程的句柄呢?非常簡單,因為在CE中進程的句柄就是進程的ID!

            Return Value
            進程的序號

            posted on 2009-07-16 16:37 Sandy 閱讀(607) 評論(0)  編輯 收藏 引用 所屬分類: Windows Mobile
            无码AV波多野结衣久久| 91精品国产乱码久久久久久 | 国产午夜免费高清久久影院| 激情五月综合综合久久69| 97热久久免费频精品99| 精品综合久久久久久888蜜芽| 国产成人综合久久精品红| 色99久久久久高潮综合影院 | 精品国产一区二区三区久久久狼 | 国产成人精品久久免费动漫 | 国内精品久久久久久久影视麻豆| 国产成人精品久久免费动漫| 国产精品久久久久9999高清| 9久久9久久精品| 国产精品99久久久久久宅男| 大蕉久久伊人中文字幕| 99久久精品免费看国产一区二区三区| 97精品国产91久久久久久| 中文字幕成人精品久久不卡 | 亚洲精品国产第一综合99久久| 日韩欧美亚洲国产精品字幕久久久| 久久人人爽人人澡人人高潮AV | 91精品国产91热久久久久福利| 久久精品成人国产午夜| 久久久久18| 久久国产亚洲精品| 欧美亚洲国产精品久久| 久久综合狠狠综合久久| 免费国产99久久久香蕉| 日韩久久无码免费毛片软件 | 久久国产精品无| 国产精品国色综合久久| 久久国产精品免费| 精品久久久中文字幕人妻| 久久青草国产精品一区| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 要久久爱在线免费观看| 精品久久久久久亚洲精品 | 亚洲午夜无码久久久久| 久久久国产精品| 精品久久久久久亚洲精品|