ShellCode01: 弹出计算器

简单地讲,ShellCode就是一段01二进制的机器码,试图利用软件中的漏洞完成自己想做的事情。ShellCode的编写需要考虑和顾及的东西很多,这里先写一个适合新手的范例。

 

*需要的预备知识:

1.汇编语言(尤其要清楚了解函数是如何调用的)

2.PE文件格式(可参考《Windows PE 权威指南》一书)

3.一点点WinAPI函数

*使用的工具软件:

1.MASM32

2.Stud_PE

3.OllyDBG

 

一、用C语言写出弹出计算器的代码

1 LoadLibrary("kernel32.dll");
2 WinExec("calc.exe", 5);
3 ExitProcess(0);

二、找到这些函数函数的虚拟内存地址

WinExec()和ExitProcess()都是kernel32.dll中的函数,使用Stud_PE查看kernel32.dll的相关信息

这里我们注意到kernel32.dll的映像基址为0x7C800000,也就是说系统在加载kernel32.dll的时候,会将其加载到虚拟内存为0x7C800000的位置。

接着查看kernel32.dll中的函数的偏移地址,偏移地址+映像基址=函数在虚拟内存中的地址

可以看到WinExec()函数的偏移地址为0x000623AD,所以WinExec()在虚拟内存中的地址为0x7C8623AD,同理得到ExitProcess()的地址为0x7C81CAFA。

事实上一般的PE文件都会加载kernel32.dll,user32.dll,ntdll.dll等动态链接库,所以我们不必要调用LoadLibrary("kernel32.dll"),不过当我们的ShellCode需要使用到其他动态链接库的时候,如ws2_32.dll等,LoadLibrary()函数是必须的,故也将其地址找到:0x7C801D7B。

注:在实际的ShellCode编写中,函数的地址与操作系统的版本有关,故需要使用其他的技巧,这里只是写一个简单的范例。

三、将C语言转化为汇编语言

使用MASM编写编译

 1     .386
 2     .model flat,stdcall
 3     option casemap:none
 4 
 5 include     windows.inc
 6 include     us
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值