• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            about Injection (2)

            Posted on 2010-02-07 17:23 S.l.e!ep.¢% 閱讀(1588) 評論(2)  編輯 收藏 引用 所屬分類: RootKit
            about Injection ? 被說成是 black paper.....? 俺只是技術(shù)研究,沒其它目的.....

            代碼優(yōu)化

            bool?EnablePrivilege(LPCTSTR?lpszPrivilege,?bool?bEnable)
            {
            ????HANDLE?TokenHandle?
            =?NULL;

            ????
            //?
            ????if?(?FALSE?==?::OpenProcessToken(?GetCurrentProcess(),?TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,?&TokenHandle)?)
            ????{
            ????????
            return?false;
            ????}
            ????
            ????TOKEN_PRIVILEGES?tkp;
            ????
            ????
            //?Get?LUID?for?SeDebugPrivilege
            ????if(?FALSE?==?::LookupPrivilegeValue(NULL,?lpszPrivilege,?&tkp.Privileges[0].Luid)?)
            ????{
            ????????::CloseHandle(TokenHandle);
            ????????
            return?false;
            ????}

            ????tkp.PrivilegeCount?
            =?1;

            #ifndef?SE_PRIVILEGE_REMOVED
            #define?SE_PRIVILEGE_REMOVED?0X00000004?
            #endif

            ????
            if(?bEnable?)
            ????????tkp.Privileges[
            0].Attributes?=?SE_PRIVILEGE_ENABLED;
            ????
            else
            ????????tkp.Privileges[
            0].Attributes?=?SE_PRIVILEGE_REMOVED;
            ????
            ????
            if?(?FALSE?==?AdjustTokenPrivileges(TokenHandle,?FALSE,?&tkp,?0,?NULL,?NULL)?)?
            ????{
            ????????::CloseHandle(TokenHandle);
            ????????
            return?false;
            ????}

            ????::CloseHandle(TokenHandle);

            ????
            return?true;
            }

            bool?RemoteLoadDLL(DWORD?dwProcessID,?const?char*?pszDLLPath)
            {
            ????typedef?HMODULE?(WINAPI?
            *LoadLibraryPointor)(LPCTSTR);
            ????LoadLibraryPointor?pfnLoadLibrary?
            =?NULL;
            ????HMODULE?hKernel32?
            =?NULL;
            ????
            ????
            //Get?address?to?LoadLibrary?and?FreeLibrary
            ????if?(pfnLoadLibrary?==?NULL)?
            ????{
            ????????hKernel32?
            =?::GetModuleHandle("kernel32.dll");
            ????????
            ????????
            if?(?hKernel32?==?NULL?)
            ????????{
            ????????????
            return?false;????????????
            ????????}
            ????????
            ????????pfnLoadLibrary?
            =?(LoadLibraryPointor)GetProcAddress(hKernel32,?"LoadLibraryA");
            ????????
            ????????
            if?(pfnLoadLibrary?==?NULL)
            ????????{
            ????????????::FreeLibrary(hKernel32);
            ????????????
            return?false;
            ????????}
            ????}

            ????
            if(?!EnablePrivilege(SE_DEBUG_NAME,?true)?)
            ????????
            return?false;

            ????HANDLE?process?
            =?::OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ|PROCESS_QUERY_INFORMATION,?TRUE,?dwProcessID);
            ????
            if?(?process?==?NULL?)
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????
            return?false;
            ????}

            ????PVOID?memory?
            =?::VirtualAllocEx(process,?NULL,?strlen(pszDLLPath)+1,?MEM_COMMIT,?PAGE_READWRITE);
            ????
            ????
            if?(?memory?==?NULL?)
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????::CloseHandle(process);
            ????????
            return?false;
            ????}

            ????
            if?(?FALSE?==?::WriteProcessMemory(process,?memory,?(LPVOID)pszDLLPath,?strlen(pszDLLPath)+1,?NULL)?)
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????::VirtualFreeEx(process,?memory,?strlen(pszDLLPath)
            +1,?MEM_RELEASE);
            ????????::CloseHandle(process);
            ????????
            return?false;
            ????}

            ????
            //?Inject?Code
            ????DWORD?dwThreadID?=?0;
            ????HANDLE?hRemoteHandle?
            =?::CreateRemoteThread(process,?NULL,?0,?(LPTHREAD_START_ROUTINE)pfnLoadLibrary,?memory,?0,?&dwThreadID);

            ????
            if?(?hRemoteHandle?==?NULL?)?
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????::VirtualFreeEx(process,?memory,?strlen(pszDLLPath)
            +1,?MEM_RELEASE);
            ????????::CloseHandle(process);
            ????????
            return?false;
            ????}

            ????::WaitForSingleObject(hRemoteHandle,?INFINITE);

            ????DWORD?dwReturn?
            =?0;
            ????
            if(?FALSE?==?::GetExitCodeThread(hRemoteHandle,?&dwReturn)?)
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????::CloseHandle(hRemoteHandle);
            ????????::VirtualFreeEx(process,?memory,?strlen(pszDLLPath)
            +1,?MEM_RELEASE);
            ????????::CloseHandle(process);
            ????????
            return?false;
            ????}

            ????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????::CloseHandle(hRemoteHandle);
            ????::VirtualFreeEx(process,?memory,?strlen(pszDLLPath)
            +1,?MEM_RELEASE);
            ????::CloseHandle(process);
            ????::FreeLibrary(hKernel32);

            ????
            if(?dwReturn?==?NULL?)
            ????????
            return?false;
            ????
            else
            ????????
            return?true;????
            }

            HMODULE?GetProcessModule(DWORD?dwPID,?LPCTSTR?czDllName)?
            {?
            ????HMODULE????????hMod???????
            =?NULL;
            ????BOOL??????????bFound??????
            =?FALSE;?
            ????HANDLE????????hModuleSnap?
            =?NULL;?
            ????MODULEENTRY32?me32????????
            =?{0};?

            ????
            //?Take?a?snapshot?of?all?modules?in?the?specified?process.?
            ????hModuleSnap?=?CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,?dwPID);?
            ????
            if?(hModuleSnap?==?INVALID_HANDLE_VALUE)?
            ????????
            return?(FALSE);?

            ????
            //?Fill?the?size?of?the?structure?before?using?it.?

            ????me32.dwSize?
            =?sizeof(MODULEENTRY32);?

            ????
            //?Walk?the?module?list?of?the?process,?and?find?the?module?of?
            ????
            //?interest.?Then?copy?the?information?to?the?buffer?pointed?
            ????
            //?to?by?lpMe32?so?that?it?can?be?returned?to?the?caller.?
            ????if?(Module32First(hModuleSnap,?&me32))?
            ????{?
            ????????
            do?
            ????????{?
            ????????????
            if(0?==?lstrcmpi(czDllName,?me32.szExePath))
            ????????????{
            ????????????????hMod?
            =?me32.hModule;
            ????????????}
            ????????}?
            ????????
            while?(hMod?==?NULL?&&?Module32Next(hModuleSnap,?&me32));?
            ????}?
            ????
            else?
            ????{
            ????????hMod?
            =?NULL;???????????//?could?not?walk?module?list?
            ????}

            ????
            //?Do?not?forget?to?clean?up?the?snapshot?object.?
            ????CloseHandle(hModuleSnap);?

            ????
            return?hMod;?
            }

            bool?RemoteUnLoadDLL(DWORD?dwProcessID,?const?char*?pszDLLPath)
            {
            ????typedef?BOOL?(WINAPI?
            *FreeLibraryFunType)(HMODULE?hModule);
            ????FreeLibraryFunType?pfnFreeLibrary?
            =?NULL;
            ????HMODULE?hKernel32?
            =?NULL;
            ????
            ????
            //Get?address?to?FreeLibrary
            ????if?(pfnFreeLibrary?==?NULL)?
            ????{
            ????????hKernel32?
            =?::GetModuleHandle("kernel32.dll");
            ????????
            ????????
            if?(?hKernel32?==?NULL?)
            ????????{
            ????????????
            return?false;????????????
            ????????}
            ????????
            ????????pfnFreeLibrary?
            =?(FreeLibraryFunType)GetProcAddress(hKernel32,?"FreeLibrary");
            ????????
            ????????
            if?(pfnFreeLibrary?==?NULL)
            ????????{
            ????????????::FreeLibrary(hKernel32);
            ????????????
            return?false;
            ????????}
            ????}

            ????
            if(?!EnablePrivilege(SE_DEBUG_NAME,?true)?)
            ????????
            return?false;

            ????HANDLE?process?
            =?::OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ|PROCESS_QUERY_INFORMATION,?TRUE,?dwProcessID);
            ????
            if?(?process?==?NULL?)
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????
            return?false;
            ????}

            ????HMODULE?hUnloadDll?
            =?GetProcessModule(dwProcessID,?pszDLLPath);

            ????
            if(?hUnloadDll?==?NULL?)
            ????????
            return?true;

            ????
            //?Inject?Code
            ????DWORD?dwThreadID?=?0;
            ????HANDLE?hRemoteHandle?
            =?::CreateRemoteThread(process,?NULL,?0,?(LPTHREAD_START_ROUTINE)pfnFreeLibrary,?(LPVOID)hUnloadDll,?0,?&dwThreadID);

            ????
            if?(?hRemoteHandle?==?NULL?)?
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????::CloseHandle(process);
            ????????
            return?false;
            ????}

            ????::WaitForSingleObject(hRemoteHandle,?INFINITE);

            ????DWORD?dwReturn?
            =?0;
            ????
            if(?FALSE?==?::GetExitCodeThread(hRemoteHandle,?&dwReturn)?)
            ????{
            ????????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????????::CloseHandle(hRemoteHandle);
            ????????::CloseHandle(process);
            ????????
            return?false;
            ????}

            ????::EnablePrivilege(SE_DEBUG_NAME,?
            false);
            ????::CloseHandle(hRemoteHandle);
            ????::CloseHandle(process);
            ????::FreeLibrary(hKernel32);

            ????
            if(?dwReturn?==?FALSE?)
            ????????
            return?false;
            ????
            else
            ????????
            return?true;
            }

            目前存在的已知問題:
            1. 未考慮 64 位機器
            2. 未考慮 DLL 加載失敗的處理 (2010.02.05-23:38 已經(jīng) Fixed)
            3. 提權(quán)后沒有恢復(fù) (2010.02.07-17:15 已經(jīng)Fixed)
            4. 在?RemoteUnloadDLL 時,采用的是重定位DLL句柄的方法,有人跟我反應(yīng)這種方法不安全,但我暫時還沒想到什么情況下會引發(fā)問題。


            目標(biāo)程序的輸出結(jié)果是:
            DLL_PROCESS_ATTACH C:\Documents and Settings\Administrator\桌面\demo\test\Debug\test.exe
            DLL_THREAD_DETACH C:\Documents and Settings\Administrator\桌面\demo\test\Debug\test.exe
            The thread 0x878 has exited with code 13500416 (0xCE0000).
            DLL_THREAD_ATTACH C:\Documents and Settings\Administrator\桌面\demo\test\Debug\test.exe
            DLL_PROCESS_DETACH C:\Documents and Settings\Administrator\桌面\demo\test\Debug\test.exe
            The thread 0x624 has exited with code 1 (0x1).

            (開始不明白,結(jié)果看了
            DLL_THREAD_DETACH 認(rèn)識誤區(qū)后就明白了)

            又一天就這么過去了~

            Feedback

            # re: about Injection (2)  回復(fù)  更多評論   

            2010-02-08 19:32 by 樂蜂網(wǎng)官方網(wǎng)站
            偶滴愛哦上帝哦啊

            # re: about Injection (2)  回復(fù)  更多評論   

            2010-02-08 19:51 by DrKN
            呵..有點冒犯 真對不起
            因為之前那篇都見到你打算給人想到是shutdown跟提權(quán)之類 感覺變得像blackpaper
            国产午夜精品久久久久九九| 一本一道久久精品综合| 欧洲性大片xxxxx久久久| 久久久久一级精品亚洲国产成人综合AV区| 久久综合九色综合久99| 久久久青草青青国产亚洲免观| 国产精品久久久久久久午夜片| 午夜视频久久久久一区| 亚洲成色WWW久久网站| 精品久久久久久中文字幕人妻最新| 久久91亚洲人成电影网站| 爱做久久久久久| 99久久无色码中文字幕人妻| 亚洲乱码日产精品a级毛片久久| 亚洲国产精品综合久久一线| 久久精品国产亚洲AV忘忧草18| 亚洲精品乱码久久久久久久久久久久 | 国产伊人久久| 欧美成a人片免费看久久| 久久国产AVJUST麻豆| 久久偷看各类wc女厕嘘嘘| 久久r热这里有精品视频| 久久久久无码精品国产app| 久久午夜无码鲁丝片秋霞| 国产精品无码久久综合| 精品久久久久一区二区三区| 久久亚洲sm情趣捆绑调教| 91精品国产9l久久久久| 久久99精品久久久久久水蜜桃| 午夜视频久久久久一区| 久久99精品国产| 精品久久久久久无码人妻蜜桃| 波多野结衣AV无码久久一区| 精品久久综合1区2区3区激情 | 亚洲国产综合久久天堂| 久久久久久人妻无码| 一本色道久久88综合日韩精品| 国产精品久久久久9999高清| 亚洲精品第一综合99久久| 青青草国产精品久久| 久久亚洲私人国产精品vA|