开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 62501|回复: 386
收起左侧

[Windows逆向] [首发]内核实现修改进程PID以及易语言调用

    [复制链接]
结帖率:89% (8/9)
发表于 2022-2-17 09:11:24 | 显示全部楼层 |阅读模式   天津市天津市
本帖最后由 BeaFeng 于 2022-2-17 09:31 编辑



开发环境
Win10 X64/Visual Studio 2019/WDK 10.0 SDK 10.0.19041.0/易语言5.9

概述
首先我们需要了解的是EPROCESS结构体,每个Windows进程在0环都有一个对应的结构体,这个结构体包含了进程所有重要的信息以及相关结构的指针,不难猜出进程ID也是保存在此结构体中,由于EPROCESS结构位于系统地址空间,所以访问这个结构我们需要有Ring0权限,在Winbbg中 使用dt _EPROCESS查看EPROCESS结构体的信息。
我尽量的做了注释以及每一个步骤都详细的讲解,认真看完相信你们能有所收获。

分析结构
使用Windbg查看EPROCESS的结构体如下

对EPROCESS结构体中的重要成员进行说明

01) +0x000 Header : _DISPATCHER_HEADER //“可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject)
02) +0x018 DirectoryTableBase : [2] Uint4B //页目录表的基址
03) +0x020 LdtDescriptor : _KGDTENTRY
      +0x028 Int21Descriptor : _KIDTENTRY //历史遗留,16位Windows 段选择子不够 每个进程都有一个LDT表,Int21Descriptor 是 DOS下要用的
04) +0x038 KernelTime : Uint4B
      +0x03c UserTime : Uint4B //统计信息 记录了一个进程在内核模式/用户模式下所花的时间
05) +0x05c Affinity : Uint4B //规定进程里面的所有线程能在哪些个CPU上跑,第i位为1表示能在第i个核上运行。Xp是4个字节共32位,所以最多32核 Windows64位就64核。当设置运行的CPU不存在时进程无法运行。64位的操作系统将不适用。
06) +0x062 BasePriority : Char //基础优先级或最低优先级 该进程中的所有线程最起码的优先
07) +0x070 CreateTime : _LARGE_INTEGER
      +0x078 ExitTime : _LARGE_INTEGER//进程的创建/退出时间
08) +0x084 UniqueProcessId : Ptr32 Void //进程的编号(就是在任务管理器中的PID)
09) +0x088 ActiveProcessLinks : _LIST_ENTRY//双向链表,将所有的活动进程都连接在一起,构成了一个链表,进程结构体们彼此拴着各自的腰。而PsActiveProcessHead符号指向全局链表头。


获取UniqueProcessId偏移

上述很明显能看出来UniqueProcessId就是我们需要的进程ID,UniqueProcessId=EPROCESS+0x084,但是如果直接这么写进去 那就会遇到一个比较头疼的问题,因为每一个系统版本可能EPROCESS结构成员的偏移可能都不一样,所以我们需要想办法去定位这个偏移,打开IDA Pro拖进去ntoskrnl.exe内核文件:

接下来会用得到一个函数:PsGetProcessId
微软的解释是 例程返回与指定进程关联的进程标识符(进程 ID)



果然Win10的PID偏移是不一样的,我们可以看到48 8B 81 40 04 00 00 mov rax,[rcx+440],说明进程PID的是由rcx第一个参数+440来的,参数就是EPROCESS指针
我们仔细观察他的字节可以发现48 8B 81[操作码]+偏移,也就是说我们得到PsGetProcessId的地址,设定为变量apiaddr,apiaddr+3就是我们需要的UniqueProcessId偏移

RtlInitUnicodeString(&routineName, L"PsGetProcessId");


apiaddr = MmGetSystemRoutineAddress(&routineName);


UNIQUEPROCESSID_OFFSET = *(PDWORD)(apiaddr + 3);

轻松拿到我们的偏移UNIQUEPROCESSID_OFFSET,接下来就开始我们的操作。

修改进程PID
PsLookupProcessByProcessId(ProcessId, &eProcess);//先取进程EPROCESS结构


ProcessPid = Get64bitValue((PULONG64)((ULONG64)eProcess + UNIQUEPROCESSID_OFFSET)); //保存原来的进程PID  


Set64bitValue((PULONG64)((ULONG64)eProcess + UNIQUEPROCESSID_OFFSET), (ULONG64)SETULONGPID);//写入新的PID值,SETULONGPID变量为我们要修改的新PID值







最后用IO通讯用易语言调用,详细代码如下






功能测试:Win7 X64





功能测试:Win10 X64






总结


Win7和Win10均无异常,而且不触发PatchGuard,Win11以前测试过也是没有毛病的
最后提一杯,PID改成0可以达到隐藏进程的效果,而且不会蓝屏,有兴趣的伙伴可以自己深入研究一下,请不要用于非法用途,仅限学习


如果大家看完不错对你们有帮助的话就点点好评给个赞吧,有什么问题可以在下方留言一起讨论~







补充内容 (2022-2-19 12:36):
统一回复:Win7修改PID后可以不用还原,Win10进程退出之前需要还原否则蓝屏。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点评

修改PID后。如果不还原。关闭进程会蓝屏的,不过还是很牛逼了   河南省洛阳市  发表于 2023-1-8 16:22
有些人不要张口就来了,修改PID并不会触发PG保护,只是学习使用   天津市天津市  发表于 2022-3-8 23:34
修改PID后。如果不还原。关闭进程会蓝屏的,不过还是很牛逼了   新疆维吾尔自治区乌鲁木齐市  发表于 2022-2-19 14:26
修改PID后。如果不还原。关闭进程会蓝屏的   广东省佛山市  发表于 2022-2-17 13:16

评分

参与人数 23好评 +15 精币 +52 收起 理由
※逍遥游※ + 1 感谢分享,很给力!~
qiyuer + 1 感谢分享,很给力!~
悟桐的深思 + 1 感谢分享,很给力!~
a87249594 + 1 + 2 支持开源~!感谢分享
学而不思零 + 1 蓝屏滴,微软的PG检测
fjgh + 1 + 2 支持开源~!感谢分享
inat + 1 + 2 支持开源~!感谢分享
805400753 + 1 为何我Win7 X64修改成0直接蓝屏了?
编程之名 + 1 这个代码2019年都开源了,楼主应该修复一下BUG在发布,半成品.
kyo9766 + 2 感谢分享,很给力!~
eyyhs + 1 风哥牛皮 风哥啥时候开网课?
皮皮驴 + 1 感谢发布原创作品,精易因你更精彩!
猪滴寳貝哝 + 1 + 2 牛逼的帖子!
a393518964 + 1 + 1 新技能已get√
xiouluote + 1 蓝屏专用源码
gmq460412232 + 1 效果能牛了,但是我测试还是能取到真实的PID,感谢分享
atglkm123 + 1 + 2 感谢分享,很给力!~
福仔 + 1 + 20 感谢分享,很给力!~
e小鸟168 + 1 + 4 感谢分享,很给力!~
a524666979 + 1 + 2 新技能已get√
2017浮影 + 1 + 2 新技能已get√
冬夏 + 1 + 2 大神出品,此贴必火!
已注销541904 + 1 + 2 新技能已get√

查看全部评分

本帖被以下淘专辑推荐:

签到天数: 27 天

发表于 4 天前 | 显示全部楼层   重庆市重庆市
谢谢分享。
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2024-2-21 16:44:42 | 显示全部楼层   四川省德阳市
修改PID后。如果不还原。关闭进程会蓝屏的
回复 支持 反对

使用道具 举报

发表于 2024-2-2 03:49:40 | 显示全部楼层   广东省茂名市
666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 10 天

发表于 2024-2-1 13:08:40 | 显示全部楼层   江苏省南京市
可以封装BlackBone库,InitDynamicData函数直接获取偏移。EPROCESS这个结构每个版本都不一样
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2024-1-30 10:52:58 | 显示全部楼层   河南省郑州市
111111111222222222222222
回复 支持 反对

使用道具 举报

签到天数: 27 天

发表于 2024-1-28 18:45:42 | 显示全部楼层   江苏省连云港市
小小心意,意思一下
回复 支持 反对

使用道具 举报

结帖率:0% (0/5)

签到天数: 5 天

发表于 2024-1-22 17:00:10 | 显示全部楼层   广东省江门市
下载试试看
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2024-1-19 20:22:42 | 显示全部楼层   河北省保定市
#在这里快速回复#用还原,Win10进程退出之前需要还原否则蓝屏。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 19:50:54 | 显示全部楼层   广东省广州市
可以可以,不错,WIN7,不还原,蓝屏了,
回复 支持 反对

使用道具 举报

发表于 2024-1-4 12:10:49 | 显示全部楼层   广东省广州市
国际贯例,先来一波 66666,再下载测试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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