找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7273|回复: 5

[半原创]Hook NtCreateKey防IFEO

  [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-8-11 09:26:41 | 显示全部楼层 |阅读模式
本帖最后由 Tesla.Angela 于 2010-8-11 19:55 编辑

年初无聊写着玩的,大家看看吧。保护的是ANTIIFEO.EXE不被劫持。
这个写得并不好,是别人建立了键值之后我才根据KeyHandle判断是否为劫持我的项,如果是,则用ZwDeleteKey删除。
其实可以根据NtCreateKey的ObjectAttributes参数判断,不过我试过一次蓝屏了,所以害怕了,就改用KeyHandle来判断。
绕过的方法见#5。
主要代码:
PVOID GetPointer( HANDLE handle )
{
    PVOID pKey;
    if(!handle)
        return NULL;
    if(ObReferenceObjectByHandle( handle, 0, NULL, KernelMode, &pKey, NULL ) != STATUS_SUCCESS )
        pKey = NULL;
    return pKey;
}

ULONG GetFunctionAddr( IN PCWSTR FunctionName)
{
    UNICODE_STRING UniCodeFunctionName;
    RtlInitUnicodeString( &UniCodeFunctionName, FunctionName );
    return (ULONG)MmGetSystemRoutineAddress( &UniCodeFunctionName );   
}

ULONG GetNtCreateKeyAddr()
{
    ULONG address=0;
    address=0x80624792; //本机硬编码
    KdPrint(("[NtCreateKey] address %x\n",address));
    return address;
}

//原函数
_declspec (naked) NTSTATUS OriginalNtCreateKey
(
    OUT PHANDLE  KeyHandle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_ATTRIBUTES  ObjectAttributes,
    IN ULONG  TitleIndex,
    IN PUNICODE_STRING  Class  OPTIONAL,
    IN ULONG  CreateOptions,
    OUT PULONG  Disposition  OPTIONAL
)
{
    _asm
    {
        //前五个字节
        push 0C4h
            mov eax,g_NtCreateKey
            add eax,5
            jmp eax
    }
}

//处理函数
NTSTATUS DetourMyNtCreateKey
(
    OUT PHANDLE  KeyHandle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_ATTRIBUTES  ObjectAttributes,
    IN ULONG  TitleIndex,
    IN PUNICODE_STRING  Class  OPTIONAL,
    IN ULONG  CreateOptions,
    OUT PULONG  Disposition  OPTIONAL
)
{
    PVOID pKey;
    UNICODE_STRING *pUniName;
    ULONG actualLen;
    ANSI_STRING keyname;
    NTSTATUS status;
    UNICODE_STRING uStrValueName;
    PCWSTR ValueName;
    //execute the real function
    status = OriginalNtCreateKey(KeyHandle,DesiredAccess,ObjectAttributes,TitleIndex,Class,CreateOptions,Disposition);
    if (NT_SUCCESS(status))
    {
        pKey = GetPointer(*KeyHandle);
        if(pKey!=NULL)
        {
            //分配内存
            pUniName = ExAllocatePool(NonPagedPool, 1024*2);
            pUniName->MaximumLength = 512*2;
            //将pUniName里的内容清空
            memset(pUniName,0,pUniName->MaximumLength);
            //得到注册表项的路径
            if(NT_SUCCESS(ObQueryNameString(pKey, pUniName, 512*2, &actualLen)))
            {
                RtlUnicodeStringToAnsiString(&keyname, pUniName, TRUE);
                keyname.Buffer=_strupr(keyname.Buffer);
                //判断是不是IFEO项
                if (strcmp(keyname.Buffer,"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS NT\\CURRENTVERSION\\IMAGE FILE EXECUTION OPTIONS\\ANTIIFEO.EXE") == 0)
                {
                    DbgPrint("[DetourMyNtCreateKey] Some one want to hijeak me!");
                    //释放内存
                    RtlFreeAnsiString(&keyname);
                    if(pUniName)
                        ExFreePool(pUniName);
                    //删除键值
                    ZwDeleteKey(*KeyHandle);
                    //关闭句柄
                    ZwClose(*KeyHandle);
                    //返回成功^_^
                    return STATUS_SUCCESS;
                }
            }
        }
    }
    return status;
}

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-11 09:31:23 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-8-11 19:16 编辑

完整代码:

HookNtCreateKey防IFEO.rar

6.68 KB, 阅读权限: 21, 下载次数: 3

售价: 1 水晶币  [记录]

5

主题

19

回帖

0

精华

铜牌会员

积分
39
发表于 2010-8-11 18:24:05 | 显示全部楼层
用hiv大法就过了。。。
注册表重命名法应该也可以。。。
顺便问下TA大牛
这个论坛的阅读权限跟在线时间有关么?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-11 18:54:58 | 显示全部楼层
用hiv大法就过了。。。
注册表重命名法应该也可以。。。
顺便问下TA大牛
这个论坛的阅读权限跟在线时间有 ...
倒霉蛋儿 发表于 2010-8-11 18:24



首先说明我不是大牛,“大牛”在我看来是贬义词。就是“牛皮哄哄”的意思。
阅读权限和发帖数目有关,好像是50帖30权限。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-11 19:02:48 | 显示全部楼层
绕过的方法太多了,根本不用什么hive操作注册表。
本网站最菜的人 该用户已被删除
发表于 2010-8-11 22:17:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表