| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
在RK(rootkit)和ARK(anti-rootkit)的斗争已经进行了很久,在印象中最早出来的ARK工具是冰刃(IceSword),从冰刃开始出来到现在RK和ARK的斗争一直在继续,目前冰刃还是在流行当中,自己感觉也正是冰刃的出来才带动了当前流行的RK和ARK的斗争呵呵,现在很多病毒木马已经广泛的带有驱动,使用一些RK的技术和方法使自己更底层些更强大些,当前流行的ARK工具主要包括:隐藏进程检测,内核驱动检测,SSDT检测,代码HOOK检测,注册表隐藏的检测,隐藏文件的检测等一些功能.下面简单介绍一下: 中国网管论坛bbs.bitsCN.com
关于进程检测:其实最早在R3下隐藏进程的方法已经很早开始流行起来被用到各种软件上来,在R0下如断ActiveProcessLinks链,擦掉句柄表等等,一步步的发展渐渐的更强大起来一些技巧和方法开始出来和流行起来,如FUTO,phide_ex等。。。。。。
网管网www_bitscn_com
检测隐藏进程的方法可以把一些现在流行的方法组合起来用,首先可以通过进程的EPROCESS结构中的进程活动链表ActiveProcessLinks 来进行扫描一边,可以通过进程句柄表的枚举通过EPROCESS的HANDLE_TABLE,HANDLE_TABLE结构中的 HandleTableLis链表来扫描一边来获得一些EPROCESS,可以通过定位PsLookupProcessByProcessId代码中的 PspCidTable链表扫描一边获得一些EPROCESS,PspCidTable在各系统中枚举是不太一样的,也可以通过先找出 KiWaitInListHead,KiWaitOutListHead和KiDispatcherReadyListHead这些链表然后对这些链表扫描获得一些EPROCESS,以上具体的实现代码可以GOOGLE之网上实现的代码已经很多了,再者也可以找到内核中的线程切换SwapContext函数进行HOOK下的,在自己实现的SwapContext函数根据线程的偏移量找出进程的EPROCESS结构,把上面获得的所有EPROCESS汇集起来还需要判断下当前进程是否是真正的活着的:)可以通过EPROCESS里的标志位Flags(如XP 下0x248)一些标志判断下的,还要注意下对上面这些链表汇集起来是会有重复的进程的,在你自己的汇集函数中根据EPROCESS判断下的废话了,感觉实现了上面的一些方法对付一般的隐藏进程已经足够了的,但厉害的RK还是有的,现在存在可以逃过这些方法的RK的,在进程EPROCESS的结构里偏移0x1f8(XP SP2下)有个struct MMSUPPORT Vm结构: 网管论坛bbs_bitsCN_com
struct _MMSUPPORT
{
/* off 0x00000000 */ union LARGE_INTEGER LastTrimTime;
/* off 0x00000008 */ struct MMSUPPORT_FLAGS Flags;
/* off 0x0000000C */ unsigned long PageFaultCount;
/* off 0x00000010 */ unsigned long PeakWorkingSetSize;
/* off 0x00000014 */ unsigned long WorkingSetSize;
/* off 0x00000018 */ unsigned long MinimumWorkingSetSize;
/* off 0x0000001C */ unsigned long MaximumWorkingSetSize;
/* off 0x00000020 */ struct _MMWSL* VmWorkingSetList;
/* off 0x00000024 */ struct LIST_ENTRY WorkingSetExpansionLinks;
/* off 0x0000002C */ unsigned long Claim;
/* off 0x00000030 */ unsigned long NextEstimationSlot;
/* off 0x00000034 */ unsigned long NextAgingSlot;
/* off 0x00000038 */ unsigned long EstimatedAvailable;
/* off 0x0000003C */ unsigned long GrowthSinceLastEstimate;
};
在这个结构里+0x24有个 WorkingSetExpansionLinks他也是个LIST_ENTRY链表的,遍例下他可以获得进程的EPROCESS的,如
PEPROCESS eprocess, eprocess2
eprocess =PsGetCurrentProcess();
lp=(PLIST_ENTRY)(*(PVOID )((PUCHAR)eprocess+0x1f8+0x24+4));
cur =lp->Flink;
for(;cur!=lp;cur=cur->Flink)
{
eprocess2=(PEPROCESS)((ULONG)cur-0x1f8-0x24);
PVOID session= (PVOID)(*(PULONG)((PCHAR) eprocess2+ 0x170));
if(MmIsAddressValid(session)){
AddProcess(eprocess2);
}
}
网管联盟bitsCN@com
网管联盟bitsCN_com
网管联盟bitsCN_com
网管联盟bitsCN@com
网管论坛bbs_bitsCN_com
|
0
|
评论加载中…