首页
社区
课程
招聘
[原创]用户代码查找隐藏进程
发表于: 2009-4-5 13:03 4812

[原创]用户代码查找隐藏进程

2009-4-5 13:03
4812
第一次发这种帖子,希望加精,这是我在工作的时候发现的,可能会有用,绝对原创,虽然注册很久了,可是觉得这个用户名太恶心了,一直没用,当时注册的时候我还在上学,用的是我寝室一个家伙的游戏帐号.

基础的东西就不说了,只说方法了,相信看这个的都有这个基础了.

1. 调用ntdll里面的ZwQuerySystemInformation, 把第一个参数传5.

2. 得到的缓冲区里面是一个链表,一个进程对应着链表里的一个结构, 结构第一个DWORD存着下一个结构的偏移. 结构头+0x3C的地方存着一个指针,该指针指向进程名字. 结构头+0x44的位置存储进程ID. 正常情况下可以通过这样遍历链表得到所有进程, 上层遍历进程的API也是这么干的.

下面说隐藏进程,其实隐藏进程也是在这个缓冲区里面的,只不过它从连表里面脱钩了, 经分析发现结构的结尾刚好是进程名字的结尾,而进程名字的地址可以通过结构头加偏移得到,这样我们就可以自己确定链表里每一个结构的起始位置了,有了起始位置就什么都有了.

后记:
我们知道给,ZwQuerySystemInformation的第一个参数传不同的值会得到不同的结构, 我也查过《Windows NT/2000 Native API Reference》这本书,那上面也没有关于我说的这个结构的介绍.  这个结构里面还有很多其他的信息,我现在不知道是什么, 虽然想知道,但是也不知道什么地方用它,干看也没用. 这个进程名字和ID就是眼下我需要的,我是通过跟踪上层枚举进程的API,看它是怎么处理的, 得到了这两个偏移值和传给ZwQuerySystemInformation的第一个参数.

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
typedef enum _SYSTEM_INFORMATION_CLASS {
SystemBasicInformation, // 0 Y N
SystemProcessorInformation, // 1 Y N
SystemPerformanceInformation, // 2 Y N
SystemTimeOfDayInformation, // 3 Y N
SystemNotImplemented1, // 4 Y N
SystemProcessesAndThreadsInformation, // 5 Y N
SystemCallCounts, // 6 Y N
SystemConfigurationInformation, // 7 Y N
SystemProcessorTimes, // 8 Y N
SystemGlobalFlag, // 9 Y Y
SystemNotImplemented2, // 10 Y N
SystemModuleInformation, // 11 Y N
SystemLockInformation, // 12 Y N
SystemNotImplemented3, // 13 Y N
SystemNotImplemented4, // 14 Y N
SystemNotImplemented5, // 15 Y N
SystemHandleInformation, // 16 Y N
SystemObjectInformation, // 17 Y N
SystemPagefileInformation, // 18 Y N
SystemInstructionEmulationCounts, // 19 Y N
SystemInvalidInfoClass1, // 20
SystemCacheInformation, // 21 Y Y
SystemPoolTagInformation, // 22 Y N
SystemProcessorStatistics, // 23 Y N
SystemDpcInformation, // 24 Y Y
SystemNotImplemented6, // 25 Y N
SystemLoadImage, // 26 N Y
SystemUnloadImage, // 27 N Y
SystemTimeAdjustment, // 28 Y Y
SystemNotImplemented7, // 29 Y N
SystemNotImplemented8, // 30 Y N
SystemNotImplemented9, // 31 Y N
SystemCrashDumpInformation, // 32 Y N
SystemExceptionInformation, // 33 Y N
SystemCrashDumpStateInformation, // 34 Y Y/N
SystemKernelDebuggerInformation, // 35 Y N
SystemContextSwitchInformation, // 36 Y N
SystemRegistryQuotaInformation, // 37 Y Y
SystemLoadAndCallImage, // 38 N Y
SystemPrioritySeparation, // 39 N Y
SystemNotImplemented10, // 40 Y N
SystemNotImplemented11, // 41 Y N
SystemInvalidInfoClass2, // 42
SystemInvalidInfoClass3, // 43
SystemTimeZoneInformation, // 44 Y N
SystemLookasideInformation, // 45 Y N
SystemSetTimeSlipEvent, // 46 N Y
SystemCreateSession, // 47 N Y
SystemDeleteSession, // 48 N Y
SystemInvalidInfoClass4, // 49
SystemRangeStartInformation, // 50 Y N
SystemVerifierInformation, // 51 Y Y
SystemAddVerifier, // 52 N Y
SystemSessionProcessesInformation // 53 Y N
} SYSTEM_INFORMATION_CLASS;

typedef struct _SYSTEM_PROCESSES { // Information Class 5
ULONG NextEntryDelta;
ULONG ThreadCount;
ULONG Reserved1[6];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ProcessName;
KPRIORITY BasePriority;
ULONG ProcessId;
ULONG InheritedFromProcessId;
ULONG HandleCount;
ULONG Reserved2[2];
VM_COUNTERS VmCounters;
IO_COUNTERS IoCounters; // Windows 2000 only
SYSTEM_THREADS Threads[1];
} SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
typedef struct _SYSTEM_THREADS {
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER CreateTime;
ULONG WaitTime;
PVOID StartAddress;
CLIENT_ID ClientId;
KPRIORITY Priority;
KPRIORITY BasePriority;
ULONG ContextSwitchCount;
THREAD_STATE State;
KWAIT_REASON WaitReason;
} SYSTEM_THREADS, *PSYSTEM_THREADS;

择自《Windows NT/2000 Native API Reference》
2009-4-5 13:18
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我看了这个了,你去去实际看一下得到的内容,跟介绍的不一样
2009-4-5 14:22
0
雪    币: 208
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
使用这个函数要先ZwQuerySystemInformation(SystemProcessesAndThreadsInformation, ByVal 0&, 0, retLen)获取返回的长度,然后申请内存,再ZwQuerySystemInformation(SystemProcessesAndThreadsInformation, buf(0), retLen, ByVal 0&)才能获取真正的内容(我的是VB代码)
2009-4-5 15:56
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
申请的内存是0x10000字节就可以了

API就是这么用的.
2009-4-5 16:54
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用户代码查找隐藏进程
2009-7-30 00:07
0
雪    币: 160
活跃值: (272)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
问一个弱智的问题ZwQuerySystemInformation这个可以在用户代码中调用?
2009-7-30 09:15
0
游客
登录 | 注册 方可回帖
返回
//