• <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
            亚洲色欲久久久综合网东京热| 久久久久久免费视频| 潮喷大喷水系列无码久久精品| 欧洲成人午夜精品无码区久久 | 久久精品国产精品亚洲精品| 久久精品免费观看| 国内精品久久国产| 精品少妇人妻av无码久久| 久久久久成人精品无码| 色综合久久中文字幕无码| 亚洲成人精品久久| 亚洲va国产va天堂va久久| 国产—久久香蕉国产线看观看| 久久久久久久久波多野高潮| 狠狠干狠狠久久| 中文字幕热久久久久久久| 久久精品一区二区三区中文字幕| 精品国际久久久久999波多野| 久久久久久久综合日本| 精品久久久久久久| 国内精品久久久人妻中文字幕| 久久亚洲中文字幕精品一区| 国内精品久久久久久99蜜桃| 一级女性全黄久久生活片免费 | 久久综合伊人77777| 久久99精品国产一区二区三区| 2021国产精品久久精品| 久久精品中文字幕一区| 94久久国产乱子伦精品免费 | 久久无码国产专区精品| 国产巨作麻豆欧美亚洲综合久久| 成人久久精品一区二区三区| 久久这里只精品国产99热| 久久精品国产99国产精品导航| 热久久国产欧美一区二区精品| 国产午夜精品久久久久九九电影| 国产成人久久激情91| …久久精品99久久香蕉国产| 久久久精品免费国产四虎| 久久91精品国产91久久麻豆| 久久精品视频网|