以前有人发过类似文章(或者说我抄袭了吧。),但是那个代码我测试了已经不能用了。貌似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。
、
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)