山东001在线

 找回密码
 立即注册
搜索
查看: 296|回复: 0

看一看win10 1909 逆向系列:(一. CR3法被MmMapioSpa2023/3/26 22:58:51

[复制链接]
  • TA的每日心情
    奋斗
    2023-6-30 13:23
  • 签到天数: 105 天

    [LV.6]常住居民II

    发表于 2023-3-26 22:58:47 | 显示全部楼层 |阅读模式

    逆向系列文章[url]http://www.yxfzedu.com/调试驱动[/url]的相关知识也可以到网站具体了解一下,有专业的客服人员为您全面解读,相信会有一个好的合作![align=center]http://resources.yxfzedu.com/images/other_images/niumo_video.png[/align]



    一、


    二、





    四、


    五、


    六、


    七、


    八、


    九、


    十、





















    先通过看几个图来认识一下CR3相同的地方:





    1。先选择两个不同进程的CR3。








    2。然后查看页帧数据库的CR3物理页的信息,得知不同进程的PA是一样的【每个人数值可能不同,但这类数值比较特殊,后面会用来做比较】








    3。一个进程的创建是通过MCPAS这个函数,通过逆向后得知CR3的PA的值是由MIPFOP来给予。








    4。好了,知道了他的由来,再来看看他是怎么屏蔽的,通过逆向MMS得知,关链函数在MFSP。


    上面我们得知PA是一个比较特殊的地址:如图





    PA:94898转成虚拟地址894000,发现没,他在P范围之内,这就是他的判定的原理,在这个范围之内,则判定失败。











    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    好了,现在开始我们的绕过代码之行:


    先上效果图(我们以WO为例),因为懒,就没有去对齐,看着就行:











    代码写的简单

    #
    #PTE_BASE0
    #MMPFNDATABASE1
    BOOLEANBPC3(INPHYSICAL_ADDRESSPA);
    PVOIDFB(INCHAR);
    PUINT64OPA=0;
    PVOID;

    VOIDU(PDRIVER_OBJECTDO)
    {
    ()
    {
    MUIS(,000);
    }
    KP(("\"));

    }

    NTSTATUSDE(PDRIVER_OBJECTDO,PUNICODE_STRINGRP)
    {

    NTSTATUS=STATUS_SUCCESS;
    DO-DU=U;
    KP(("\"));
    PHYSICAL_ADDRESSP;
    PQP=0;
    (!BPC3(P))
    {
    KP(("BPC3E\"));
    }
    =MMIS(P,000,FALSE);
    KP(("=%\",));

    ;
    }
    BOOLEANBPC3(
    INPHYSICAL_ADDRESSPA
    )
    {
    首步先申请000非分页内存,得到PTE用来替换
    PVOIDM=EAPWT(NPP,000,'M3');
    (!M)
    {
    KP(("E\"));
    0;
    }

    第二步找到MMPTE基址
    PVOIDPB=FB(PTE_BASE);
    PVOIDPB=FB(MMPFNDATABASE);
    PB=(UINT64)PB0FFFFFFFFFFFFFFF0;
    (!PB!PB)
    {
    KP(("FB\"));
    0;
    }
    第步找到CR3的MMPFNPA来替换
    UINT64I=PAQP0;
    保存旧的OPA,可以在映后恢复,也可以不恢复,目前未发现不恢复会出现问题
    OPA=*(PUINT64)(I*0+(UINT64)PB+8);
    第4步得到开始申请的非分页内存的PTE,进行替换
    UINT64MP=(((UINT64)M0FFFFFFFFFFFF)0)*8+(UINT64)PB;
    *(PUINT64)(I*0+(UINT64)PB+8)=MP;
    1;
    }
    PVOIDFB()
    {
    PUCHARBA=MGVFP;

    ()
    {
    *(PUINT64)(BA+0);
    }

    {
    *(PUINT64)(BA+2);
    }

    }



    完。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|山东001在线 ( ICP11027147 )

    GMT+8, 2026-4-4 19:09 , Processed in 0.040490 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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