• <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 閱讀(613) 評論(0)  編輯 收藏 引用 所屬分類: Windows Mobile
            日韩精品国产自在久久现线拍| 久久青青草原综合伊人| 久久青青草原精品国产软件| 婷婷综合久久狠狠色99h| 久久久久国产日韩精品网站| 国产精品久久久久久五月尺| 久久精品国产亚洲AV高清热| 久久这里只有精品久久| 国产香蕉久久精品综合网| 久久久久亚洲精品天堂| 久久精品国产清自在天天线| 亚洲欧美日韩久久精品| 久久狠狠高潮亚洲精品| 色综合合久久天天给综看| 国产精品欧美久久久天天影视| 久久精品无码一区二区日韩AV| 人妻无码αv中文字幕久久| 亚洲国产成人久久精品动漫| 久久免费国产精品| 久久亚洲高清观看| 久久香蕉超碰97国产精品| 亚洲乱码日产精品a级毛片久久| 精品久久人妻av中文字幕| 久久亚洲AV无码精品色午夜麻豆| 国产精品久久久久天天影视| 亚洲第一极品精品无码久久| 无码人妻久久一区二区三区蜜桃| 国产精品熟女福利久久AV| 久久精品无码专区免费东京热 | 看久久久久久a级毛片| 少妇久久久久久被弄到高潮| 国产99久久久久久免费看| 99久久精品国产高清一区二区| 国产成人精品综合久久久久| 精品国产婷婷久久久| 99久久精品毛片免费播放| 久久久久久九九99精品| 久久久久亚洲精品无码蜜桃| 国产精品久久永久免费| 久久亚洲精品中文字幕三区| 成人午夜精品久久久久久久小说|