潜水太久啦,来水个帖。非常简单,手写个驱动,在DriverEntry上加上一句:手动加载,调用栈如下: 发现华点:IopLoadDriver基本上只有第一个参数没确定意义了。 使用IDA对IopLoadUnloadDriver进行引用分析。来自IopLoadDriverImage: 再对IopLoadDriverImage引用分析。来自NtLoadDriver。 这唯一的一个参数,就是注册表对应的服务路径啦,例:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Test_Drv 这个注册表是在你 Ring3 调用 CreateServiceW的时候就填好的。那么调用路径就清晰啦:这个函数是基本算是最重要的函数啦,毕竟是它调用的DriverEntry。而分析上述调用路径的唯一作用,就是为了得到 IopLoadDriver参数的意义。(注册表的 Handle)由于这个函数比较大,仅分析重要部分,伪代码如下:这个函数非常强大,传入需要加载的驱动的路径,就可以直接加载一个可直接运行的无DriverObject驱动。(请读者自行测试)功能包括:创建DriverSection、映射内存、修复重定位、将DriverSection添加入PsLoadedModuleList、填充IAT、填充_security_cookie、...(这几个功能已经够用了)没错,上述的 DriverSection 就是 驱动模块链表 连接的结构体 :_LDR_DATA_TABLE_ENTRY。同样,这个函数比较大,这里仅列出重要部分伪代码:至此,一个 可在驱动模块链表(PsLoadedModuleList)可以找到的驱动就加载完成了。如果你需要隐藏或伪装的驱动本身有签名,就不用patch了,如果硬要加载一个无签名的,那才需要patch,最好不要啦,因为有蓝屏几率。在通过MiObtainSectionForDriver获取DriverSection的时候,Windows就会进行数字签名认证啦!调用栈如下: 通过 SeValidateImageHeader进入 CI.DLL 进行签名校验,CL.DLL 部分就不再继续跟了,我们主要看如何进入CI.DLL: 网上一般通过Patch CI!g_CiOptions实现绕过数字签名校验,这边就不搞这么复杂了,我们 patch qword_14040EF40,换成我们的函数,返回 STATUS_SUCCESS 就可以通过签名校验了,虽然 qword_14040EF40受PG保护,但是只修改一会,加载完驱动就改回去,PG就反应不过来了。(我试过很多次,基本上改了 qword_14040EF40 后几个小时PG才能反应过来)。定位: win10、win11 我都看过, 都是在 &SeCiCallbacks + 0x20 的位置,可能有些版本不同。操作很简单,通过调用上面说到过的未导出函数,就能实现。需要隐藏的驱动或伪装的驱动代码如下:(主要是创建一个 名为 ICEY_Device的设备,创建成功说明 驱动加载成功)编译出来的 驱动文件 名字为 : Test_Drv.sys这里就贴一下伪代码,实际代码请查看项目:对就这么简单,就加载了一个隐藏驱动(无DriverObject 、无DriverSection)由于没有这两个结构体,所以这个驱动一些函数是无法调用的,如何解决这里不赘述了。在项目中我采取了IO劫持的方式,让我的隐藏驱动创建设备,原理就是给隐藏驱动的 DriverEntry第一个参数传进一个没有设备的DriverObject,详情请看代码。 ARK工具找不到: WinObj 双击 设备名字测试:(成功输出 “Create File Finsh!”) 同上,只贴伪代码,实际代码请查看项目: 将 Test_Drv.sys 伪装成 360AntiHacker64.sys 。ARK签名检测: 火绒剑检测: 不保证100%可过 PG,只是在我测试 40+小时以上,win10 win11 均未被PG检测。项目用到大量未导出函数,需要自己想办法获取函数地址。进入 Kernel_PDB.c InitAllOffSet() 进行修改管安装不管卸载,重启即可卸载哈哈哈哈。Drv_Hide_And_CamouflageDbgBreakPoint();
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-276912.htm
“可过PG”的驱动伪装与隐藏
426 浏览
24 回复
想问一个很小白的问题,有不触发PG的进程隐藏源码吗?
冰雄
楼主试过能过 大黄蜂等翻录软件的驱动隐藏进程的检测吗?
可以的吧
楼主试过能过 大黄蜂等翻录软件的驱动隐藏进程的检测吗?
可以的吧
编程与少年
隐藏进程可以不pg的
怎么做呢,断链会PG的哦
隐藏进程可以不pg的
怎么做呢,断链会PG的哦
qqxiaobing
在填充IAT过程中,如果我直接不下段F11进去单步步过就会报错,单步步过可以通过,但是之后再修复WDF这里 申请内存的时候又会报错,求解,大佬
解决了吗?我也是MakeIAT这里报错,在里面的MiSnapThunk报了分页错误,提示访问了只读内存
在填充IAT过程中,如果我直接不下段F11进去单步步过就会报错,单步步过可以通过,但是之后再修复WDF这里 申请内存的时候又会报错,求解,大佬
解决了吗?我也是MakeIAT这里报错,在里面的MiSnapThunk报了分页错误,提示访问了只读内存
问一个小白的问题,CI.DLL那里,楼主是怎么知道qword_1403A5C60这个变量是代表进入CI.DL里的函数的呢?我在IDA中对这个变量查询引用,发现没有地方初始化它
PTDrvObj->DriverExtension = &PTDrvObj[1];
*(PULONG64)(&PTDrvObj[1]) = &PTDrvObj[0];这是两步是做什么的啊,&PTDrvObj[1]这样不就是 pObj+sizeof(obj) ObCreateObjectEx返回的obj地址是连续的吗?
最后于 2023-7-30 21:13
被z张大侠编辑
,原因:
*(PULONG64)(&PTDrvObj[1]) = &PTDrvObj[0];这是两步是做什么的啊,&PTDrvObj[1]这样不就是 pObj+sizeof(obj) ObCreateObjectEx返回的obj地址是连续的吗?
最后于 2023-7-30 21:13
被z张大侠编辑
,原因:
楼主试过能过 大黄蜂等翻录软件的驱动隐藏进程的检测吗?
Prompto
想问一个很小白的问题,有不触发PG的进程隐藏源码吗?
隐藏进程可以不pg的
想问一个很小白的问题,有不触发PG的进程隐藏源码吗?
隐藏进程可以不pg的
qqxiaobing
在填充IAT过程中,如果我直接不下段F11进去单步步过就会报错,单步步过可以通过,但是之后再修复WDF这里 申请内存的时候又会报错,求解,大佬
我给你看看
在填充IAT过程中,如果我直接不下段F11进去单步步过就会报错,单步步过可以通过,但是之后再修复WDF这里 申请内存的时候又会报错,求解,大佬
我给你看看
学习,感谢分享
竟然没看懂
lononan
屁股
你牛 哈哈
屁股
你牛 哈哈
PG是什么意思?
在填充IAT过程中,如果我直接不下段F11进去单步步过就会报错,单步步过可以通过,但是之后再修复WDF这里 申请内存的时候又会报错,求解,大佬
mb_jglkxfsm
大佬,我在使用MiGetSystemAddressForImage映射后,dllbase的地址错误,全是??。这是为什么
MiGetSystemAddressForImage只是向系统申请一个空间,它返回一个地址,还没映射。把返回的地址通过MiMapSystemImage映射,才有内容。
大佬,我在使用MiGetSystemAddressForImage映射后,dllbase的地址错误,全是??。这是为什么
MiGetSystemAddressForImage只是向系统申请一个空间,它返回一个地址,还没映射。把返回的地址通过MiMapSystemImage映射,才有内容。