本套课在线学习视频(网盘地址,保存后即可免费观看):
https://pan.quark.cn/s/0d25d64c976e
声明:所有发布内容来自网络,仅供用户学习交流测试网速使用,部分影片如有内嵌广告,请勿上当受骗。获取的所有内容请在24小时内删除,禁止非法恶意传播或商业用途。如有侵权,请联系删除,个人微信:sumith,防失联。
咱们这节课要把这个过一下。进一环不能跟踪的吗?肯定,你还想跟踪他。那你得自己实现一套一环的硬件装点。因为操作系统它只是判断了零环和三环,它没有去判断一环二环,这样子知道吧?好了,我们今天把星期五、星期六,那那作业做一下,就是把这个过一下。因为这个共享页要体会一下,操作系统是怎么共享的。我不知道你们多少人做了,但是我也没有法子,如果你们都做了,我们我们就向前一步,是吧?我们要它跑起来。对,把它映射到您地址上。好的,是什么意思?我说了很多次了是吧,挂到林地的上了,就是你你这么你这么,比如说我举个例子,比如我举个例子,我就是想要我我就是想要这个X,我想我这么来一下。我这个会报错吗?各位。会报错吗?会的,各位会的。您地址是我们应该都在学这个编程语言的时候,尤其是学这个C语言或者C加加都特别强调这是他妈空指针,是不是因为你这个指向的是块空,各位,那为什么这个零是空的呢?就是操作系统去做这种可以说是那种什么隔离的一个区域,专门用来就是指指向这种做这种空的一个隔离区域,知道吧?预留的一个的这样的东西,64K这个玩意是不可以,他就是故意不挂物理液的,知道吧?因为你到那个零叉64K以后,全部挂物理液的,它就是这么设计的。各位我现在有这么一个需求,比如说我比如说。比如说我在这个地方申请一块空间,因为我挂零地址,兄弟们因为我要挂零地址,所以我在这个地方申请一块空间。如果我们不是挂要挂业内偏移的话,那你得计算一下业内偏移,知道吗?那等一下我再跟你说这个哈那我在这里先申请一块空间哈那比如说我零差一千,哪怕你只注意这个像这种函数,它申请是有力度的,知道吧?申请是有力度的,哪怕你在这里填一个一,它最少会给会去申请一个页的大小,知道吧?如果如果他没有找到空余的多余的一个页的话,那么会一次性申请64K知道吧?这是操作系统的一个操作系统的力度是64K英特尔的这个力度是一个月,也就是4K知道这是他们的一个区别。好了,那么我在这也让他立马提交,是不是?立马提交,可读可写、可执行,无所谓对吧。好,各位,然后注意,我们是得给它清空一下。各位。是不是?那我们前天还是昨天的时候,就是星期五还是星期,是讲讲了一下是吧?不然的话不会挂物理页的对吧?好了,我清空之后,我的想法是这样的,我在这个位置也是指向零地址。当然了像这个我们把它放到上面去,然后指向这个零地址,我还把这个地方修改成100不报错,对不对?我在这个位置,各位因为各位可以看到我在这个上面赋值的都是零,对不对?所以我理论上打印他的这个结果应该也是零才对,对不对?我把它给改一下。这个地方我们来个旋转,对吧?这没问题,各位,我们在改之前先在这里下个道理。好,这样是我们改了改了之后,我们按下回车读一下看有没有改。也就是我把零给改了,这里面的内存也改了,这个能理解我的意思吗?各位,在改之前,我把这个地址给它打印出来,对吧?不然的话我们也不知道在哪好了,这个是D00,那么我们过来这个D00,我们不需要去拆不拆了。因为像这种很简单,不是操作系统,一个月是64K,是操作系统的分配的颗粒度,知道吧?哪怕你写一字节,如果在没有寻找到空余页的时候,它一次性的会给你分配64K内存,哪怕你只使用了一个字节。懂我意思吧?好了,我们复制一下,复制一下。滴滴他是0。因为我们很清楚,这个D004D00,我再把它列一下,免得各位还有不知道我是在干什么。弟弟你。等一下。那么这个我们切一下,很显然前面的没有值前面没有值,所以这个地方它就是它自己不用乘以0乘以4了,那么拿到它AD。加上我们D0乘以4对吧?就它了。这个是我们的PTE。好,各位可以看到它是零,这个没有错。好了,各位这里我跟大家讲一下,通常如果它存在PDE,注意存在PDE,那么你不要去改它了,知道吧?如果没存在PDE,你才能给它加一个PDE。如果实在你想改,那你应该把整个页给复制下来,对吧?PDE里面所指向的整个页给复制下来,而不是单纯的改一个PDE。因为你你把它改了,跟他指向的你他以前的PDE可能不一样了,知道吧?那你应该把东西给指向过去你才改,不然的话你改他你会出错的,知道吧?好了,好,我们把这一个给它拿过来,这个是我们的PTE对吧?拿过来。好,那么我们再找到零地址,这个零地址就很好办了。兄弟们,零地址就很好办了。不用算,都是零,那么也就是它,那我们再滴滴一下。好,就是它。那么这个是PTE,PDE是吧?PDEPDE里面我们给它映射一下ED,给它映射一个PTE进去,给它赋个值对吧?其实就是指针指向的值,对不对?好了,我们翻过去看一下对吧?哎,这里有一个值的那我们放过去放过去,放过去,我们等一下对吧?有可能因为有缓存的原因。好,我们先按了一下回车。各位,我现在是刚才是这个回车,刚才是在这里等待了,所以我按了一下回车之后,已经修改成100了。我现在停留在这儿,我再按一下就会打印,对吧?我打印一下,各位请看它等于100了,是不是?各位?然后这个地方是暂停,也没有任何问题,对不对?我们是真的把它把这个零地址的这个地方也修改了吗?来看一下,这个地方是吧,因为我们指向的是同一个PTE,对不对?所以这个物理地址都是一样的。各位我们确实给他写进去了,看到吗?好了,那么这个各位就是我留给你们的作业,对吧?是不是没完?我们现在如果往这个零地址上,因为这个零地址,各位,来来来,我们来看一下,我先打开一个11对吧,我随便打开一个进程,注意我随便打开一个进程。我们在这个地方,点一下这个内存浏览,内存显示number view是吧,在这里,有一个view,有一个view,这里有一个内存区域,各位可以看到vio这下面有个内存区,各位请看这个零地址,这个11万,这个16进制的1万,注意16进制的1万就是64K。那我先把这个概念给你们补了。1234来除以21024对吧?各位请看这个就64K那么各位请看这这种它分配这种内存的姿势,都是这么这里六十四来隔开64,那这里面64,有可能会问到胡哥,那底下有21000300,我跟大家讲,这个是啥意思呢?你注意看这下面是释放的,这下面是释放的就是没有使用的内存,这里这也就是说这个16进制的20000就2万,他只是用了一个月而已,其余的15个页没有用知道吗?他是这么一个概念,后面我们学内存,学这个VD里面,我们可以看得到的。所以注意,这个操作系统,它是64K隔开的,它不是一个页一个页的,知道吧?因为你一个月的申请,对它有多很多的性能的开销。经过它的性能就是经过他这么多年的统计这种设计的经验,他觉得64K很合适。所以你哪怕申请一个字节,他也给你返回六也有64K知道吧?那只是其余的地方他没有用,没有挂物理页,放在这里有个地址。如果下一次有人在再申请一K那么他就会往这个地方,往找到一个这样的空白的地方,没有人用的东东地方给你拿出来一个拿出来一个页的虚拟地址,给你挂个物理页,能理解了吗?就是他一次会给你在内核中分配64K,或者是以64 64K这个单位来分,知道吧?比如说你申请了65K那么他会给你弄个128K这个能理解吧?好了,我在这里给各位看这个主要的目的是啥呢?注意这个,注意这个这上面有64K,兄弟们有64K。这个64K我们其实你可以写很大一串的,是要扣的,各位对吧?是不是兄弟们?也就是有些代码是可以藏在这里的。然后人的就是我们对于这种语言来说?都有个知识盲点,就是认为这个空指针这个零地址是不能访问的,对不对?如果你把代码放藏在一个这样的位置的话,在某些方面是很有效的去去规避一些保扫描。我这么讲能理解吗?各位?因为你很多的时候,你在写代码的时候都会判断是不是零,如果是零你就怎么处理?如果不是零你就直接干起来是吧?是零的话我就可能往下面找一点,你很多时候你写的代码基本上也都有这种处理,对不对?好了,那么我现在要做一件事情,我们要分开两个做。我本来是想一次性给你们做到位,就是我写两个进程,我在我这边的地址映射到他那边去,在它里面给我跑一个是要扣的。但是由于各位基础都不一样,所以我先在我自我先往我自己进程里面写写好了之后测试好了之后,我再开两个进程,我往别的进程里面写,对吧?然后跑起来懂我意思吧?好了,那我首先我只代码很简单,就是往这个进程里面,往零地址里面挂一个是要扣的。就算是要扣的,就是插入一个弹一个message box没问题,各位。好了,我先过来。现在我依然在这里,申请了一块空间,这个还是没有变。但是我挂到零地址上,但是我这个挂的时候,我就是我是不不是修改一个,修改它等于多少了,懂我意思吧?不是修改它等于多少了,那我把这个去掉。好了,那我在这里初始化之后,我再来一个8f code,在这里来个是要扣的那这个是要扣的,我们怎么写呢?让他弹一个框,应该怎么写呢?兄弟们,在这里这个应变码怎么写呢?肯定写的少,各位,这个很简单。对,是这样的这样的。6A是吧,6A。0差18。好了,我们。0XFF0叉D0。好,我们调完之后,再一个return c三回去OK了,当然你可能不知道我在干什么,我把这个我各位我把它打到这里来。醒过来。注意,各位push您走走,我们木一个,注意这个意思是木一个。AX你看12345678,我们call EX,return c3。各位return他大概我们就是这么调用个这样的东西。这里我们写message box的地址,这个没问题,各位。这个是要扣的,没问题吧。哎好了,注意,你们这个有有一些常用的这种指令,可以就是硬编码,实际上可以记一下,比较熟悉一下是吧?懂我意思吧?因为真正你开发的时候,有时候哪有这么多时间贴来贴去的,是吧?能理解吧?好了,我们在这儿?Mesage box a,好,先取,我们在这个地方拿过来。这是第几个呢?注意,这是两个字节,四个字节、八个六个字节、八个字节、九个字节对吧?九那么当然这个不一定有错,九个字节,9。好,各位,我们在这个位置进行了一个信号,然后取它地址,把它强转成四字节,让它等于这个message box。好了,这个是要扣的,我们就固定好了。固定好之后,我们再来把它写进去,把它直接复制到这里去。好了,msy box.这个塞子25,对。我把这个退出一下。30,那这个我们就已经复制到这个内存里面去了。那复制进去之后,我们把这个函数的原把这个定一个call type d five。好,在这里定一个空的。好。让它等于这个。等于它。把它强调一下,首先我们来测试一下各位是吧?我们来测试一下自己写的代码有没有问题。各位可以看到,我们的代码其实并不是我们的问题,这个是它的C98的问题。各位,因为我们现在用的这个编辑比较老,所以它这个问题还是存在的。就是我们不能要把这个变量的初始化什么变量定义在一块,知道吧?不然的话它就有问题。完了我们再来编一下,我操。这里忘记打个括打一个逗号了。好,那么现在我们直接在这里来一个考。各位这种靠我们应该是很正常的对吧,对不对?这种靠应该没问题。兄弟们各位可以看到,我现在掏出一个框,这个没有问题。各位,我没有放到零地址,没有放到零地址。各位注意。兄弟们,我现在只是正常的写了一段十号扣的放到内存,然后我把它调用起来,知道吧?我还没有放到您地址。好了,那我现在我现在这一句话就不等于了。这个八字扣的可以执行吗?在这个可以执行,可以执行。那有可能会问了胡哥,那个巴弗扣的为什么可以执行?因为这个内存,它是没有这种管理的,知道吧?知道不?因为这第一个,因为我们的这个2101012分页,它是只要四块地址,它就可以执行的,知道吗?知道吗?只要四块地址就可以执行的。如果你是29912之后,你就会发现,你这个是地址,这个有没有可执行权权限的,要看物理地址。像现在它只是一个虚拟地址的管理,这个虚拟地址是限制不死的。你只要物理地址的属性没问题,那么MMU就认为你没有问题,能理解吗?我们讲讲缓存,就是讲那一堂课的时候有个MMU是吧?里面计算的那些东西,如果你的如如果你的物理地址没问题,那虚拟地址没有出现异常,它是补货不到的,知道吗?所以你哪怕这个地方只是只读的,它也可以执行。懂我意思了吧?这个是这种页这种101012页的一个缺陷,各位,是他的一个缺陷。好了,那么现在我把这句话给它注释掉了,把它注释掉了。那么注释掉之后,我们再来跑一下。现在各位请看我,我现在指向您,我现在指向您就没有问题了是吧?不不就就还是出毛病了,是不是?我因为我还没有挂验,对吧?好了,也就是在这里测试一下,我指向您是跑不起来的,对不对?好了,那么我们继续。好,各位,这是2亿,2亿名210,这里正好也是十位,注意这个地方正好也是十位。我操,我他妈怎么按了一下。好了,3D你这也这个地方正好也是十位,所以我们还是不需要拆分。好,稍稍等一下。我们滴滴一下滴滴一下加上这个地方是多少?是3D0是吧?我们加上3D0,乘以4,注意3.0乘以4。错了错了,这个地方,它第一个是零,所以我们算错了。在这里3310是吧,是3D0还是3103D0?我这。我拿错了,是他是吧,是他是不是?看错了,好了。加上了3D0乘以4。好了,滴滴一下我们来看一下。现在各位可以看到,这个确实是我们找到的这个,对吧?确实是找到了这个。我们把它给它复制过来复制过来。好。就他了是吧,弟弟。好,我们的ED挂在这个位置上。挂在这个位置上。好了,那我们就挂完了。挂完之后我们跑一下。各位看到没有?我们代码是跑起来的,是不是?各位同样的,我们还是指向的是零地址,我们代码是跑起来的,对不对?好了,我们点击确定好过来,各位没有问题,没有问题。好,各位。那现在我把这个关掉,我打开一个十一,注意我打开一个C1,也就是我依然在在我的这边申请一块地址,写一段是要扣的,我写到C这里面去。懂我意思吧?也不是写到C一里面去,把我的物理地址挂到C一里面去。我在这里执行一个远程线程,让他跑起来,能理解吗?各位。好了。那我们一样的,首先我们要open process,所以在这里我们执行一个open process。这里我们是进程的权限?所有权限,然后这个地方写box,我们看一下要打开这个实际进程?先找一下他的ID,注意这个ID是3608对吧?好,3608。好,各位,现在我们已经打开它的进程了。打开它的进程,这里我就不做严谨的判断了。因为我认为我一定可以打开它就知道,我正在做实验,所以我就没有写严谨的判断代码了。我们在这里再来申请,great,给他一个远程线程create.创建一个远程线程对吧?当然我们现在只有这个能力,对不对?只能在三环这里耍一耍。那我这里写那那。什么都不要。没问题,各位,因为我执行地址就是0,是不是我执行的地址就是0,是不是?好了。我们把这个句柄给它关掉。执行完之后,把剧本关掉,把进程剧本也关掉。好,各位,我现在这个是EF。有没有超过?所以我们继续。好,各位,这个是我们的进程,十一在上面,所以我们先来找到我们的好,就它了。加上了EF0乘以4。我们DB来看一下。好,这个找的没有问题,我们把它复制一个复制到这来。好,我们再上去找到CE的这个进程对吧?找到CE的这个进程,然后就是它我们滴滴一下。好,再找到它的零地址,点击一下。对吧?然后就它了,那我们一D一下。把这个贴过去。好,我们已经贴完了。贴完之后各位不要着急,我们来看一下,各位来看一下,看一下自己,我们有没有把它挂上去,我们再找到这一个。好,各位看一下这个地方,在它虚拟地址长,虚拟地址去去遍历的时候长的是这个样。那我们一点看好,我们一点这个地方就有值了。看到没有各位?但是他给我们显示的还是没有分配。从这个上面来看,各位应该很好的可以看出来,这个虚拟地址和物理地址的关联性并不是特别的强。发现了没有?各位?只要你不经过操作系统,自己去干这种事情的时候,他压根是不知道的。发现没有,各位。好了,那我们关掉我我我们在这里开始跑了。走走的时候,各位请看这个地方,请看我们的这个CE这里多了一个东西,看到没有?在CE的这个进程这个地方多了一个东西,看到吗?这个弹簧跑起来没有各位?看一下,我再找到11。我们查看一下它的线程,看到没?我们的线程入口是0,看到吗?我们线程入口是0,对不对?对吧,没有问题。那我们点一下看一下会不会发生异常点,也没有问题,没有崩溃,对吧?是不是各位?我是我只是把你们延伸一下,对吧?就是你们有你们连挂个页都有些人都没有挂,我都我还敢出这个吗?不会,怎么可能C1C1的C一是不判断的。你让他访问哪个地址就访问哪个地址,知道吧?他那他底层是调用的这个知道吧?这个什么。Red memory process知道吧?它底层掉的是这种,知道吧?好了,他说带业内偏移是怎么挂?好了,我现在来了,你在业内偏移的,你你你注意,比如说比比如说我这个复制到哪里呢?我把它给改一下,这个为什么还有疑问呢?比如说我复制到这个加零差100的位置,这个有没有问题?也就是我业内偏移是一零差100了。兄弟。对吧然后呢你这个你你这个地方我们要执行过去的话,那么各位现在看一下是第几个参数是它的函数1234,看到没有?是第四个是吧?这个退回去了。好了,是这个吧。那你在这个地方就零差100吗?对吧?页内偏移就后面那三个数,懂我意思吧,页内偏移就后面的那三个数。这能能理解吧,那那我们来看一下,我们来看一下。好,我们再申请一个,这个是F0,注意F03个0,对吧?好。好,0000。好,各位请看这个地方,我们由于我们的偏移已经到了100了,所以我们的偏移已经到了100了。所以你在这里加零开100,看到没有?这个零差100就是业内偏移,对吧?是不是?但是我们还是这么挂,还是一样的。我把它复制过来,就是我执行的位置我就偏移100,这个很简单。好,各位,现在我们就替换完了。替换完了之后,各位我们再回到11这里,我们再来看一下它自己。好了,这个是底下是零地址,我们刚才看到的还在,我们可以看到它现在在零叉100的位置,对吧?是不是?好了,那么我们翻过去。这个已经没了,按照,又跑起来了。这个迷妹懂了没有?迷妹一样的,其实没有区别。其实就是这个地址的后面的这个12位知道吧?也就是后面的这三个就叫业内偏移。那么它原始指向是哪里?你那你就访问到后面的这个偏指向后面的偏移这个位置去,就找到了,知道吧?好了,各位。这个代码要发吗?还是发一下。你们玩玩一玩吧,没有办法,我这边这个暂时暂时我们只有用Wendy bug的能力,知道吧?我们只有用Wendy bug的能力,那你后面你就要告别我你bug知道吧?好了,各位,咱们今天课程很短了,我就把这个作业给你们讲一下。因为我明天我们明天的任务,明天任务是要把这个列表的结构要来讲一讲。因为这里面有个问题,各位有一个问题就是这个物理地址,它其实微软它自己也不是访问物理地址,它也是通过一个其他地址来访问这个PTE和PTE的。那么它有个地,也就是有我们要学的下一个阶,就明天要学的这个就是管理PTE与PTE的地址,知道吧?好了,兄弟们,拜拜了。刚才温迪罢改的值,再看一下哪个值,哪一个值问你爸给我们改的值哪个值?这个地方我们看了。问你PTE没有错,知道吧?你只要PTE没有错,你这个我你你这个只要复制过来就好了,你没有必要把PTE也加100。懂我意思吧?这个PTE他们加100你也没有用,他只是加一个属性,你知道吗?这后面12位是属性,你就是你在这里加一,你加三个F它其实也是属性,它不影响它指向这前面这个几个才叫物理验证,知道吧?这前面这个叫物理验证,后面这个叫物理属物理业属性,你知道吧?懂我意思吧?对,页挂上就好了,这个就是他们,你们外面理解的那种共享页。不理解为啥要修改一个PTT对吧?那我在这里我再跟你讲一下,为啥要修改一个PTT。好了。你没有你才挂,你有的话你不好挂。你看我们来先看一下这个图,你看我们一个PDE指向一个PDT。这个没有问题。各位一个PTE指向一个PDT指向4页,对吧?指向4K的页好了,现在问题来了,你假设把这个地方给换了别换成换成一个换成一个二号了,对吧?那么这个地方的指向的他就不指向在这里了,可能就是指向你所挂的这个PTT了。请问这里面。这里面的值去去哪了?被你丢了。那你这边又没给他,对吧?那他不访问不崩溃吗?是不是?Windows记录的是这里面windows记录的,你这个不在这儿吗?这里面的值去哪了?他还找了一圈没找到,后来一找到他妈的PTE和PTT,和我以前的PTE不对应,蓝屏了对不对?你看这个图你应该看懂了,你这个指向把它指向到这儿了,这个地方你以前的数据全丢了,对不对?那你要把以前的数据,你应该也要完好无损贴过来,让他也能找得到,吧?你只改你这一项,但是以前的数据你不要动人家了,你把以前的这些数据全动了,那怎么办呢?那怎么整呢?没得整了,兄弟。你懂了吗?陈傲。没有PD没有,是指向您还是您,指向您。不能回收只是一部分,知道吧?像我们这种做root root key的编程的,它不能回收就不能回收,对吧?无所谓吧?我们没有像这个写C语言那么良好的良良好的这种编程习惯。有有申请就要释放,我们的目的就是直接我要跑起来,对不对?对吧?对,你就得造一个,你就得照一个,你不照一个就没了,他以前的数据没了。复制一份内存管理不就错了,哪里错了?没错。你只要保证这个地方它访问到这里面,它不出异常,永远都不会经过它页修复的,知道吧?你不经过他的页修复,它怎么会出错呢?对呀对。主主主要我们还我们要做有难度的这个知识体系还没有贯穿起来,知道吧?所以我没法给你们布置这个有点难度的。对,因为你你好歹也要我们学了明天或到后天的这些东西之后,你把这个东西了解的有一定程度了,那么就我我我就会我就会上场了。幽灵地址,这个就是幽灵地址。那你就申请两挂两个物理地址,挂两个物理地址,就他们这个外面所称的幽灵地址,就是这个玩意,知道吧?就是挂页,把这个页挂到不同的地方去,知道吧?然后呢,查不到,你不是你知道他有地址吗?我这个也是学的这个B站上面的,有个人我看了一个就我看了一个什么幽灵地址是吧?这个好像是这是哪一个培训机构的?爱春秋,好像是是爱春秋,爱春秋知道吗?有有有一有有人搞了一个直播,叫什么?挂幽灵,叫幽灵地址。然后我他妈一看这个不就是往往林地址挂了个页,他就他叫幽灵地址是吧?然后我这个也不要脸,我就给他学过来了是吧?那我也叫幽灵弟子,没办法,我这脸皮厚,现在。好了,拜拜了,兄弟们。更多精彩内容关注下方公众号:逆向有你
个人微信:sumith
每日自动更新各类学习教程及工具下载合集
https://pan.quark.cn/s/874c74e8040e
还没有评论,来说两句吧...