Shellcode
是一段可执行的机器码(指令)的十六进制编码字符串。
"\xFF\xD0" ==> call eax ==> DOFF ==> "\xFF\xDO"
在Shellcode中使用函数不能使用函数名,而是函数的地址,所以,在Shellcode中使用函数需要先LoadLibrary加载动态链接库,再通过GetProcAddress获取函数地址再进行使用。
专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!
Shellcode
是一段可执行的机器码(指令)的十六进制编码字符串。
"\xFF\xD0" ==> call eax ==> DOFF ==> "\xFF\xDO"
在Shellcode中使用函数不能使用函数名,而是函数的地址,所以,在Shellcode中使用函数需要先LoadLibrary加载动态链接库,再通过GetProcAddress获取函数地址再进行使用。
EXPLOIT
构造攻击字符串,通过EXP书写规则:'任意字符串+JMP ESP+ SHELLCODE'。
使用Shellcode
编写Shellcode方法
(1)如果硬编码功底或者汇编功底好直接OD写了拷贝出来。
(2)如果上面这种不行则可以自己创建一个项目,写上要执行的操作后只需要在程序的main函数中任意代码行下断使其断下来,然后转到汇编页,复制机器码即可。如果没有显示机器码,右击->显示字节码(Show Code Bytes)。
注意事项:如果提取出来的Shellcode中间存在 00 这种字符则可能导致Shellcode被截断,这种情况就需要进行指令替换,例如 00 是 mov eax,0 这条指令导致产生的,则我们修改该指令为 xor eax,eax ,通过这种方式进行替换规避。
ShellCode的设计
(1)提取机器码(VS直接提取)
(2)调试
(3)通用性(获取调用的API地址)
(4)EXPLOIT:构造攻击字符串
"任意字符串+JMPESP+SHELLCODE"
任意字符串:用于填满缓冲区。
Jmp esp:用于跳转到Shellcode。
Shellcode:真正执行的恶意代码。
如何获得函数地址
#include <windows.h>#include <stdio.h>typedef void (*MYPROC) (LPTSTR);int main(){ HINSTANCE LibHandle; MYPROC ProcAdd; LibHandle = LoadLibrary( "msvcrt.dll"); printf( "kernel32LibHandle = 0x%x\n",ibHandle); ProcAdd=(MYPROC)GetProcAddress(LibHandle,"system"); printf("system= 0x%x\n",ProcAdd); return 0;}
如何获取JMP XXX系列指令地址
思路:内存中查找机器码。
其实这里不一定需要ESP才可以利用,也可以使用其他的配合达到目的。
下面这段代码就是搜索JMP ESP指令的程序。
//FF E0 JMP EAX//FF E1 JMP ECX//FF E2 JMP EDX//FF E3 JMP EBX//FF E4 JMP ESP//FF E5 JMP EBP//FF E6 JMP ESI//FF E7 JMP EDI//FF D0 CALL EAX//FF D1 CALL ECX//FF D2 CALL EDX//FF D3 CALL EBX//FF D4 CALL ESP//FF D5 CALL EBP//FF D6 CALL ESI//FF D7 CALL EDI//#define DLL_NAME "mfc42.dll"#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 esp int address = (int)ptr + position; 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;}
默认栈的大小是2M。
新版本的VS编译器中已经加入了缓冲区溢出保护,就是加了security cookie,这个东西就像是Linux中Cannary。
栈溢出中的字节对齐问题
在进行计算溢出字节数的时候不要为了局部变量区会进行字节对齐,X86上是以4字节对齐,例如如果是我们的在函数中开辟的是长度为10的字符数组,则需要16个字节才到返回地址,因为 10字节以4字节对齐就是12字节 + 4字节ebp = 16字节。
Shellcode绕过检测
加密+自解密
案例
本文地址:百科问答频道 https://www.neebe.cn/wenda/933478_2.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!
现在有很多人在使用iPhone手机,有些新用户不知道怎么设置自动锁定时间,接下来小编就给大家介绍一下具体的操作步骤。具体如下:1.首先第一步根据下图箭头所指,找到并点击【设置】图标。2.第二步进入【设置】页面后,根据下图箭头所指,点击【...
我们在使用QQ的时候,开通了钱包功能,后来不用了,出于安全考虑,想要注销,该怎么操作呢?今天就跟大家介绍一下QQ钱包怎么注销的具体操作步骤。1解锁手机后,找到桌面上的QQAPP,打开。2.进入主页面后,点击左上角的个人头像。3.在打开...
小伙伴们经常会遇到这种情况,有时候需要将电脑上的文件传输到手机上,可是身边又没有数据线,我们会通过电脑上的QQ往手机QQ发送文件,这样不仅省去了数据线的麻烦同时传输速度也很快,可是我们怎么找到接收到的文件呢?QQfile_recv文件夹又在...
appleid是我们在苹果手机中很重要的一个账号,有的时候我们可能会忘记appleid的密码,那么接下来小编就教大家怎样在电脑上重新设置appleid的密码。具体如下:1.首先我们打开电脑进入到桌面,找到浏览器图标点击打开。进入到浏览器界面...
想要对电脑上iTunes的备份位置进行修改,该怎么操作呢?今天就跟大家介绍一下怎么修改itunes的备份路径的具体操作步骤。1.首先打开电脑,进入桌面,点击左下角的开始图标,在打开的菜单中,找到计算机选项,点击2.在打开的计算机页面,找...
umd是一种文档格式,小说也有这个格式的,很多电子书被做成UMD格式,供用户在手机上用掌上书院阅读。。目前UMD格式是流行最广,被用户普遍接受并喜爱的手机电子书格式。很多网站、论坛,为满足用户对手机电子书的需求,都自发制作UMD格式的电子书...
想知道怎么用iPhone抠图吗?小编教你怎么做。操作方法01首先小编需要说明的是,iPhone自身并不带有抠图功能,所以需要下载一个抠图软件才可以,接下来小编教你具体步骤吧。0...
COM口即串行通讯端口,通常位于电脑主机机箱的后面,端口形状为梯形,主要用于连接一些外置的数据通讯设备,例如交换机等,那么如何设置电脑的COM口呢?下面小编就来给大家讲解一下。操作方法01首先,打开控...
浏览:3221次
中超赛程表,看球购票攻略(跟随绿茵场之旅)浏览:7683次
春节习俗大全,传统文化策源地(领略浓郁年味)浏览:7374次
“水”字旁常用字,快速记忆方法(提高汉字识别...浏览:5376次
制作铃声详解,打造个性化手机(表现自我风格)浏览:3857次
拉杆箱材质选择,如何购物省心(为旅途做好准备...浏览:3313次
粤语歌排行榜,推荐经典音乐(品味不一样的文化...浏览:674次
考试紧张怎么办,有效缓解压力(化解心理疲劳)浏览:2327次
服装收纳技巧,衣服的正确叠法(让衣柜更整洁)浏览:6983次