首页
社区
课程
招聘
[原创]逆向火绒安全软件驱动--sysdiag
发表于: 2017-10-3 16:12 13016

[原创]逆向火绒安全软件驱动--sysdiag

2017-10-3 16:12
13016
NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT  DriverObject , _In_ PUNICODE_STRING RegistryPath) {
    NTSTATUS status = 0;

#ifdef DBG
    __debugbreak();
    PRINT_INFO;
#else
    PRINT_INFO;
#endif // DBG

    //  不支持xp以下版本
    if ((USHORT)NtBuildNumber < 0xa28) {
        return 0xC00000BB;
    }

    g_sysdiag.v_580 = &g_sysdiag.v_580;
    g_sysdiag.v_588 = &g_sysdiag.v_580;
    g_sysdiag.v_dd8 = &g_sysdiag.v_dd8;
    g_sysdiag.v_de0 = &g_sysdiag.v_dd8;
    g_sysdiag.v_1208 = &g_sysdiag.v_1208;
    g_sysdiag.v_1210 = &g_sysdiag.v_1208;
    g_sysdiag.v_1638 = &g_sysdiag.v_1638;
    g_sysdiag.v_1640 = &g_sysdiag.v_1638;
    g_sysdiag.v_1a68 = &g_sysdiag.v_1a68;
    g_sysdiag.v_1a70 = &g_sysdiag.v_1a68;
    g_sysdiag.v_1e90 = &g_sysdiag.v_1e90;
    g_sysdiag.v_1e98 = &g_sysdiag.v_1e90;
    g_sysdiag.v_1ea0 = &g_sysdiag.v_1ea0;
    g_sysdiag.v_1ea8 = &g_sysdiag.v_1ea0;
    g_sysdiag.v_1eb0 = &g_sysdiag.v_1eb0;
    g_sysdiag.v_1eb8 = &g_sysdiag.v_1eb0;


    //获取当前正在运行的操作系统例程返回版本信息
    //初始化6个读写锁
    //初始化2个资源变量。
    g_sysdiag.rtl_osversioninfoexw.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
    if (RtlGetVersion((PRTL_OSVERSIONINFOW) &g_sysdiag.rtl_osversioninfoexw) < 0)
        return 0xC0000001;
    NdisInitializeReadWriteLock(&g_sysdiag.ndis_rw_lock_168);
    g_sysdiag.nrl_flag_160.flag_0 |= 3u;
    if (!(g_sysdiag.nrl_flag_160.flag_0 & 1))
        return 0xC0000001;
    NdisInitializeReadWriteLock(&g_sysdiag.ndis_rw_lock_598);
    g_sysdiag.nrl_flag_590.flag_0 |= 3u;
    if (!(g_sysdiag.nrl_flag_590.flag_0 & 1))
        return 0xC0000001;
    g_sysdiag.eres_flag_9b8.flag_0 &= 0xFDu;
    g_sysdiag.eres_flag_9b8.flag_0 = g_sysdiag.eres_flag_9b8.flag_0 & 0xFE | (ExInitializeResourceLite(&g_sysdiag.eresource_9c0) >= 0);
    if (!(g_sysdiag.eres_flag_9b8.flag_0 & 1))
        return 0xC0000001;
    NdisInitializeReadWriteLock(&g_sysdiag.ndis_rw_lock_df0);
    g_sysdiag.nrl_flag_de8.flag_0 |= 3u;
    if (!(g_sysdiag.nrl_flag_de8.flag_0 & 1))
        return 0xC0000001;
    NdisInitializeReadWriteLock(&g_sysdiag.ndis_rw_lock_1220);
    g_sysdiag.nrl_flag_1218.flag_0 |= 3u;
    if (!(g_sysdiag.nrl_flag_1218.flag_0 & 1))
        return 0xC0000001;
    NdisInitializeReadWriteLock(&g_sysdiag.ndis_rw_lock_1658);
    g_sysdiag.nrl_flag_1650.flag_0 |= 3u;
    if (!(g_sysdiag.nrl_flag_1650.flag_0 & 1))
        return 0xC0000001;
    g_sysdiag.eres_flag_1a78.flag_0 &= 0xFDu;
    g_sysdiag.eres_flag_1a78.flag_0 = g_sysdiag.eres_flag_1a78.flag_0 & 0xFE | (ExInitializeResourceLite(&g_sysdiag.eresource_1a80) >= 0);
    if (!(g_sysdiag.eres_flag_1a78.flag_0 & 1))
        return 0xC0000001;
    NdisInitializeReadWriteLock(&g_sysdiag.ndis_rw_lock_1ec8);
    g_sysdiag.nrl_flag_1ec0.flag_0 |= 3u;
    if (!(g_sysdiag.nrl_flag_1ec0.flag_0 & 1))
        return 0xC0000001;

    g_sysdiag.pdriver_object_8 = DriverObject;
    g_sysdiag.ppdriver_object_0 = &DriverObject;


    PINIT_LIST list = g_LT;
    int IoRegister_flag = 0;
    int unload_flag = 1;
    if (list) {
        for (; list->pnext_list;) {
            status = list->pnext_ft->subA(list->pnext_ft , DriverObject , RegistryPath);
            if (status < 0) {
                //退出清理
                hr_ExitCleaner(DriverObject);
                return unload_flag ? status : 0;
            }
            IoRegister_flag = list->pnext_ft->v_10 ? 1 : IoRegister_flag;
            unload_flag = list->pnext_ft->subB ? unload_flag : 0;
            list = list->pnext_list;
        }
    }

    for (int i = 0; i < 28; i++) {
        DriverObject->MajorFunction[i] = hr_driver_dispatch;
    }
    if (unload_flag) {
        DriverObject->DriverUnload = hr_driver_unload;
    }
    if (IoRegister_flag) {
        IoRegisterBootDriverReinitialization(DriverObject , hr_BootDriverReinitialization , (PVOID) 0x424F4F54);
        IoRegisterDriverReinitialization(DriverObject , hr_DriverReinitialization , NULL);
    }
    g_sysdiag.ppdriver_object_0 = NULL;
    return status;
}
  • 只保证编译通过...
  1. and more...
  1. 排除xp以下版本
  2. 获取当前正在运行的操作系统例程返回版本信息
  3. 初始化6个Ndis读写锁
  4. 初始化2个资源变量
  5. 注册卸载和分发函数
  6. 待逆...
  • and more...
  • 排除xp以下版本

  • [注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

    收藏
    免费 2
    支持
    分享
    最新回复 (17)
    雪    币: 1176
    活跃值: (1264)
    能力值: ( LV12,RANK:380 )
    在线值:
    发帖
    回帖
    粉丝
    2
    todo 1. 被吞了 markdown有点问题 语法:~~ XXXXXXXX~~ 
    2017-10-3 16:15
    0
    雪    币: 436
    活跃值: (111)
    能力值: ( LV7,RANK:110 )
    在线值:
    发帖
    回帖
    粉丝
    3
    想准备逆来着,  没想到已有大神逆了
    2017-10-3 16:50
    0
    雪    币: 766
    活跃值: (2369)
    能力值: ( LV3,RANK:20 )
    在线值:
    发帖
    回帖
    粉丝
    4
    mark
    2017-10-3 18:13
    0
    雪    币: 18
    活跃值: (1059)
    能力值: ( LV7,RANK:110 )
    在线值:
    发帖
    回帖
    粉丝
    5
    太支持了。
    2017-10-3 20:48
    0
    雪    币: 12848
    活跃值: (9147)
    能力值: ( LV9,RANK:280 )
    在线值:
    发帖
    回帖
    粉丝
    6
    之前逆了一下早期注入,之前的版本说是跟Win10ASLR会冲突导致开机黑屏,最近又修好了,不知道他们改了什么
    2017-10-3 21:36
    0
    雪    币: 1176
    活跃值: (1264)
    能力值: ( LV12,RANK:380 )
    在线值:
    发帖
    回帖
    粉丝
    7
    hzqst 之前逆了一下早期注入,之前的版本说是跟Win10ASLR会冲突导致开机黑屏,最近又修好了,不知道他们改了什么
    待我逆完就知道了...
    2017-10-4 11:12
    0
    雪    币: 8835
    活跃值: (2404)
    能力值: ( LV12,RANK:760 )
    在线值:
    发帖
    回帖
    粉丝
    8



    hzqst

    之前逆了一下早期注入,之前的版本说是跟Win10ASLR会冲突导致开机黑屏,最近又修好了,不知道他们改了什么
    hook jmp  改成远跳,用E9是会炸的,对于早期启动的几个系统进程,notify时的ntdll的基址不是最终基址...
    api调用改成gs取ldr取ntdll的基址,然后hash搜索api调用,就ok。

    仅仅是xxxx.exe这些早期启动的系统进程需要,不过我怀疑他们可能直接放过对早期系统进程注入...


    2017-10-4 11:20
    0
    雪    币: 615
    活跃值: (590)
    能力值: ( LV4,RANK:40 )
    在线值:
    发帖
    回帖
    粉丝
    9
    hook  jmp    改成远跳,用E9是会炸的.为什么?
    2017-10-6 05:59
    0
    雪    币: 408
    活跃值: (156)
    能力值: ( LV7,RANK:110 )
    在线值:
    发帖
    回帖
    粉丝
    10
    无法学习,只能膜拜
    2017-10-6 08:49
    0
    雪    币: 408
    活跃值: (156)
    能力值: ( LV7,RANK:110 )
    在线值:
    发帖
    回帖
    粉丝
    11
    无法学习,只能膜拜
    2017-10-6 08:49
    0
    雪    币: 244
    活跃值: (454)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    12
    楼主很厉害啊。
    2017-10-10 09:18
    0
    雪    币: 12848
    活跃值: (9147)
    能力值: ( LV9,RANK:280 )
    在线值:
    发帖
    回帖
    粉丝
    13
    ugvjewxf hook jmp 改成远跳,用E9是会炸的.为什么?
    没为什么,offset超过4GB了
    应该用mov  rax,  XXX  +  jmp  rax来代替
    2017-10-10 09:37
    0
    雪    币: 1176
    活跃值: (1264)
    能力值: ( LV12,RANK:380 )
    在线值:
    发帖
    回帖
    粉丝
    14
    寧靜致遠 楼主很厉害啊。
    在座的各位都是大佬。。。
    2017-10-10 20:52
    0
    雪    币: 113
    活跃值: (76)
    能力值: ( LV3,RANK:20 )
    在线值:
    发帖
    回帖
    粉丝
    15
    加油。有没有人逆pchunter这么经典的东东,应该是加过壳
    2017-10-16 18:09
    0
    雪    币: 665
    活跃值: (1051)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    16
    怪不得盖中盖
    2017-12-14 03:19
    0
    雪    币: 443
    活跃值: (45)
    能力值: ( LV3,RANK:20 )
    在线值:
    发帖
    回帖
    粉丝
    17
    您好,我想请问一下GitHub上的代码是不是并不是完整的代码
    2019-5-22 15:19
    0
    雪    币: 300
    活跃值: (2477)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    18
    mark
    2019-5-22 15:53
    0
    游客
    登录 | 注册 方可回帖
    返回
    //