易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 5778|回复: 0

Win7 64上隐藏进程和保护进程源代码

[复制链接]

9

主题

2

回帖

15

积分

编程入门

Rank: 1

魔鬼币
515
发表于 2017-5-30 09:12:10 | 显示全部楼层 |阅读模式

实现隐藏进程和保护进程的手段依然是DKOM,不过是修改的位置不同而已。
至于怎么在64位操作系统上加载驱动,我已经说过了,请参考这里。
驱动使用WDK7的x64 Free Build Environment编译。

核心源码:
#define PROCESS_FLAGS_OFFSET                   0x440
#define PROCESS_ACTIVE_PROCESS_LINKS_OFFSET    0x188
#define PROCESS_RUNDOWN_PROTECT_OFFSET         0x178

ULONG64 Get64bitValue(PVOID p)
{
    if(MmIsAddressValid(p)==FALSE)
        return 0;
    return *(PULONG64)p;
}


VOID Set64bitValue(PVOID p, ULONG64 v)
{
    KIRQL OldIrql;
    if(MmIsAddressValid(p)==FALSE)
        return ;
    OldIrql = KeRaiseIrqlToDpcLevel();
    *(PULONG64)p=v;
    KeLowerIrql(OldIrql);
}


VOID RemoveListEntry(PLIST_ENTRY ListEntry)
{
    KIRQL OldIrql;
    OldIrql = KeRaiseIrqlToDpcLevel();
    if (ListEntry->Flink != ListEntry &&
        ListEntry->Blink != ListEntry &&
        ListEntry->Blink->Flink == ListEntry &&
        ListEntry->Flink->Blink == ListEntry)
    {
            ListEntry->Flink->Blink = ListEntry->Blink;
            ListEntry->Blink->Flink = ListEntry->Flink;
            ListEntry->Flink = ListEntry;
            ListEntry->Blink = ListEntry;
    }
    KeLowerIrql(OldIrql);
}


VOID HideProcess(PEPROCESS Process)
{
    RemoveListEntry((PLIST_ENTRY)((ULONG64)Process + PROCESS_ACTIVE_PROCESS_LINKS_OFFSET));
}


VOID Test(ULONG uIoControlCode)
{
    switch(uIoControlCode)
    {
        case IOCTL_HideProcess:
            {
                __try
                {
                    memcpy(&dwInputPid,pIoBuffer,sizeof(dwInputPid));
                    status=PsLookupProcessByProcessId(dwInputPid,&eProcess);
                    if(NT_SUCCESS(status))
                    {
                        HideProcess(eProcess);
                    }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
        case IOCTL_ProtectProcess:
            {
                __try
                {
                    memcpy(&dwInputPid,pIoBuffer,sizeof(dwInputPid));
                    status=PsLookupProcessByProcessId(dwInputPid,&eProcess);
                    if(NT_SUCCESS(status))
                    {
                        OldVal=Get64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_RUNDOWN_PROTECT_OFFSET));
                        Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_RUNDOWN_PROTECT_OFFSET),RdpVal);
                    }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
        case IOCTL_UnprotectProcess:
            {
                __try
                {
                    Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_RUNDOWN_PROTECT_OFFSET),OldVal);
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
    }
}


更新内容:
#define PROCESS_ACTIVE_PROCESS_LINKS_OFFSET    0x188
#define PROCESS_FLAG2_OFFSET                   0x43C
#define CROSS_THREAD_FLAGS_OFFSET              0x448

VOID Test(ULONG uIoControlCode)
{
    switch(uIoControlCode)
    {
        case IOCTL_ProtectProcess:
            {
                __try
                {
                    memcpy(&dwInPid,pIoBuffer,sizeof(dwInPid));
                    dprintf("[x64Drv] dwInPid=%ld",dwInPid);
                    status=PsLookupProcessByProcessId(dwInPid,&eProcess);
                    if(NT_SUCCESS(status))
                    {
                        dwPOV=Get64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_FLAG2_OFFSET));
                        Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_FLAG2_OFFSET),dwPNV);
                        dprintf("[x64Drv] Protect Process finished");
                    }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
        case IOCTL_ProtectThread:
            {
                __try
                {
                    memcpy(&dwInTid,pIoBuffer,sizeof(dwInTid));
                    dprintf("[x64Drv] dwInTid=%ld",dwInTid);
                    status=PsLookupThreadByThreadId(dwInTid,&eThread);
                    if(NT_SUCCESS(status))
                    {
                        dwTOV=Get32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET));
                        Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTNV);
                        dprintf("[x64Drv] Protect Thread finished");
                    }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
        case IOCTL_UnprotectProcess:
            {
                __try
                {
                    Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_FLAG2_OFFSET),dwPOV);
                    Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTOV);
                    dprintf("[x64Drv] Unprotect Process and Thread finished");
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
        case IOCTL_PauseThrdProtect:
            {
                __try
                {
                    Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTOV);
                    dprintf("[x64Drv] Thread Protect Suspended!");
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
        case IOCTL_ResumeThrdProtect:
            {
                __try
                {
                    Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTNV);
                    dprintf("[x64Drv] Thread Protect Resumed!");
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                    ;
                }
                break;
            }
    }
}

警告:此代码在没有破解内核的WIN7 X64上使用,会触发PatchGuard引起蓝屏。
Warning: If you use this code in WIN7 X64 without "crack kernel", it will trigger PatchGuard and cause BSOD.
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表