-
-
搞不明白它是怎么无声无息的插入EXPLORER进程的?
-
发表于: 2010-2-27 11:25 3052
-
今天碰到一个木马搞不明白它是怎么无声无息的插入EXPLORER进程的?
而且它不能在虚拟机和沙盘下运行!
许多杀软对它是不报毒的,郁闷啊!
哪位高人指点以下,多谢了!
WriteProcessMemory通过它么?为什么杀软会不报呢?
代码我找到了,结帖了!现在的杀软啊,让人真不放心.................
摘自:http://blog.csdn.net/zoutianshi/archive/2006/08/15/1067200.aspx
今天要完成一个项内容,运行另一个应用程序abc.exe,实现它的父进程是explorer.exe。
最开始的思路是获得explorer.exe的句柄,用ShellExecute启动abc.exe。但是用explorer.exe的句柄创建的进程的父进程依然是调用和进程,而不是传入句柄的进程。
看来直接的不行,只能用间接的了。把运行abc.exe的代码段写到explorer.exe的内存里面去。然后让explorer来运行这段代码。
static DWORD CALLBACK ThreadProc()...{
::ShellExecute(NULL,"open","abc.exe",NULL,NULL,SW_SHOW);
return TRUE;
}
但是现在就出现问题了,ShellExecute在shell32模块里,还需要LoadLibrary和GetProcAddress。同时它也用了两个字符串常量,这些字串会出现在本进程的内存中,在explorer中运行代码就会出错,系统把它关掉。所以改用了WinExec来代替ShellExecute,同时要把需要的字串和函数指针都写到explorer的内存区里。
typedef UINT (WINAPI * WINEXEC)(LPCSTR,UINT);
typedef struct tagTHREADDATA...{
TCHAR fileName[20];
WINEXEC pWinexec;
}THREADDATA, *LPTHREADDATA;
static DWORD CALLBACK ThreadProc(LPTHREADDATA pData)...{
pData->pWinexec(pData->fileName,SW_SHOW);
return TRUE;
}获得explorer进程PID的方法 DWORD getExplorerPID()...{
HWND startButtonHandle;
DWORD processID;
startButtonHandle = ::FindWindow (TEXT("Shell_TrayWnd"),NULL);
::GetWindowThreadProcessId( startButtonHandle, &processID );
return processID;
}
注入内存的过程:
user32Handle = ::GetModuleHandle(TEXT("kernel32"));
//得到kernel32模块句柄
processHandle = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ,FALSE,getExplorerPID());
//用explorer的PID来打开进程,并得到创建线程和写的权限。
dataAddr = ::VirtualAllocEx(processHandle,0,sizeof(THREADDATA),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//在explorer的内存内里申请一块内存来存所用的数据
THREADDATA data = ...{TEXT("a.exe"),(WINEXEC)GetProcAddress(user32Handle,"WinExec"),};
WriteProcessMemory(processHandle,dataAddr,&data,sizeof(THREADDATA),&byteWrited);
//把数据写到申请的内存中
codeAddr = ::VirtualAllocEx(processHandle,0,sizeOfThreadProc,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//申请代码的内存区
WriteProcessMemory(processHandle,codeAddr,&ThreadProc,sizeOfThreadProc,&byteWrited);
//把代码写进去,这时我们己经把我们要用的代码和数据都准备好了。
threadHandle = CreateRemoteThread(processHandle,NULL,0, LPTHREAD_START_ROUTINE)codeAddr,dataAddr,0,(LPDWORD)threadID);
//在explorer中创建一个线程,来执行启动abc.exe的代码。所需的数据都己经在explorer的内存块中,所以不会出问题。
WaitForSingleObject(threadHandle, INFINITE);
VirtualFreeEx(processHandle,dataAddr,0,MEM_RELEASE);
VirtualFreeEx(processHandle,codeAddr,0,MEM_RELEASE);
CloseHandle(threadHandle);
CloseHandle(processHandle);
//等待执行完毕,释放内存,关闭句柄。
这就完成了代码的注入与执行。
英语还算不错的推荐去看看这篇文章,帮助很大。
Three Ways to Inject Your Code into Another Process
http://www.codeproject.com/threads/winspy.asp
而且它不能在虚拟机和沙盘下运行!
许多杀软对它是不报毒的,郁闷啊!
哪位高人指点以下,多谢了!
WriteProcessMemory通过它么?为什么杀软会不报呢?
代码我找到了,结帖了!现在的杀软啊,让人真不放心.................
摘自:http://blog.csdn.net/zoutianshi/archive/2006/08/15/1067200.aspx
今天要完成一个项内容,运行另一个应用程序abc.exe,实现它的父进程是explorer.exe。
最开始的思路是获得explorer.exe的句柄,用ShellExecute启动abc.exe。但是用explorer.exe的句柄创建的进程的父进程依然是调用和进程,而不是传入句柄的进程。
看来直接的不行,只能用间接的了。把运行abc.exe的代码段写到explorer.exe的内存里面去。然后让explorer来运行这段代码。
static DWORD CALLBACK ThreadProc()...{
::ShellExecute(NULL,"open","abc.exe",NULL,NULL,SW_SHOW);
return TRUE;
}
但是现在就出现问题了,ShellExecute在shell32模块里,还需要LoadLibrary和GetProcAddress。同时它也用了两个字符串常量,这些字串会出现在本进程的内存中,在explorer中运行代码就会出错,系统把它关掉。所以改用了WinExec来代替ShellExecute,同时要把需要的字串和函数指针都写到explorer的内存区里。
typedef UINT (WINAPI * WINEXEC)(LPCSTR,UINT);
typedef struct tagTHREADDATA...{
TCHAR fileName[20];
WINEXEC pWinexec;
}THREADDATA, *LPTHREADDATA;
static DWORD CALLBACK ThreadProc(LPTHREADDATA pData)...{
pData->pWinexec(pData->fileName,SW_SHOW);
return TRUE;
}获得explorer进程PID的方法 DWORD getExplorerPID()...{
HWND startButtonHandle;
DWORD processID;
startButtonHandle = ::FindWindow (TEXT("Shell_TrayWnd"),NULL);
::GetWindowThreadProcessId( startButtonHandle, &processID );
return processID;
}
注入内存的过程:
user32Handle = ::GetModuleHandle(TEXT("kernel32"));
//得到kernel32模块句柄
processHandle = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ,FALSE,getExplorerPID());
//用explorer的PID来打开进程,并得到创建线程和写的权限。
dataAddr = ::VirtualAllocEx(processHandle,0,sizeof(THREADDATA),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//在explorer的内存内里申请一块内存来存所用的数据
THREADDATA data = ...{TEXT("a.exe"),(WINEXEC)GetProcAddress(user32Handle,"WinExec"),};
WriteProcessMemory(processHandle,dataAddr,&data,sizeof(THREADDATA),&byteWrited);
//把数据写到申请的内存中
codeAddr = ::VirtualAllocEx(processHandle,0,sizeOfThreadProc,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//申请代码的内存区
WriteProcessMemory(processHandle,codeAddr,&ThreadProc,sizeOfThreadProc,&byteWrited);
//把代码写进去,这时我们己经把我们要用的代码和数据都准备好了。
threadHandle = CreateRemoteThread(processHandle,NULL,0, LPTHREAD_START_ROUTINE)codeAddr,dataAddr,0,(LPDWORD)threadID);
//在explorer中创建一个线程,来执行启动abc.exe的代码。所需的数据都己经在explorer的内存块中,所以不会出问题。
WaitForSingleObject(threadHandle, INFINITE);
VirtualFreeEx(processHandle,dataAddr,0,MEM_RELEASE);
VirtualFreeEx(processHandle,codeAddr,0,MEM_RELEASE);
CloseHandle(threadHandle);
CloseHandle(processHandle);
//等待执行完毕,释放内存,关闭句柄。
这就完成了代码的注入与执行。
英语还算不错的推荐去看看这篇文章,帮助很大。
Three Ways to Inject Your Code into Another Process
http://www.codeproject.com/threads/winspy.asp
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [注意]那位大牛的电脑啊? 4056
- [建议]给360提个建议 7997
- 另类启动方式 6452
- 怪事连年有,今年特别多?高手进 11410
- [求助]怎么读取文本指定内容啊? 5166
谁下载
kylinpoet
Jockey
无聊的菜鸟
zmfu
xiaolong
BlueT
liyebin
manbug
笨奔
woyaozhuce
mynicepage
liuyq
天外来客
heihu
wangjietx
lorde
petnt
wxxw
sxjswift
峰回路转
kmsmxpro
夜黑暗
nop
yhan
啤酒肚
两个半
HItHeart
zjhybfs
yaozilong
qihui
nafol
qqzhang
nxlite
tycp
xiejienet
jeno
李小字
黑暗之子
NIKE凋零
angya
riusksk
dongfangho
lovemfc
爱不说
fengjl
skypismire
hyp
wonderu
Mx¢Xgt
柳痕
shwsf
Fypher
风随雨行
Sadllll
dspapi
stalker
stonevx
没啥意思
hongjiling
piaoma
chenchuai
zyr零零发
linzehao
ykoshi
laowolf
thstzy
youxiachen
swzices
李小小
cektop
hookall
chhzh
espzj
艾米
达文西
chinarenjf
goddkiller
kissbill
snakeas
eidolonlon
qsdplkuht
aatt
kqkq
tempabcd
maikireton
geempire
xlfxlfxlf
Joyuan
maxzism
zphdt
贾宝玉
tokiii
rwaa
adsfg
richson
dadadalord
zjhaq
snrsnr
听风雪中
谁下载
kylinpoet
无聊的菜鸟
zmfu
xiaolong
BlueT
liyebin
manbug
笨奔
woyaozhuce
mynicepage
liuyq
天外来客
heihu
wangjietx
lorde
petnt
wxxw
sxjswift
峰回路转
kmsmxpro
夜黑暗
nop
yhan
啤酒肚
两个半
HItHeart
zjhybfs
yaozilong
qihui
nafol
qqzhang
nxlite
tycp
xiejienet
jeno
李小字
黑暗之子
NIKE凋零
angya
riusksk
dongfangho
lovemfc
爱不说
fengjl
skypismire
hyp
wonderu
Mx¢Xgt
柳痕
shwsf
Fypher
风随雨行
Sadllll
dspapi
stalker
stonevx
没啥意思
hongjiling
piaoma
chenchuai
zyr零零发
linzehao
ykoshi
laowolf
thstzy
youxiachen
swzices
李小小
cektop
hookall
chhzh
espzj
艾米
达文西
chinarenjf
goddkiller
kissbill
snakeas
eidolonlon
qsdplkuht
aatt
kqkq
tempabcd
maikireton
geempire
xlfxlfxlf
Joyuan
maxzism
zphdt
贾宝玉
tokiii
rwaa
adsfg
richson
dadadalord
zjhaq
snrsnr
听风雪中
初学者hyjk
看原图
赞赏
雪币:
留言: