首页
社区
课程
招聘
[分享]ring3下伪装进程名绕过HS 部分Inline hook ,有码。
2012-7-9 09:27 13522

[分享]ring3下伪装进程名绕过HS 部分Inline hook ,有码。

2012-7-9 09:27
13522
以前有人发过类似文章(或者说我抄袭了吧。),但是那个代码我测试了已经不能用了。貌似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

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 1905
活跃值: (1427)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
z许 2012-7-9 09:41
2
0
mark。记得之前在哪里看过一个bin,在R3层绕过HS防护的。

感谢楼主分享经验。
雪    币: 22
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
靴子 2012-7-9 11:14
3
0
记录一下:)
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gougous 2012-7-9 11:20
4
0
好像第一次看到是pjf提过的?
雪    币: 42
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
MDebug 2012-7-9 13:37
5
0
哇。。大哥。。 太感谢了
雪    币: 116
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
ruoko 2012-7-10 13:02
6
0
踩个。
雪    币: 42
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
MDebug 2012-7-10 13:30
7
0
ruoko。。。
雪    币: 13
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dengxm 2018-7-7 00:17
8
0
能够在win7下面使用吗?谢谢
游客
登录 | 注册 方可回帖
返回