--]概述又是一个不眠的夜晚,其实这篇文档是不应该发表的,因为保密的原则吧,但是我仔细google了下,没有类似的文章,而且发表的这部分文档也不至于被认为是什么绝......
上面的的汇编代码可以直接编译来获取shellcode,按照前面说的编译办法编译,然后:
objdump -D hello > hello.txt
把获得的机器码copy出来就是一个linux下面的shellcode了.
C: 为什么FreeBSD与Linux下面的shellcode不同?
这个问题,我想留给大家先思考下,然后再看我的下文.如果你看了我的下文还是不了解的话...那么可能的情况
是你根本还不会汇编和Unix类型的编程...还有一个情况是,你太笨了:(
C-1: Linux的syscall的系统调用是如下的过程:
高级语言调用系统函数|
->jump syscall(即系统对系统函数的标识)|
->把syscall的参数赋给寄存器|
->mov eax,0x**(及上面write函数针对syscall的数值)|
->int 0x80|
->返回|
那么,我们的shellcode在push参数的时候,就比较随便一些了,因为在后面的系统级别的syscall又对参数进行了二
次的赋值,赋值给各个寄存器,然后才调用syscall.
C-2: FreeBSD的syscall系统调用是如下的过程:
高级语言调用系统函数|
->jump syscall(即系统对系统函数的标识)|
->mov eax,0x**(及上面write函数针对syscall的数值)|
->int 0x80|
看到没有,或者说前面的内容记忆起来了吧?freebsd的syscall调用是在进入系统syscall前就push进来的,所以我们的
shellcode必须得把参数的值先push进来,而不是象linux那样的随意.
--]总结
其实,最后这部分关于shellcode的不同之处,真正要写的话,估计还得整整的一篇内容.但是...人是铁饭是钢,一顿不吃
饿的慌.于是准备做下逃兵,先去添饱肚子,然后美美的睡一觉.顺便做个美梦,在梦中,偶的"老大"又开始欺负偶了...
5/5 首页 上一页 3 4 5 |