本套课在线学习视频(网盘地址,保存后即可免费观看):
https://pan.quark.cn/s/e6f1cc9ed857
声明:所有发布内容来自网络,仅供用户学习交流测试网速使用,部分影片如有内嵌广告,请勿上当受骗。获取的所有内容请在24小时内删除,禁止非法恶意传播或商业用途。如有侵权,请联系删除,个人微信:sumith,防失联。
好吧。我说一下改CS,改CS其实很简单,各位。这个玩意应该很简单的,我给你们看一下,尽管我们我之前这个好像是101012的,但其实是本质上是一样的。算了,你看我的,你看我的,因为我回来的比较晚,看这个,这个我就不说了。各位,这只是这应这个应该是打印,我忘了是啥了。看这个吧看这个,我这个虽然改的是这个101012,但是我这边各位请看啊,这个我就不说了,直接是调门进去的是吧?这里是读一下地,对不对?对吧?注意,这里跟我们之前操作环境是一样的,对吧?我在这个地方跳进去又写了一个函数,函数从这个地方跳进去,跳到这个函数里面,跳到这这个是我PDE的地址,对吧,我把它弄成这种,这个是PTE的地址,在这里我就开始循环了,对吧,是不是?所以你这里改写E和F差不多的,但是29912我也忘了是写E还是F,你可以试一下因为最后有一个,最后有一个,好像也确实无效,你也改不了,应该不影响。你在这儿,应该是跟应该是一样的,通过他这种计算知识所得得出来一个物理地址是吧?你判断一下,判断一下,这个地方首先你的高位,注意你的高位对不对?你的高的这个PD判断一下它是否与是否等于一,就是否有效,对吧?就返回了。如果是无效的话,你他就继续下一个处理。如果是有效的话怎么办呢?如果是有效的话怎么办呢?就给它和上一个七,对不对?这个应该没问题。这个应该没问题,各位。再把这个指针给了他,又给他重新复制一下,判断他是否是大爷。如果是大爷的话我就continue了,能理解吧。然后呢这底下还是一样的,其实很简单,这个东西对不对?写的会面,我记得我老早也有一份了,不是你货七和和四是一样的。等一下,你后期和四是一样的,没有区别。我记得我这里,我记得我以前有一在在叉P里面,这一份是在也我写过一份的。那这一个也可以,是吧?这个指令认这个认识不,各位这种指令认识不?不认识,我这个意思是设置第二位,注意从零开始的。你比如说写个零的话,他就是把你的这里面的第零位给它设置为一。如果写写一的话,就把第二位设置为一,懂我意思吧?也就相当于货是吧?我只是给他加了一个锁,local指令,去设置某一个位,是否设置某一个位为一,这是一样的。然后设完之后我还给他刷一下。还有一个问题,就是万里山河问了我一个问题,你放过来,你发过来。用那我发我的太多了,我不知道是哪一个是吧?我找一下,群里面有个629的是吧,我不知道你们是否对得上。好了,各位,我看一下你这个,你你这么你没有必要每次去调一下这个门,没有必要java。12。这不是九吗?应该,这是42,我看一下,12A。好像是我再看一下,我也忘了这种他妈的记不住我的。好了,我看取出来。判断一下and一然后就跳走。等于零就跳走,然后再取出来高位,不是再取出来或上一个四。合上市之后。把这一个存进去。大页你设置完之后,它是没有PTE的没有PTE的。他没有PT你在这里算啥?你这个是你这些也不成立的。没有,下面也没。不是,你没有的话,你要注意一个问题,你这里没有的话,也可能你这里可以拿到值,你读可能读个空。也有可能是一个垃圾值,或者是有效的代码段,你把人家代码段可能改了就飞了。他不可能不难平的,他肯定会难平的,这个怎么可能不难平?百分百能平。你这不行,你这对你这不行,你这没大意判断的。那肯定,你那那肯定,他不可能说死在一个地方的,他有死有很多情况,你这么一改,有可能把人家的原本的,比如说他只有大页的话,假设是一个代码段,一个代码到底是一个ZJZ是不是经过你加一之后变成一个GZ了,那么整个逻辑都不一样了?也有可能你把人家汇编指令给改差改叉劈了,是不是?对吧?因为你你改的是里面的值,或者是你读到空了。你读到空的话,你在这里判断一下,你也有可能你过去了。但是问题是你玩你没有读到空的时候,那你这个地方也仍然有可能是存在暗的一相等的,对吧?不也不是抄,你得有自己的思路,抄control c和control v也要看着来,对吧?是不是你肯定买的,你买的键盘我觉得肯定是那只有三个键的键盘,对吧?只有一只有个勘测V和C。一样的,这个题这个很简单,但是你不能从这个林地就开始改,知道吧?这个玩意不能从零地址开始改,而且从零地从零地址开始改,有可能就会造成有问题。还有一个问题,还有一个问题,兄弟们有个万里山河问我,就是说他改完之后,改完之后,他用他在进程这里去他去看自己的,也就是他没有估计我是这么想的,他没有拿拿他本进程的CR3去看那个那那个地方改了没有。他看的肯定是随意拿了一个CR3或者system CR3去看改了没有。那是不可能的,因为所有的它的这个它里面,基本上是PDE不完全相同。它映射的时候是PTE相同,PDE不完全相同。你改的可能是自己的PDE,不是别的进程的PDE知道吗?这也是为什么你改了之后比其他进程他们不影响,但是你自己的进程可以读到。能理解吧。那不是缓存的问题,那是自己进程。你只能通过自己进程的CR3去看,不然的话不对。因为大家的PDE可能不是一个。好,这个是有任务的。各位你们后面学到这个东西之后要干啥?我给你们描述一下,各位,这上面是有个大招点,知道吧?当然不是这一个大招,那主要后面我们干完之后,到你驱动会搞了,你至少学的差不多内核上了。你学完之后,你可以构建,构建就是把进程的CR3替换了。知道吗?就比如说我有一个A进程,注意我有一个A进程好了,真的是逼进程。咱们大体上内核是共享的,我们都有这个认知也没有错,对吧?所以我把这个内核地方给它铺红铺黄好了。那么现在由于你是共享的,我比如说我这里有一个函数,叫做什么呢?叫MM,这个我函数我们知道MM address。有一个这样的函数对吧?那么这个函数你你你访问跟我访问是一样的,是不是各位为什么会一样呢?你访问跟我访问为什么会一样呢?是由于我们的CR3,CR3指里面指向的什么PDE或者是PDE是同一个,对吧?但是我想把它给糊口了。而且我那你B还查不到。对吧,就你一读,你的你读到的这个,是原有的,我一我自己用,就是我户口过的。这个能理解吗?但由于系统早就给我们构建完CR3了,那咱们都长得一样,那么怎么办呢?我首先我就会申请一个页,申请一个月,把自己CR3的页coy 1份,复制一份,复制进来了好了,我再申请,我再再便利,再便利。这个CR3中有多少个PTE?PTE就是PTT,PTE。我在什么呢?各位我在什么呢?复制。我再申请内存,他有多少我就申请多少,再复制,也就是把整个所谓的列表,我全他妈给你贡献自己重建一份,重建一份干嘛就干嘛呢,再找到所谓的通过这个线性地址,在我的这个列表中计算出所谓的物理地址是哪一个,也就是PTE是哪一个,对吧?PDE是哪一个?PDE是哪一个?我把这个PDE给它替换了,再把PTE也给它替换了。然后这个时候,我尽管内存咱俩还是一样的,我俩的内存还是一样的,这没有问题。但是我已经替换了。替换了之后,我在我这上面户口,户口我永远都不会改你那边的东西了,那咱俩就隔离了。这能理解吗?各位?也就是我俩本来是映射的内存,但是我让你走的是不映射的那就是把你的映射给你摘掉,摘掉之后,咱俩就不映射了不映射之后,我改我的页,跟你没有关系。这个时候我就算户口的内核也不会触发PG懂我意思吗?各位?好了,可能觉得虎哥那你户口他有什么用?我跟他不一样有什么用?各位,但是我们如果去做通信通信去通信的时候,这个函数就是我挂钩的,这个函数就是我挂钩的。那么我在三环我自己调过来的时候是钩住的,我能跑到我正常逻辑。但是你查我的时候,你就会发现你跟原来一模一样,你查不到你查到的还是你自己的页,跟我的页没有关系,你查不到我的。懂我意思吧?那有可能会回来户口,那我直接替换他不玩了,我为什么要户口?你直接替换,当然也可以。但是会出同样一个问题,因为由于你的PDE可能跟他的PDE是一个知道吧?那么你就会破坏它原有的逻辑。也不是破坏原有的逻辑,就是你改就把他那边也改了。好了。游戏不查别的进程的PDE和PDE吗?他查个毛,他查啥?他读的都是虚拟地址,基本上不会读你的物理地址,能理解吗?好了,我再说一下,比如说我把这个给你们呈现一下,比如说这个是CR3对吧?我们现在不考虑别的,你就考虑我们这个目前这个29912对吧?好了,这里是四个,这四个是我们我们进城的那其余以下四个是可能是别的,那不管它,这是我们的PTE,PDE,这个是我们的PTE。好了,各位。比如说这个指向它对吧?好了,这个指向它。各位好,我操。好了,各位,那么这个。这个29912它当然了没有后面我们学的64。那么因为29912它是它的这个可能有点短,对吧?所以它没有长线的这么清晰。那么各位假设我现在举个例子,我们的这个PD。这跟这个PPDE所有进程都共享。这是下一个进程的PD也就其他的P其他进程的PD也是更。比如说它这里面是个一,这里面也是一个一。我说的现在说的是高地址,没有说低地址,各位,没有说没有没有说这个应用层。它指向的是它指这个一指向的是它,其实我们这里面的高低值这个一也指向的是。那么各位那如果哈那我如我想把这个让它不共享怎么办?我想让他不共享怎么办?有些人虎哥,我把PTE给他替换了有用吗?因为它的指针还是指向你这个PTE。各位有用吗?所以没有用对吧?我们替我们不能替换它,我们不能替换这个PTE是不是?那怎么办呢?那有些有有些人会问了,会说了,虎哥,那我把这个PD给他替换了。把它给替换了,我把它替换成一个三,假设替换成一个三,那么让它指向到这里来。我举个例子,我没有多画框了,那算了,还是画一个,比较免得不清晰。那我让它指向到这里来好了,那有可能有,当然了,这是29912的情况。如果我们碰到的是后面的64的话,这里就不是CR3了,是PDPTE。再往上一层是PL4,有四层。所以基于这种情况来看,各位你光完全替换一个是不可以不可能的。你要替换多少呢?要把它整个列表给重建一份,只有当你重建一份之后,这里面的你才能随心所欲的替换。各位我们现在再回过头来看一下这个问题。各位这里面的原地址指向的是好,那么这里面的这里面的地址,比如说指向的是一条这样程序开头的。好了,指向的是一个这样的东西。那么我们新的业各位新的业,我们指向的是它吗?不是,因为我们还没有复制内容,是不是还没有复制内容?那么我们我们肯定是第一上来就会把这里面的所有的内容拷贝到它指向的这个页里面去,对不对?对吧?然后在这里面进行户口,但是我户口。我们同样的线性地址,由于我们改的PDE,那我们的线性地址都是里面的,只是都是一个。比如说你这边的线性地址是零叉。零叉这个FF580000,你这边的线性地址,其实也是他。因为我们我们已经知道了他的隔离的这个就是映射与隔离这个基础?所以我们应该很清楚的知道,当我替换了PDE和PDE之后,它指向的不是它原有的了。但是线性地址还是一个,对不对?那么就像应用层给它隔开了,对不对?各位我们就像应用层已经给它隔开了,对不对,那我在我的这个信息地址中去互克对吧?各位,我在我的信息地址中沪这个里面的户口影响他吗?各位影不影响他?不影响,是不是?好了,那有些那那问题又来了,就是比如说AB进程B进程的页表,他去查或者是附加到什么呢?System的进程下,附加到sim进程里,那他去查的时候都是查的他,是不是不会说查到这边来吧,不会查到这里来吧。因为你的列表跟我的列表不是一份。所以尽管他在他自己的程序里边去读物理地址,能读到你吗?因为他也是基于自己的列表就算了,他能读到你吗?除非它附加到你的进程上,但是基本上不可能的。懂我意思了吗?各位这样就把你的这个就把你的这一个东西给隐藏起来了,对吧?就把你的你的挂你的户口全部隐藏起来了。这个时候你在你的这里面就可以做到内核地址任意户口了,对吧?好了,那又那那又问了虎哥,那除了这个通信有什么用?那当然有用了,对吧?像有很多的游戏不可能去校验内核的,知道吗?很多游戏不校验内核的知道吧?怎么只能三环搞了,这个就搞的是零环,这搞的就是灵魂。你后面我们再说。好吧,这种不用贴CR3的吗?不用,我都把你的列表给替换了。各位PG所谓的pgc,所谓PG是什么是什么内存是什么内存?是system进程的CR3PG也是跑在system上的,我们跟system的已经隔离了,你扫你的PG我户口我的我咱俩有关系吗?对吧?我俩已经没有任何关系了,知道吗?灵魂不是共享了吗?对,我已经给它隔开了,我人为的给它隔开了,它就不能不共享了。那我已经教你共享了,对吧?PG还有问说火哥,那PG都复制过来了,为什么不触发?触发是线程的问题,你的进程没有触发PG的线程,线程是触在system进程上触发的,就是它这个PG的线程和这个执行逻辑是在system进程上触发的。所以他用的是system的CR3,而不是你的CR3,知道吗?各位懂了没有?你得首先你得学你你学了之后,你得知道你能干啥,知道吧?你得奔着这个目标去好吗?能能后面讲60后,后面64位是可以的还是可以的,知道吗?是我们是有法子通过我们手工问题bug这种姿势可以给他干出来的,能理解吗?他问你bug是怎么做的。只是我们还没有学内核,没有学内核,那我们也做不了这些,还做不了这个就是还没有写驱动是吧?没有写驱动还干不了这个是吧。不是过PG的啊不要想着过PG。我们这个跟我们我们跟PG有关系吗?我们没有关系,我们是通过另外的姿势,不是为了绕PG而是为了绕各种的检测,是不是?然后把自己更好的隐藏起来,是不是?我教你们的是red酷的,教你们的是这个red kit,root kit,懂我意思吧?没我没有我我没有带你们写挂,是不是因为我们没有去找数据,写功能这种东西是吧,对不对?所以你要写挂,你还你得自己去学一下怎么找数据,对吧?或者是找人对不对?找人或者你去找人去收一份数据,然后研究一下工人怎么干,对不对?这个东西还应用还是挺广的对吧?你不管你是干就是其实也不是数据。什么是数据?其实就是什么机子知道吧?就是游戏里面改哪个地方,我就可以让他干一些什么样的功能对吧?比如说我把这里把血量改一改对吧,然后呢你就看到我这个无敌血了是吧?其实那个就数据那是功能的一部分,你说实话你的这学的这个东西是基本上无论你是挖洞还是做木马,还是说做这个所谓的外挂,对吧?你都要用。知道吗?或者是做对抗,你都是要用的。因为你只有知道这些技术,你反他也能掌控它,对吧?如果你都不知道他,你就觉得人家很神奇。每你你可以给每个进程都映射一份,这个看你自己,看你自己知道吗?反正这种我给他称为什么呢?我给他称什么呢?我给他称为叫PTE户,知道吧?TP的虚拟列表是什么?我只能跟你这么讲,他那个是基于这个玩意的。没了,就是这个磁盘的知道吗?他有房子给他交换到这个磁盘,这个虚拟内存磁盘上。你懂我意思吧?他有法子。至于他怎么做到的,我也不太清楚,但是我知道他用的是这个360里面,360有个人的专利,360里面。好吧,各位。来,咱们今天内容不多,但是我们还是得来解释一番,就是这个控制吸尘器。360里面专门的团队研究这些东西。像我们的话只有一个人两个人研究,那么没有汇总吗?像他们就是比如说他妈十个人,你每个人每两个人一组研究一个东西是吧?再汇总不就五份了吗?研究出来就5份了,是不是?人多力量大,这句话是没有错的,各位是真没有错的。你像我跟屌哥两个人,比如说挖到一个通信,然后我有时候我写完代码我就丢给他,然后让他去测试挂P机会不会P机对吧?要有时候他他挖出来一个,我们在讨论怎么搞,然后写完代码又挂,反正没有问题又给他存起来,是不是?他不是这个,主要是每每个人他有时候有自己的工作,知道吧?你你不好你不好弄在一块儿,对吧?除非是个大家都差不多,都这么无聊,是不是?好了,打开这个里面,有一个应该是第八章。不是第八张,这个是应该是第二张是吧,第二张里面有,我找一下。你。这是卷二是卷三,卷三的第二张应该是看错了。对这个控制神器吗?二点几。系统出租车。我操。内存管理,在这2.52.5这个控制寄存器。各位这个是我们之前接触过一个对吧?CR3没问题,各位我们是不是接触过一个。我把它复制过来,因为后面的这个东西你是也会用的,这个东西也会用的,而且在某些情况下你好像特别常用。好了,我来说一下,这个CR0,各位等先不要理解这个CRE,这个东西是已经没有用保留的。那么后在后面你还会看到一个CR8,这个CR8是跟IRQL相关的。后面我们讲驱动的时候,再来讲讲一下。当然我们32位里面并没有用到CR8,因为我32位也没有,CR8是64位下才有的。那么在这里面的32和64 4位下,不管怎么样,都有这么五个寄存器,其中C20是没有用的,这个字灰的是没有用的。那么这个CR2是什么呢?CR2是什么呢?比如我举个例子,你就明白了。比如说我们有一个EA开始。那我用中括号给它索引起来,有这么一个地址,有这么一条指令。那么这边的地址,比如说是零叉8F0叉FF8001行这样的纸地址,这是我们的执行地址。然后执行到这一行代码,它的EIP指向的是这个地址,各位对吧?指向的是这个地址。好了,各位假设我们的这零零叉12345678不可用,就是没有物理液。C005也就是一访问就会报一个C005的错误,知道吧?也就是缺页了,或者是这个内存不可访问,懂我意思吧?各位,然后各位像这种代码的话,就他首先第一步他不是立马给你报错,知道吧?不是立马给你报错,而是CPU执行到这里,发现有问题就会跑到就会回调,回调一下中断。执行所谓的这个。零叉一号中断,也就是十四号中断,缺液。夜异常。会执行一下夜异常中断,在业异常中断就会进尝试性的对这个012345进行修复,那个75678进行修复。那么在他修复的过程中,首先会去便利一下VD,这个是后面内存管理里面有的。那么找到这个VAD之后,再去查一下它里面的各种的状态。这个页到底存不存在,有没有申请?申请之后是在磁盘上,还是在哪里?如果在磁盘上我就给它换回来,如果它的属性是不可读,那么我就给你抛4005。但如果他确实没有挂物理液,那也给你抛4005或者蓝屏了。因为你的地址是高地址,他会蓝屏的,知道吧?好了,这个时候,这个液异常中断他是怎么知道是哪一个地址出了问题了呢?因为他要回调一下这个中断,那么他在遍历VD的时候要知道是哪一个地址。比如说这个地址出了异常,还是这个地址出了异常,他是不知道的。他还会去查谁呢?那么CR2中就会标记了到底是哪个地址不出现了问题。比如说是他出现了问题,或者是他出现了问题,知道吧?那么我们看一下这一行代码到底是谁出了问题呢?那肯定这一行汇编上是没有问题的,我们的页也假设是可可执行的,知道吧?是没有问题的。因为中断是不允许带参数的,因为中断也设计之后,之前也没有参数。知道吧?所以在CR2中就会存了一个012345678。知道吧?就会存这个012345678存起来。那么他在这里面就会访问12345,访问一下C22,得出来这个线性地址出了毛病。就会进入到病历VD查他到底是为什么会呢会缺液,查各种原因。如果有些原因可以修复,有些原因不能修复,他怎么知道是哪个进程呢?那你这个不废话吗?他怎么知道是哪个进程,那么他的肯定是当前进程。肯定是这个进程,你以为他知道,他也不知道,知道吧,肯定是当前进程,懂我意思吧?它会调用这个函数。因为你是哪个进程出了错,他又没改过,没改过的话,就是当前进程了。触发中断后,光中断了,不会切了。对,好了,那么这个CR2中,你们就知道它存的是什么了。其实跟我们现在目前的关系不大,因为它存的是缺陷异常的地址。好了,那么我们来看一下CR3。CR3各位我们已经知道是什么了,它这个上面就取出就是有这个夜真的吧?就是这个PCD和PWT。这个我们已经说过了,其实它是总开关,在CR3上也不就是这个进程的总开关,知道吧?那么如果PCD等于一的话,又代表了没有缓存的对吧?缓存被关闭了,你这个进程都是没有缓存的,知道吗?各位。好了,这个我就不多说了。我们主要的要看一下CR0和CR4。那么这个CR0注意啥人呢?它里面有一个PG位,还有个PE位。这个PG和PE挺重要的。因为我们的操作系统,现在目前所有的操作系统,我除单片机外就是有一些单片机它跑的是十模式。但是基本上带操作系统的都是跑在这个虚保护模式上,对吧?这个保护模式是要被开起来的。就像我们的操作系统在从开机的时候是进入到boss,再跳到再通过实模式下构建所谓的专业模式,再再开起来,再跳进去,对吧?它它是一个这样的过程。所以这个怎么开呢?首先首先它里面有一些这种叫什么状态字,这个我们稍微知道一下就可以了。状态字,这里面东西设置好之后,再再打开G20端口,AI0端口,这个可以百度,你可以百度,想感兴趣的话你可以百度一下。好了,打开这个第二轮端口之后。再修改CR0,把这个CR0的PE和PG位给他质疑。然后这个是什么意思呢?这个PE注意PPPE是段开启断。这个PG是开启页。这个能理解吧,哥。在这个英特尔上,英特尔和阿蒙第里边,他的这个。也就是这个是没有分页的,只有断只有断只有断。这个叫纯断模式知道吧?也就是意思就是我们的PE等于1,PG等于1,这个能理解吧?各位好了,那么还有一种情况,就是我们不允许只有夜模式没有断,所以这个段是在在这个保护模式下是避开的,知道吧?我跟大家说一下,你就记住这个就可以了。就比如说PE等于1,PG等于1,那这个是断叶断叶。好了,还有就是我们的PG等于1,这个P1P1等于1,PG等于0,那么这个是段转模式,那么这个。PG等于0,PE等于0,那么这个是十模式。还有就是我们的这个PG等于一,PE等于0,这个是错误的,知道吧?你只有三种模式,这个能理解吧?各位就是你不允许这个就必须要保证一个。你要开启断断页的话,就必须断线开再开业,不然的话就会报错,这个能理解不好了。有些人说了,虎哥那我给他改一下,那你改一下当场蓝屏,这个改都没法改为啥呢?因为你的操作系统就是建立在专业模式下的,你一改,给它回到10模式。咔他所有的荀子,包括汇编都长得不一样的,跟他写的这个字节就完全不匹配,那不难评才怪,对吧?所以你这个只能说从理论上你是知道的。但是如果是裸机下你可以改,但是你跑在操作系统下,你千万不要动这个手脚,你动不了知道吧?好了,那么这几个什么MP对吧?还有EM,这两个是跟数学浮点相关的。那么这个我们用不到,这个是操作系统给你默认设置就行了,你也不用去管它,因为你用不到它跟数学相关。因通常你不需要开它和关它,你可以具体的可以看一下这上面的这个含义,这下面这这上面的这几个含义,比如说这个拓展类型,那么你可以看到这个是什么什么奔腾六家族的?这个flag支持387D叉。你看这个题还有一个W,我看一下,这个也是。跟缓存相关。这个NP。那np好像还没看到了。对吧?人皮他都不介绍了吗?EP对吧?你这种我相信各位看到这些东西,应该是知道它是跟浮点相关的那这个NP就是支持这一种什么控制这个寄存器的这个White for White指令,说什么beat 3420,这个如果设置的话,那么就是说你调类似的这种指令,不会有异常是吧?但是这种等待指令,这种指令,我跟大家讲一下这种这里面有几种指令,还有还有一种指令叫HHLT,还叫HTL还有这种指令,这个其实都是让休息一会儿等待一下,知道吧?都是这么一个东西,这个能理解吧?各位这个就休眠时间最长,这个就是五大概是50纳秒。这个指令就是调用一下CPU当前这个和就休息50纳秒。这个是也类似的这种等待,但是它好像会等待某个字起来,它会才会起来,这基本上我们也用不到。还有我们再来看一下,这里还有一个TS这个TS就是我们任务段,TS也就是我们的tag switch。当你调用这个call的时候,就靠近这个任务段的时候或者是任务门的时候,这个就会置一。等你回来的时候就会置0。它相当于一个任务段的一个状态,知道吧?还有这个ET,ET的话好像也是跟浮点相关的,我看一下。应该在这是ETET的话这个是跟浮点相关的,这主要是跟浮点相关的。还有一个这个NENENE的话也是跟数学相关的这个玩意。都是跟这个浮点一些相关的。我们在在内核中的CPU基本上涉及不到浮点。这个WD和NW这个跟缓存相关的这个CD的就这个CD,注意这个CD如果你是一的话,就代表了所有的都没有缓存了,全部清全部无缓存了。知道这个是总快开缓存的总开关的地方,那这个NW好像是要跟它配合的,因为我看一下。如果开启他,他还要你看这一张,还让你看这一下。这个NW里面好像是这种,好像我记得我印象中,那我就不去看了。因为你基本上它也跟开关没有关系,好像是root那个那个什么root t那个什么止血,就是把所有的止血都关掉,知道吧?那个WT那个东西好像是把所有的止血都关掉,这个能理解吧?你把它设置为一的话,所有的止血都关了,也是去缓存的。那么这主要的是在这个CR0中咱们用的最多的话就是这个位WP。当然这个WP我个人感觉是做不了商用的,因为很殇客户机的环境非常复杂。他如果上了VT的话,有一些是不允许你改这个WP的,你一改就会给你抛一个特权指令异常的一个错误,知道吧?这是有些客户级的环境,他就干了一件这样的事情。可能像比如说某些影子系统,他也干这个事情,知道吧?所以这个WP用的不多。但是你有时候会用它,因为它比较好用。它是个什么意思呢?各位就是我们的一个业属性是的第第二位第二位,第二位也就是RW位。这个RWV比如说它等于零的话,各位这个页属性等于零的话,各位是不可以写的是不是,各位。如果你把这个WP给它关掉,就给它设置为零的话,那么你就算你的业是处于一个RW的这种等于零的一个属性,它也可以写。也就是这个东西是把你把这个写的保护给去掉了,知道吧?这能理解吧?各位,所以它叫写保护,这个蔚也叫协保护位。那么他的意思,就是你当你是你可以理解为强写,他不允许你写,他就要强行写一下,把它而且能能写成功,这个能理解不?各位,它是一个强写的。那么这个AMV它也有一个作用,当然在我们X86下它不明显,它的主要的是什么呢?对齐,R3对齐。也就是说什么呢?比如说我们的堆栈,还有代码。某二三对齐,不能,他只能是不可以写的页改成可以写,跟你访问没有关系,知道吧?还有这种寄存器我再说一下,各位,这种寄存器它是特权级寄存器,也就是你只能在零环改,三环是改不了的。零环也只能在零环访问,三环是访问不了的这能理解吗?各位?好了,比如说这个对齐,这个对齐指令是什么呢?就比如说我们堆栈的,你把这个位设置好之后,这个堆栈它就不能等于这个。比如说他要按四字节,对上了,四字节。或者八字节对齐。那有可能会问了,胡哥,那为什么按四字节或8字节呢?是因为你64位下的必须是八字节,而32位下你必须是四字节对齐。懂我意思吗?各位你把这个AM改了之后,给它设置为一之后,你它在三环的对齐就会变成一个强制性的了。通常所以它自己也没有设置。好了,那么在64位下这个M它还有这种功能,但是最主要的功能它已经变化了,知道吧?在高版本的CPU上,它已经变化了,它还对应的这个CR4里面的一个开关。好了,我们来看一下CR4,CR4的就稍微比较多一点儿。这个VAEVAE还有VME是开启虚拟8026模式,知道吧?这里是开启虚拟8086模式。那有可能会问了虎哥,什么是虚拟8086模式?这个就是我们32位或64位操作系统上,仍然可以跑8086的代码,也就是石模式下的汇编代码。这个能理解吗?各位,那么这个PVPVI是什么呢?是模式,虚拟虚拟8086模式下模拟中断知道吧?也就是他的中断,他要他走走他自己的一套模拟中断,那这个是开启模拟中断位,还还有这个TSD,TSD这个是什么呢?这就是你在你如果如如果唯一。如果为一,那么R3可以调用所谓的RDTTSC指令。否则报错知道吧?也就是你的R3不能调用这种指令。如果为零的话,只有等于一的时候才能在R三下调这种指令。那通常都是一,因为二三确实都用了这种指令,所以差windows下通常都是一好了。这个第一第一我好像忘了,我看一下。因为第一我确实我没有用过,在我印象中没有用过的东西,我应该是记不住的。我还没找到这个指令是干嘛的,就是你读时间的低差低大数知道吧?你读时间的滴答数就是你不是可以在三环下调用这种get count吗?来调用这种指令。这种指令它有痕迹好多种实现那里面它会判断各种各种机制。如果是有一些电脑,它就直接读这个指令了,就可以读到滴答数了。那有一些就是取它那个共享内存,有一块共享内存里面的这个系统时间里面的那个滴答。好了,这个第一是什么呢?我又记起来了,看了一下这个第一是因为我们现在有些人肯定还不知道DR0和DDR0到DR7。这几个几个指几个控硬件调试指令。那么其中如果各位熟的话,就会发现DR4和DR5是不存在或者访问不了的对吧?那么如果这个D等于一的话等于一的话,那么这个DR4就等于DR6,那么DR5就等于DR7。也就是把这个DRDDDDR6和DR7取得一个别名,知道吧?如果等于零你反问就会异常,否则异常。你这反正我总结,也没有多少用,知道吧?这个位置我看了一下,也没有多少用,知道吧。好了,那么这个PSE是什么呢?PSEPSE是什么呢?就是我们不是有大叶和小叶之分吗?如果PSPS1等于一的话,大业有效。否则无效。也就是说如果这个位等于0的话,那么你哪怕PDE上是写的是个大叶标志,它都没有效果。懂我意思吗?各位,这个就是控制是否有大业用的,那么还有一个PAEIPAE如果等于一的话,就是29912,否则是101012分页,懂我意思吧?你在代码里面,就是以后你在在灵活写代码的时候,判断自己是什么页表?就可以通过这个未来判断知道吧?他也就就它就是PAE开关,等于零就是这种列表,等于一就是那种列表。好了,还有个M好MCE是吧?对,做兼容性用的,因为他也没有给他的所有101012全部放弃掉。哪怕你后面的win 10系统,它也有这种分页,所以没有个就没有全放弃掉了,说这个就根据他自己的设置了好了,PMCE是吧?MCE我记得好像是机器检查,这个是开启机器检查的中断,知道吧?是什么意思?就这里有个中断。稍等一下,在这里各位我们打开内核,IDT,妈的,我又我都不知道去哪了。他这个中断应该可以看到中断的系统中断在这里,那在这里面,有一个我忘记是第十几号异常了,这里面有个中断,有一个检查系统检查这个机器检查的一个中断。这是检查对齐,在这12号,也就是如果它唯一的话,就代表这个检查中断,它是就有效,否则它无效,这个能理解吧?各位,其实对我们来说,它并没有什么卵用,对吧?反正我都给你总结一下。好了,还有这个PGE。否则无效。这个是我后面跟你们,就是我之前跟你们说那个刷新如这把还有一种刷刷新全局的是吧?你给它设置为一,立马会把你的跳B的机位全部置为无效,全部刷掉。那么如果你给它设设设置为一的话是有效,那设置为零的话就是立马刷掉,懂我意思吧?所以你可以给它设置为一刷一下,然后设置为零刷一下,然后立马再给它设置为一。这也可以当刷新用。但它其本质上就是全局的把控这个机位,所有的机位是否有效,它是一个总开关。好了。还有一个PCE,他妈的这个PCE我也忘了我想我看一下PC,这个PC是这种事件,这个叫什么监控。监控这个事件。开关,那这个是什么意思呢?就比如说我们做一些性能分析什么的,这个CPU它有它自己的一套性性性能分析的指令。如果你把它置为一的话,它就开启了性能分析。如果你给它置为零,它就没有开启,知道吧?那这个里面,它当然了像这里面如果你开启的话,那么也是可以做这种线程拦截的,知道吧?那这个在github上有一份源码,我具体忘了我放哪了,之前林小小发了我一份的。好了,这几个指令我就也跟浮点相关,我就不说了。这几个指令跟浮点相关,这里面16、17这个十八也是跟浮点相关的。这个PCIDE,这个就是我们后面64位下才用得到的。这个PCIDE也就是每一个进程的CR3都会有都是否都有这种缓存,每一个进程的CR3是否都有缓存?就是在刷新TLB的时候,是否不把缓存刷掉,这个也是一个开关。当然了在32位下它并没有生效,在64位才生效。那这个FSGS这个base是什么意思呢?就是当我们的这个GS我们后面才学得到,我现在还估计还讲不清楚,也就是我们之前读我们FS,GS我暂时不说,我们FS都有,这个base可以不通过,就是FS段的base可以不通过在所谓的这个段解析去去拆分获得,而是他给你提供了一个方便的指令,也就是msr读这个叫RD指令的RDMSR读这个什么呢?FS base叫做IIA杠32,还有32EFS base,这个具体的编号可以在CPU上查得到的,就是我们的这个第44合1的第四卷里面有。可以把把你这个base直接读出来,它就是一个这样的东西。如果唯一的话,你就可以调用这个MSR这种的去读。如果不唯一的话你就没有。那么这个后面我们应该可以用到。当然在学为体里面可以看得到,因为通常我们去获取FS的目的就是拿KPCR。这个KPCR后面我会讲我们我们有其他方式去拿,不需要去读这个寄存器,因为它只能读到当前和人,我们有时候要操作其他核的,那么用它就不太方便了。好了,这个指令这个叫什么?P还有个什么呢?MSMAP那这个是什么呢?是叫做super。Super model,这个EE代表可以代表执行的意思。这个P执行,那么这个map叫做model,excise访问这个是什么意思呢?Excise这个是访问这个是什么意思?各位,也就是当你这个地方置为一的时候,你零环是不可以访问三环的,就不可以直接访问相关的地址,也不可以执行三环的地址。也就是说你当你这个比如说你这个MSMEP,如果唯一的话,也就是你30环的不可以直接执行三环的代码,那就也就是你的代码不能放在三环下,知道吧?不能放在三方下。因为有有一些人他为了隐藏自己,他就把驱动给它自己拉伸,然后加载,把它放到三环的地址上。它不放在零环知道吧?就不放在高地址上,放在三环的地址上,然后呢来躲避人家暴力扫描。这个明明還知道吧?鲍必扫描这个灵魂的地址,达到了隐藏自身。英特尔觉得你这么搞有问题,对吧?你这他妈的是不是bug的利用?所以他就给你搞了一个这样的位,不允许你在零环执行三环,知道吧?下面这个就是不允许你零环直接访问三环的内存,就把你这种人给你堵死了。但是我们已经知道这个原理之后,直接把它给关掉就可以了,知道吧?但是你直接关掉这里会PG知道吧?你直接关掉这里,它又会爆PG这个微软又给你加了一层,懂我意思吧?微软了又给你加了一层,他他妈的你这个你这么改会暴脾气,是吧?但是你会发现控制这两个开关有没有生效?英特尔还留了一个后门,这个后门就是A这个C20的MV,这个AMY如果等于一它才生效,如果等于零它就不生效。懂我意思吧?各位,所以通常我们就把C20的这个地方给它改成0。那你在设置这个地方查这个地方没有用。因为这个地方是动态的,所以PG并没有检查这个AM是否改成零或者一。因为有一些有有一些开的什么一些场景,一些东西,才会导致你当前这个二三的这个才会才为一,否则会为零。所以它是一个动态的标志,这个标志可能会随着这个进程不同改掉,对吧?当然了他基本上反正。是不是这种理由?我不太清楚,这是我猜测。各位,反正你确实改它不PG但你改了之后,这里就没有效了,是吧?懂我意思吧?这个CETE好像我没见过,我忘了,我看一下这个CET是啥。这个,好像是他提供的什么通控制流防护是吧?这个具体是什么。我也不太清楚,可能要看一看了,这个我没法给你解释。你可能看一下这一张,你看一下这一张,因为可能就我至今也没有用过它,还有这一个。什么会PG什么会PG这个是尝试出来的,懂我意思吧?这是尝试出来的。其实微软并没有告诉你什么会PG什么不PG这能理解吧?他唯一的告诉你的,我跟你们讲一下,唯一告诉你的就是反正你不能改这个。点EX pro点EXE,还有help点S掉,还有win 3K点掉。好了,在win七下大概就是这么三个。知道吧?他反正,就是他提供的一些东西,就是不能让你改。是的,这个应该是我感觉是英特尔留的后门,懂我意思吧?反正他自己在这个上面介绍了,这你可以查查,是这个英特尔手册里面查得到的,他自己是自己介绍的。知道,并不是你说的,并不是我们试出来的,也是看这个上面看到的。好了,还有一个还还有一个就是这个PKS位,这个蔚其实没有用,它是给页表加密的。这个什么意思呢?就是比如说我们CR3现在看到的你你你访问的你要么就是PDPTE,对吧?要么就是PDE是吧?但是你用了这种技术之后,你用CR3访问出来的是一个加密值。加密值之后,你要通过英特尔。或者MDR提供的解密,提供的这个算法去解密知道吧?这个算法他又公开了。而且它只对四级和五级知道吧?也就是叉六四下才有才生效。你可以查到它的这个msr知道吧?这个其实很矛盾,其本质上就是他告诉你加密了,还告诉你他是怎么解密的,所以也没人用。因为你既然都告诉我了,那你其实你这个安全性的没法保障,是不是各位?懂我意思吧?你都告诉我了,他妈的我就通过你这种姿势去解密一下不完事了吗?所以还影响性能,主要一个还影响列表的性能。你离开就是全局的,你一开就是全局的,知道吗?懂我意思吧?不知道,我不知道他想防谁,我不知道他设计这个的意义在哪里,反正没人用,哪怕windows也好V还有linux也好,我是没有看到他们用过。本来这个寻址就有这么长了,他还搞一些这样的性能跟,所以基本上没人用,知道吧?好了,这上面我大概就跟大家介绍完了介绍完了。其中各位这里面这两个位,这两个位我也没还没有说这两个位,这两个位一个叫做VEVME叉是吧?这个位是差异还是E叉EP差异差异,这个位是开启为T位。如果如果等于一开启VT.好了。那么这个MSM叉1,SM差1,那这如果等于一开启上帝模式。否则不开。这个VT的后面我们会讲,这个上帝模式我也没有研究出来这个怎么用,反正我连初始化都这一关都没过得去,太鸡巴难了。说实话他妈的资料又没有如果各位有有研究出来的是吧?这舍得的你就发我一份的。后面反正我感觉他妈的我这辈子是研究不出来了,我操我只能告诉你们去研究了我。我感觉混入英特尔也没有用。因为你看内裤哥他就是英特尔里面的,就是张英奎。张英奎就是这个英特尔里面的是吧?其实他也不会玩,所以我敢说这个不是每一个人都能搞定的。他自己内部员工估计也是分部分部分核心人物能搞定,对吧?是不是?反正至少我你因为我所知的好像就是这个张英奎是从这个英特尔出来的,但是他自己都搞不定,也不知道内部的实现机制,他可能比我们懂一点,但是至少他没有一个可以跑的代码。好了,咱们今天就介绍到这里。明天的时候,注意明天我们要开始驱动第一节课了,是吧?当然可能第一节课也是扯淡而已。但是我们终于走出保护模式了,对吧?更多精彩内容关注下方公众号:逆向有你
个人微信:sumith
每日自动更新各类学习教程及工具下载合集
https://pan.quark.cn/s/874c74e8040e
还没有评论,来说两句吧...