首页
社区
课程
招聘
[原创]解决infinityhook在win7环境下启动失效的问题
发表于: 2021-2-23 19:43 11360

[原创]解决infinityhook在win7环境下启动失效的问题

2021-2-23 19:43
11360

背景介绍,楼主的工作是排查网吧盗号或者挖矿问题,所以需要监控到傀儡进程是谁写入的内存。

使用了论坛上的infinityhook源码来监控写入函数,却发现驱动start设置为1时,系统启动后自己设置的infinityhook失效。
经过数日排查发现AddressOfEtwpGetCycleCount的值会改变两次,一次变为无效的指针,第二次就会变成一个对的值,所以驱动启动后开启一个线程来检测这个值,代码如下

 
    NTSTATUS ReIfhInitialize(_In_
    INFINITYHOOKCALLBACK InfinityHookCallback)
{
    NTSTATUS Status;
 
    // 测试 CKCL 会话是否已经启动
    Status = IfhpModifyTraceSettings(1);
    if (!NT_SUCCESS(Status))
    {
        //
        //  // 没有启动 尝试打开
        //
        Status = IfhpModifyTraceSettings(0);
 
        if (!NT_SUCCESS(Status))
        {
            //这里代表打开失败  设置就失败了
            WriteErrorLogFile("重新初始化时尝试启动CKCL会话失败");
            return Status;
        }
 
        Status = IfhpModifyTraceSettings(1);
        if (!NT_SUCCESS(Status))
        {
            WriteErrorLogFile("重新初始化时尝试设置syscall失败");
            return Status;
        }
    }
 
    //
    // We need to resolve certain unexported symbols.
 
    if (!IfhpResolveSymbols())
    {
        WriteErrorLogFile("重新初始化时IfhpResolveSymbols失败");
        return STATUS_ENTRYPOINT_NOT_FOUND;
    }
 
 
    // We care about overwriting the GetCpuClock (+0x28) pointer in
    // this structure.
    //
    PVOID* AddressOfEtwpGetCycleCount;
    if (ISWIN7(g_oviEx)) {
        //WIN7系统
        AddressOfEtwpGetCycleCount = (PVOID*)((uintptr_t)CkclWmiLoggerContext + OFFSET_WMI_LOGGER_CONTEXT_CPU_CYCLE_CLOCK_WIN7); //offset: 0x18
    }
    else {
        //WIN10系统
        AddressOfEtwpGetCycleCount = (PVOID*)((uintptr_t)CkclWmiLoggerContext + OFFSET_WMI_LOGGER_CONTEXT_CPU_CYCLE_CLOCK); //offset: 0x28
    }
    //
    // Replace this function pointer with our own. Each time syscall
    // is logged by ETW, it will invoke our new timing function.
    // 替换掉该地址的值为自己的函数  HOOK的关键步骤  
    _try
    {
        //保存原来的值
        static PVOID * OldAddressOfEtwpGetCycleCount = AddressOfEtwpGetCycleCount;
        //如果原来的值被修改 并且指针有效的情况下修改该指针即可成功,(会出现一次无效指针)
        if (AddressOfEtwpGetCycleCount != OldAddressOfEtwpGetCycleCount && MmIsAddressValid(AddressOfEtwpGetCycleCount))
        {
            *AddressOfEtwpGetCycleCount = IfhpInternalGetCpuClock;
            PsTerminateSystemThread(0);
        }
 
    }
    _except(EXCEPTION_EXECUTE_HANDLER)
    {
        WriteErrorLogFile("重新初始化时AddressOfEtwpGetCycleCount是无效的指针");
        return STATUS_UNSUCCESSFUL;
    }
    return STATUS_SUCCESS;
}
    NTSTATUS ReIfhInitialize(_In_
    INFINITYHOOKCALLBACK InfinityHookCallback)
{
    NTSTATUS Status;
 
    // 测试 CKCL 会话是否已经启动
    Status = IfhpModifyTraceSettings(1);
    if (!NT_SUCCESS(Status))
    {
        //
        //  // 没有启动 尝试打开
        //
        Status = IfhpModifyTraceSettings(0);
 
        if (!NT_SUCCESS(Status))
        {
            //这里代表打开失败  设置就失败了
            WriteErrorLogFile("重新初始化时尝试启动CKCL会话失败");
            return Status;
        }
 
        Status = IfhpModifyTraceSettings(1);
        if (!NT_SUCCESS(Status))
        {
            WriteErrorLogFile("重新初始化时尝试设置syscall失败");
            return Status;
        }
    }
 
    //
    // We need to resolve certain unexported symbols.
 
    if (!IfhpResolveSymbols())
    {
        WriteErrorLogFile("重新初始化时IfhpResolveSymbols失败");
        return STATUS_ENTRYPOINT_NOT_FOUND;

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 4
支持
分享
最新回复 (6)
雪    币: 1469
活跃值: (440)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

前段时间我用这玩意也发现了这个诡异的问题,HOOK突然就失效了,一直不知道是啥原因。
话说ReIfhInitialize是一个线程?

最后于 2021-2-23 22:42 被vblank编辑 ,原因:
2021-2-23 22:39
0
雪    币: 15
活跃值: (3576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
IfhInitialize是他原来的初始化函数,我改了一下名字,重新初始化的意思。
2021-2-23 22:41
0
雪    币: 49
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
我win10系统加载时候就没效果是哪里问题呀,我调试发现他就没进入hook函数
2022-1-16 13:51
0
雪    币: 0
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
论坛那份代码不行,半成品,脱钩,失效一大堆。
2022-4-12 12:40
0
雪    币: 14
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
老哥说的是哪份代码
2022-4-27 15:19
0
雪    币: 1025
活跃值: (628)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
https://github.com/FiYHer/InfinityHookPro/commit/4dab801fb8d5a4072c6a6c0eeeb7058b9d6a25ad
2023-1-11 15:59
0
游客
登录 | 注册 方可回帖
返回
//