首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
简析Linux与FreeBSD的syscall
来源:http://www.unix5.com 作者:linux爱好者 发布时间:2008-04-28  

  --]FreeBSD的syscall

  FreeBSD下面的syscall我进行了两次跟进的操作才进入到内部,所以下面使用了两个过程来演示

  代码,不过从下面的代码来看FreeBSD的短了很多很多:)

  trace into one step:

  28080D98: 31C0 XOR EAX,EAX

  28080D9A: 53 PUSH EBX

  28080D9B: E800000000 CALL near32 ptr 28080da0

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

  trace into two step:

  28080DA0: 5B POP EBX

  28080DA1: 81C3AC980600 ADD EBX,000698ac

  28080DA7: 8B934C0A0000 MOV EDX,dword ptr [EBX]+00000a4c

  28080DAD: 8902 MOV dword ptr [EDX],EAX

  28080DAF: 5B POP EBX

  28080DB0: 8D051A000000 LEA EAX,dword ptr [0000001c]//system call number value

  28080DB6: CD80 INT 80

  28080DB8: 7201 JC short ptr 28080dbb

  28080DBA: C3 RETN

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

  从上面的代码来看,FreeBSD的syscall代码比Linux的短了很多很多,但是仅仅是短还是不够的,如果在看

  这个文档前你熟悉破解技术 or 溢出技术 or Intel汇编语言.我想可能大家有这样的感觉,FreeBSD的调用

  syscall的过程比Linux的要安全了很多很多,为什么这么说呢?请再返回仔细看上面的Linux/FreeBSD的汇

  编代码:)下面我们也会大概的论证下,但仅仅是猜测而已:)

  --]FreeBSD比Linux安全?

  学过破解技术的朋友,都知道通过一些跳转指令来实现对于软件的破解,当然使用跳转指令可能仅仅对一些

  简单的软件是有用处.突然发现我上面说的这句话是废话,和本文没有任何的关系,郁闷...看来脑袋里面装的

  东西多也不是什么好事情:(

  言归正传,我们来大体的分析下为什么说BSD比Linux要安全些!请看下面的代码:

  Linux的syscall调用:

  420D4336 897DFC MOV dword ptr [EBP]-04,EDI |

  420D4339 8B4D0C MOV ECX,dword ptr [EBP]+0c |

  420D433C 8B7D08 MOV EDI,dword ptr [EBP]+08 |->syscall参数

  420D433F 8975F8 MOV dword ptr [EBP]-08,ESI |

  420D4342 8B5510 MOV EDX,dword ptr [EBP]+10 |

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

  420D435C 0F477514 CMOVA ESI,dword ptr [EBP]+14 |

  420D4360 53 PUSH EBX |->syscall参数

  420D4361 89FB MOV EBX,EDI |

  420D4363 B81A000000 MOV EAX,0000001c //system call number value

  420D4368 CD80 INT 80 //调用0x80

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

  从上面的代码我们可以看到这样一种情况,这里我们假设调用系统函数write来写输出:)

  write(filehandle, buf, buf_length)

  其汇编代码的函数调用,基本如下:

  push buf_length

  push buf

  push filehandle

  call writeJNnLinux开源

然后进入到write函数后,我们就知道Linux的syscall的一个完整过程如下:

 

  高级语言调用系统函数|

  ->jump syscall(即系统对系统函数的标识)|

  ->把syscall的参数赋给寄存器|

  ->mov eax,0x**(及上面write函数针对syscall的数值)|

  ->int 0x80|

  ->返回|

  基本过程如上所示,那么如果我们spoof(欺骗)这些传递参数的寄存器呢?假设spoof是成功的,

  那么很容易就会把一些坏变量值传递到syscall的系统调用,紧接着系统内核可能在接收到一些

  坏信息的时候,处理不当,导致系统出现异常或者系统发生溢出.当然这些仅仅是猜测,本文的很

  多内容都是在猜测,至于答案嘛,可能永远都没有...:)

  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  FreeBSD的syscall调用:

  28080D98: 31C0 XOR EAX,EAX

  28080D9A: 53 PUSH EBX

  28080D9B: E800000000 CALL near32 ptr 28080da0

  28080DA0: 5B POP EBX

  28080DA1: 81C3AC980600 ADD EBX,000698ac

  28080DA7: 8B934C0A0000 MOV EDX,dword ptr [EBX]+00000a4c

  28080DAD: 8902 MOV dword ptr [EDX],EAX

  28080DAF: 5B POP EBX

  28080DB0: 8D051A000000 LEA EAX,dword ptr [0000001c]//system call number value

  28080DB6: CD80 INT 80

  28080DB8: 7201 JC short ptr 28080dbb

  28080DBA: C3 RETN

  从上面的代码我们也可以看到这样一种情况,这里我们假设调用系统函数write来写输出:)

  write(filehandle, buf, buf_length)

  其汇编代码的函数调用,基本如下:

  push buf_length

  push buf

  push filehandle

  call write

  然后进入到write函数后,我们就知道Linux的syscall的一个完整过程如下:

  高级语言调用系统函数|

  ->jump syscall(即系统对系统函数的标识)|

  ->mov eax,0x**(及上面write函数针对syscall的数值)|

  ->int 0x80|

  ->返回|

  根据我的跟踪分析,发现FreeBSD使用了程序里面的参数变量,这样的情况就是FreeBSD省去了一个寄存器调用

  函数参数的过程,这样就禁止了可能存在spoof寄存器的问题,从这点上来看,FreeBSD的确比Linux要安全很多.

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

共3页: 上一页 [1] 2 [3] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
  相关文章
·如何在Linux内核中的实现SYN Coo
·Linux操作系统“警惕”内核汉化
·Linux系统内核漏洞分析
·Linux操作系统核心的汉字显示机
·如何利用异常表处理Linux内核态
·Linux下的中文显示和支持常见问
·深入学习LINUX内核之七(图文讲解
·Linux内核源代码学习概述
·深入学习LINUX内核之六(图文讲解
·深入学习LINUX内核之五(图文讲解
·深入学习LINUX内核之四(图文讲解
·深入学习LINUX内核之三(图文讲解

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!