首页 » 系统安全 » 正文

缓冲区溢出实战教程系列(二):dev c++编译汇编代码-互联网安全-系统安全

发表于: 知之为知 · 2019-3-14 ·  43 views  ·  0 replies 

*本文原创作者:kaliking,本文属于FreeBuf原创奖励计划,未经许可禁止转载

小伙伴们对我上一篇文章的反应完全出乎了我的意料,感谢大家对我的支持和认可。接下来我会精心的把这一系列课程设计好,尽量详细的展示给大家。上篇文章我列举了一个缓冲区溢出的小例子,并提到了dev c++、ollydbg、IDA Freeware这三款软件,并介绍了dev c++的基本用法。今天会补充一下Dev c++的用法。

今天补充的用法主要是为了以后编写shellcode做准备,这篇文章只讲用法,大家不必深究代码的功能。

0×00 如何编写汇编代码

下面给大家一个在dev下用汇编代码编译的MessageBox的的代码例子,可以弹出一个提示框,今天还是不讲代码,主要讲代码是如何编译的。

#include<windows.h>int main(){LoadLibrary("user32.dll");__asm__("push 0x00000001"); //MessageBoxA的最后一个参数 入栈 __asm__("mov   byte   ptr   [ebp+0x26],0x57"); //W__asm__("mov   byte   ptr   [ebp+0x27],0x61"); //a__asm__("mov   byte   ptr   [ebp+0x28],0x72"); //r__asm__("mov   byte   ptr   [ebp+0x29],0x6e"); //n__asm__("mov   byte   ptr   [ebp+0x2a],0x69"); //i__asm__("mov   byte   ptr   [ebp+0x2b],0x6e"); //n__asm__("mov   byte   ptr   [ebp+0x2c],0x67"); //g__asm__("mov   byte   ptr   [ebp+0x2d],0x00"); //表示字符截断,就是说代码截止 __asm__("lea   eax,[ebp+0x26]"); //把存储字符的起始地址赋给寄存器eax __asm__("push   eax"); //把第三个参数入栈也就是标题 __asm__("mov   byte   ptr   [ebp+0x2e],0x61");__asm__("mov   byte   ptr   [ebp+0x2f],0x62");__asm__("mov   byte   ptr   [ebp+0x30],0x63");__asm__("mov   byte   ptr   [ebp+0x31],0x64");__asm__("lea   eax,[ebp+0x2e]");__asm__("push   eax"); //把第二个参数入栈,也就是内容 __asm__("push 0x00000000"); //MessageBoxA的第一个参数 入栈 __asm__("mov eax,0x762cfdae"); //这个地址是临时搜的MessageBox的地址 ,大家目前需要自己找。 __asm__("call eax");return 0;}

首先要编写汇编代码,我们要用__asm__()或__asm()方法包含起来,不要忘记还要用双引号。当然你要是觉得上面一行代码用一个__asm__()函数麻烦,你也可以在在一个函数里编写所有代码,像下面这样。不过要注意每行代码都要用双引号包裹,还要注意汇编代码后边的分号也要有哦。

__asm(       "mov   byte   ptr   [ebp+0x26],0x57;"       "mov   byte   ptr   [ebp+0x27],0x61;"); //W、a 

0×01 如何编译汇编代码

我用的是intel风格的汇编,在dev下编译通常会遇到问题,向下面这样报很多错误。

解决方法其实很简单就是,在编译选项里加一个-masm=intel命令就好,具体步骤,是点击工具-编译选项,在弹出菜单中勾选“编译时加入以下命令”,把-masm=intel命令添加进去就好,如下图所示:

当我们再编译时就没有问题了。

0×02 看看汇编代码写出来MessageBox的效果

4.png

4.png

这里给大家跑出一个小问题,大家说说为什么abcd后面会出现“烫烫烫烫”的字样,大家认真思考哈。

0×03 intel与AT&T的不同

因为上面提到了intel汇编,感觉有必要提一下AT&T汇编,AT&T风格汇编在dev下是直接可编译的,如果你熟悉这种汇编风格,那么恭喜你。

汇编语言(英语:assembly language)是一种用于电子计算机、 微处理器、微控制器,或别样可编程器件个低级语言。拉弗同个设备中,汇编语言对应着弗同个机器语言指令集。

汇编风格

x86/amd64汇编指令的两大风格分别是Intel汇编与AT&T汇编,分别被Microsoft Windows/ Visual C++与GNU/Gas采用(Gas也可使用Intel汇编风格):

大家看图片直观感受一下就好。

5.png

5.png

6.png

6.png

0×04 将汇编代码转换成16进制机器码

学会了这步我们就可以提取shellcode了。

首先,要设置一个断点位置随意,可以在想设置断点的地方单击鼠标左键,也可以把光标移动到想要设置的行按F4键:7.png

7.png

其次,依次点击如图的调试。8.png

8.png

这时候我们点击查看cpu窗口会看到汇编代码,但不是我们想要的:

9.png

9.png

我们找到右下角的窗口看到发送命令到gdb,输入disassemble /r 就会得到16进制代码与汇编代码对应的结果。16进制代码就是我们想要的shellcode。

看我用红框标注的位置:

10.png

10.png

本来是想把三个软件全部讲了,结果一补充就写了这么多。为了大家方便查看还是保持每篇有一定的独立性吧,大家别嫌烦,俗话说磨刀不误砍柴工。以上就是今天的内容,咱们下期见。

*本文原创作者:kaliking,本文属于FreeBuf原创奖励计划,未经许可禁止转载

本文链接: http://www.znlrs.cn/3177.html
0 like+
«上一篇: :下一篇»

相关文章

一文看懂Python沙箱逃逸-互联网安全-系统安全

让用户提交 Python 代码并在服务器上执行,是一些 OJ、量化...

警惕x3m勒索病毒:CryptON-互联网安全-系统安全

一、样本简介 CryptON勒索病毒最早出现在2017年2月份左右,...

绕过杀软!SQL Server Transact-SQL 的无文件攻击姿势-互联网安全-系统安全

背景概述 近日,深信服安全团队捕获到一起绕过杀毒软件的无...

反虚拟机和沙箱检测的一些小技巧-互联网安全-系统安全

*本文原创作者:nekoyansu,本文属于FreeBuf原创奖励计划,...

海莲花团伙对中南半岛国家攻击活动的总结:目标、手法及技术演进-互联网安全-系统安全

背景及概述 海莲花(OceanLotus)是一个据称越南背景的APT...

关于Metasploit5中的后渗透模块的编写与测试-互联网安全-系统安全

*本文原创作者:Neroqi,本文属于FreeBuf原创奖励计划,未...

0 thoughts on “缓冲区溢出实战教程系列(二):dev c++编译汇编代码-互联网安全-系统安全”

  1. 还没有任何评论,你来说两句吧

Leave a reply