ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1726回复:7

恢复ssdt的问题

楼主#
更多 发布于:2007-05-30 10:10
在rootkit.com上有个用户态的程序。
如何在纯核心态得到真实地址并将其resotore呢?

最新喜欢:

精灵dsp精灵dsp
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-05-30 10:54
这个版就有,你可以找找啊~~嘿嘿~
没有战争就没有进步 X3工作组 为您提供最好的军火
ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-30 12:21
??
请老大指示,我没有搜索到啊。
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-06-09 23:11
LZ问题解决了吗?如何解决的?
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-06-09 23:36
一句话,找到 _KiServiceTable,恢复
驱动开发者 呵呵
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-06-10 22:17
搞定了
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
wingsoft
驱动小牛
驱动小牛
  • 注册日期2006-05-16
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分1001分
  • 威望216点
  • 贡献值0点
  • 好评度214点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-13 12:53
//SSDT Hook Detector
//By xWeasel - April 2007
//Finds SSDT hooks by looping through the system service descriptor table
//if syscall address is outside of the kernel's address space, then it's a hooked function

#include <ntddk.h>
#include <ntifs.h>

typedef struct _MODULE_INFO {
    ULONG dwReserved[2];
    ULONG dwBase;
    ULONG dwSize;
    ULONG dwFlags;
    USHORT wIndex;
    USHORT wRank;
    USHORT wLoadCount;
    USHORT NameOffset;
    char cPath[256];
} MODULE_INFO, *PMODULE_INFO, **PPMODULE_INFO;

typedef struct _MODULE_LIST {
    ULONG dwModules;
    MODULE_INFO Modules[1];
} MODULE_LIST, *PMODULE_LIST, **PPMODULE_LIST;

VOID EnumSSDTEntries(ULONG ulKernelBase, ULONG ulKernelEnd);
PMODULE_LIST GetModuleList();

//Driver entry point
NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath){
    NTSTATUS ntStatus;
    ULONG ulKernelBase, ulKernelEnd;
    PMODULE_LIST pModules = NULL;
    PMODULE_INFO pKernelInfo;

    pModules = GetModuleList();
    if(pModules != NULL){
        pKernelInfo = &pModules->Modules[0];
        ulKernelBase = pKernelInfo->dwBase;
        ulKernelEnd = pKernelInfo->dwBase + pKernelInfo->dwSize;
        EnumSSDTEntries(ulKernelBase, ulKernelEnd);
        ExFreePoolWithTag(pModules, 'mlst');
    }else{
        DbgPrint("Failed to get module list! Exiting...\n");
    }
    
    return STATUS_SUCCESS;
}

//Loop through SSDT entries and check if any system calls aren't within ntoskrnl's range (base and base+size)
VOID EnumSSDTEntries(ULONG ulKernelBase, ULONG ulKernelEnd){
    ULONG ulServiceIndex;
    DbgPrint("Number of services in SSDT: %u\n", (ULONG)KeServiceDescriptorTable->TableSize);
    for(ulServiceIndex = 0; ulServiceIndex < KeServiceDescriptorTable->TableSize; ulServiceIndex++){
        DbgPrint("Syscall #%d is located at %08lX.\n", ulServiceIndex, KeServiceDescriptorTable->ServiceTable[ulServiceIndex]);
        if((ULONG)KeServiceDescriptorTable->ServiceTable[ulServiceIndex] < ulKernelBase || (ULONG)KeServiceDescriptorTable->ServiceTable[ulServiceIndex] > ulKernelEnd){
            DbgPrint("  Syscall #%d at %08lX is hooked!!\n", ulServiceIndex, KeServiceDescriptorTable->ServiceTable[ulServiceIndex]);
        }
    }
}

//List loaded modules (we only need the first one, which is the kernel)
PMODULE_LIST GetModuleList(){
    NTSTATUS NtStatus;
    ULONG ulNeededSize;
    PULONG pulModuleList;

    ZwQuerySystemInformation(SystemModuleInformation, &ulNeededSize, 0, &ulNeededSize);
    pulModuleList = ExAllocatePoolWithTag(PagedPool, ulNeededSize, 'mlst');
    NtStatus = ZwQuerySystemInformation(SystemModuleInformation, pulModuleList, ulNeededSize, 0);

    if(!NT_SUCCESS(NtStatus)){
        DbgPrint("ZwQuerySystemInformation failed! ulNeededSize = %ul, NtStatus = %u.\n", ulNeededSize, NtStatus);
    }
    
    return (PMODULE_LIST) pulModuleList;
}
[url] http://www.81915.com[/url]
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2007-06-14 13:37
楼上这个流氓技术真差,那个是检测 ntcall 是否在nt kernel外,从而判断是否被HOOK的,跟楼主的问题说的问题完全没关系
驱动开发者 呵呵
游客

返回顶部