--]概述又是一个不眠的夜晚,其实这篇文档是不应该发表的,因为保密的原则吧,但是我仔细google了下,没有类似的文章,而且发表的这部分文档也不至于被认为是什么绝......
------------------------------------------------------------------------------------------------
虽然Linux的这个syscall会调用寄存器保存参数值,可能有其好处(最起码我感觉看代码和分析一些内核的时,
舒服了很多:)),但是如果有些高人能够spoof寄存器,那么可能会引起一些麻烦,当然这样的麻烦还需要和特定的
程序挂钩,不是说spoof就spoof成功的:)
FreeBSD的就优良了很多,我不得不佩服FreeBSD的优点,开始的时候我也经常被FreeBSD这样的调用方式搞的头大
的厉害,但是就这么看啊看的,反而习惯了.在之前的时候,一直是一段时间Linux,一段时间BSD;只有在最近交叉跟
踪的时候,才发现上面这个自己感觉比较有意思的问题:)
--]FreeBSD的程序比Linux的运行速度快?
这个问题很难说,如果从上面的代码来看的话,少了这么多的汇编代码,说FreeBSD比Linux慢估计谁都不会相信的.
当然我没有针对FreeBSD的系统架构与Linux的系统架构进行更深入的对比分析,所以也不敢枉自下如此不清晰的结
论:)如果那位有兴趣,能不能在相同的硬件平台下,对这俩OS做下测试?
再继续罗嗦一个问题,虽然FreeBSD比Linux少了些汇编代码,但是syscall的参数FreeBSD肯定也是获取的,只不过
获取的方式比Linux更直接了一些:)
--]FreeBSD与Linux的shellcode
先废话一下,说到syscall如果不说些shellcode的故事,好像的确是少了那么一点点事情...So,我们来看看FreeBSD
与Linux的shellcode.我书写了一些简单的shellcode,看到网上很多关于shellcode的中文教程都是拿GDB不断调试出
来的,感觉好麻烦:(个人认为既然熟悉GDB调试技术,肯定熟悉汇编,也肯定熟悉syscall,不熟悉找下头文件看看不就得
了...于是我一直用汇编来写这些可爱的shellcode,刚学会几天,不对的地方大家明示:)
到底是先说FreeBSD的shellcode,还是先说Linux的呢?我拿硬币抛了下,至于为什么抛硬币...困了...找点刺激自己
神经的方法:)).好了,硬币抛完了,先说FreeBSD下面的.
编译:nasm -f elf ***.asm
ld -s -o *** ***.o
A: FreeBSD下面的shellcode(hello.asm):
section .text
global _start
_start:
xor eax,eax
cdq
push 0x0a216472
push 0x6f57206f
push 0x6c6c6548
mov ebx,esp
push byte 0xc
push ebx
push byte 0x1
push eax
mov al,0x4
int 0x80
xor eax,eax
push eax
mov al,0x1
int 0x80
------------------------------------------------------------------------------------------------
上面的的汇编代码可以直接编译来获取shellcode,按照前面说的编译办法编译,然后:
objdump -D hello > hello.txt
把获得的机器码copy出来就是一个freebsd下面的shellcode了.
B: Linux下面的shellcode(hello.asm):
global _start
_start:
xor eax,eax
jmp short string
code:
pop esi
push byte 15
push esi
push byte 1
push eax
int 0x80
xor eax,eax
push eax
push eax
mov al,1
int 0x80
string:
call code
db "Hello word!", 0x0a
------------------------------------------------------------------------------------------------
4/5 首页 上一页 2 3 4 5 下一页 尾页 |