3个月的SHELLCODE研究成果-一个最简单的Shellcode

坚持到底,永不放弃。我终于写了个小小的SHELLCODE啦。
就拿这个星期来说,我日思夜想,为什么我总写不出可以正确执行的SHELLCODE呢,非常郁闷,也整天板着脸想问题,差点吓着小MM同事了。
我本来ASSEMBLY基础不是很好,只懂得可怜的几个INSTRUCTIONS,写SHELLCODE时碰到了很多不认识的Instructions。还要上网差资料,有时真的是一头雾水。
我看了很多前辈写的SHELLCODE,也测试过,结果也是有的可以成功通过测试,有的不能。
我对这类SHELLCODE的问题很感兴趣,每天除了工作,就是研究怎么写SHELLCODE了。不懂就查,就问,GOOGLE不行,就BAIDU,BAIDU不行就YAHOO。
我几乎想从头开始学ASSEMBLY,但好像SHELLCODE的常用指令就那几个啦,像PUSH,MOV,SUB,ADD,INC,DEC,CALL,JMP,JE......
这些都比较好理解。于是我还是把精力集中在SHELLCODE的执行流程上。
先是反汇编一个简单的函数,然后是用指令写些简单的函数,由于ASSEMBLY基础差,碰到很多很尖的钉子,给我的打击不小,有是我会痛苦的问:“天啊,这样的事总发生在我身上。”但事实上,是自己基础差嘛。
付出是有回报的,只是时间问题。经过有多精彩可能要写几GB也写不完啦。
还是把研究成果和大家分享一下,本人什么也不懂,经常出错,望高手提出批评。感激不尽。欢迎交流 QQ:250947302

#include <stdio.h>
#include <windows.h>

void __declspec(naked)aaa(void)
{
 __asm{
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  push ebp
  mov ebp, esp
  sub esp, 08h
 }
 __asm
 {
  xor ecx, ecx
  mov byte ptr[ebp-08h], 'c'
  mov byte ptr[ebp-07h], 'm'
  mov byte ptr[ebp-06h], 'd'
  mov byte ptr[ebp-05h], cl
  lea eax, [ebp-08h]
  push eax
  mov edx, 77bf93c7h ;这是system函数的地址
  call edx
  pop eax
 }

 __asm
 {
  mov esp, ebp
  pop ebp
  ret
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
  _emit 0x90
 }
}

unsigned char aaaaa[]="/x55/x8B/xEC/x83/xEC/x08/x33/xC9/xC6/x45/xF8"
"/x63/xC6/x45/xF9/x6D/xC6/x45/xFA/x64/x88/x4D"
"/xFB/x8D/x45/xF8/x50/xBA/xC7/x93/xBF/x77/xFF"
"/xD2/x58/x8B/xE5/x5D/xC3";

void main()
{
 char *saa;
 HMODULE h=LoadLibrary("msvcrt.dll");
 ((void(*)(void))aaaaa)();
}

//
unsigned char aaaaa[]="/x55/x8B/xEC/x83/xEC/x08/x33/xC9/xC6/x45/xF8"
"/x63/xC6/x45/xF9/x6D/xC6/x45/xFA/x64/x88/x4D"
"/xFB/x8D/x45/xF8/x50/xBA/xC7/x93/xBF/x77/xFF"
"/xD2/x58/x8B/xE5/x5D/xC3";
这段是用OLLYDBG 1.1调试得到的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值