ring3下偽裝進程名繞過HS 部分Inline hook ,有碼。

其實這文章有一半是Inndy大神寫的,被抄襲惹XDDD
HS白名單可用偽裝的進程列表,摘自:【原創】Hackshield內幕
原文網址:http://bbs.pediy.com/showpost.php?p=1085889&postcount=1
以前的inlinehook.dll聽說已經不能用惹...


以前有人發過類似文章(或者說我抄襲了吧。),但是那個代碼我測試了已經不能用了。貌似MFC上也會出錯。這裡我的代碼可以在mfc上使用。
此方法不需注入就讀寫Hackshield的進程地址空間數據,以及其它API的Detour Hook。【不能用於過保護。】
HS白名單可用偽裝的進程列表,摘自【原創】Hackshield內幕(http://bbs.pediy.com/showthread.php?t=150758):
代碼:
 1. Name: patcher.exe
 2. Name: WerFault.exe
 3. Name: IAANTmon.exe
 4. Name: avp.exe
 5. Name: WmiApSrv.exe
 6. Name: xsync.exe
 7. Name: fssm32.exe
 8. Name: LGDCORE.exe
 9. Name: ACS.EXE
 10.Name: ITPYE.EXE
 11.Name: Joy2Key.exe
 12.Name: JOYTOKEYHIDE.EXE
 13.Name: JOYTOKEYKR.EXE
 14.Name: JOYTOKEY.EXE
 15.Name: DWM.EXE
 16.Name: WMIPRVSE.EXE
 17.Name: DK2.EXE
 18.Name: CSTRIKE-ONLINE.EXE
 19.Name: RAGII.EXE
 20.Name: EKRN.EXE
 21.Name: GOM.EXE
 22.Name: GAMEMON.DES
 23.Name: VAIOCAMERACAPTUREUTILITY.EXE
 24.Name: IPOINT.EXE
 25.Name: NMCOSRV.EXE
 26.Name: DEKARON.EXE
 27.Name: AUDIODG.EXE
 28.Name: NGM.EXE
 29.Name: TASKMGR.EXE
 30.Name: HGSCRAPEDITORHELPER.EXE
 31.Name: SETPOINT.EXE
 32.Name: NMSERVICE.EXE
 33.Name: NSVCAPPFLT.EXE
 34.Name: UPSHIFTMSGR.EXE
 35.Name: NOD32KRN.EXE
 36.Name: IMJPCMNT.EXE
 37.Name: TCSERVER.EXE
 38.Name: SPOOLSV.EXE
 39.Name: IEXPLORE.EXE
 40.Name: EXPLORER.EXE
 41.Name: WINLOGON.EXE
 42.Name: SERVICES.EXE
 43.Name: CSRSS.EXE
 44.Name: LSASS.EXE
 45.Name: SVCHOST.EXE
淺談ImagePath映像路徑
Q:
ImagePath是什麼?

A:
執行程式的時候,系統會建立一些資料區塊,裡面放了該程式執行時的一些資料,例如:CommandLine(就是程式參數,像是XX谷就是透過CommandLine來決定的IP和Port)....等
而ImagePath就是其中的一項

Q:
為什麼改ImagePath可以過HackShield的記憶體存取保護?

A:
因為HackShield對於NtOpenProcess、 NtReadVirtualMemory...等這幾條API有做Hook,就是大家一直說的InlineHook和Deep Inline Hook,然後去找這是哪個程式呼叫的,再去去 得該程式的ImagePath判斷是否為白名單,不然就拒絕呼叫,所以我們只要改掉ImagePath騙HackShield說我們是白名單上的程式(工 作管理員)。

Q:
ImagePath怎麼改?

A:
透過一連串的結構、指標下去改就好了,但是Win7 64bit的架構似乎不太一樣,雖然有找到結構體,但是似乎無效。

ImagePath的修改
ImagePath位於...
PEB->_RTL_USER_PROCESS_PARAMETERS->ImagePathName

所以說我們要先取得PEB的位址,再延著這條路徑往下走去改..
(亦可使用ZwQueryInformationProcess這條API取得PEB基址)
獲取ImagePathName並修改的關鍵代碼如下(x86機子可用):
代碼:
void GetTaskMgr()
{
    ULONG Addr;
    const char taskmgr[] = "\\system32\\taskmgr.exe";
    int length = strlen(taskmgr) + strlen(getenv("windir")) + 1;
    char* tmp = (char*)malloc(length);
    memset(tmp, 0, length);
    strcpy(tmp, getenv("windir"));
    strcat(tmp, taskmgr);
    wchar_t* tmp2;
    AnsiToUnicode(tmp, &tmp2);
  _asm
  {
    mov eax, fs:[0x30];
    mov eax, [eax+0x10];
    add eax, 0x3c;
    mov Addr,eax;
  }
  *(ULONG*)Addr=(ULONG)tmp2;
}

HRESULT AnsiToUnicode(LPCSTR pszA, LPOLESTR* ppszW)
{
    ULONG cCharacters;
    DWORD dwError;
    if (NULL == pszA)
    {
        *ppszW = NULL;
        return NOERROR;
    }
    cCharacters =  strlen(pszA)+1;
    *ppszW = (LPOLESTR) malloc(cCharacters*2);
    if (NULL == *ppszW)
        return E_OUTOFMEMORY;
    if (0 == MultiByteToWideChar(CP_ACP, 0, pszA, cCharacters,
    *ppszW, cCharacters))
    {
        dwError = GetLastError();
        free(*ppszW);
        *ppszW = NULL;
        return HRESULT_FROM_WIN32(dwError);
    }
    return NOERROR;
}

調用GetTaskMgr函數即可偽裝自身的程序為taskmgr.exe,繞過部分的HS Inline Hook



上傳的附件
文件類型: zipMfc_Hook_peb.zip

留言

  1. 精品文章
    洋蔥我好愛妳 哈哈

    回覆刪除
  2. 大大...方便貼出DLL嗎...有C++源碼還是不會匯出-.-

    回覆刪除
  3. 不知道在哪裡改 Orz

    回覆刪除

張貼留言

本月最夯