Messagebox--shellcode(三)

首先,希望路过的大佬可以拯救一下在门都不知道在哪的小白吧!感激不尽啊!!!

这段messagebox代码暂告一段落吧(啊啊啊啊,,我咋就这么笨呢),这一段代码,思来想去还是决定有太多的问题值得我去思考和探索了,这篇文章就当是对自己出现的问题的一个小记录吧,真的是太!!!
代码很简单,就是一个汇编调用messagebox的代码,然后汇编语言中执行没有问题,但是变成shellcode却出现了意想不到的问题。

#include "stdafx.h"
#include "stdio.h"
#include "windows.h"

char shellcode[]="\x50\x66\x81\xec\x54\x04\x33\xdb\x53\x68\x64\x63\x62\x61\x68\x68\x68\x67\x66\x65\x8b\xc4\x53\x50\x50\x53\xa1\xac\xa2\x42\x00\xff\xd0\x58\x83\xc4\x0c";
int main(int argc, char* argv[])
{
	//把MessageBox所在的dll加载到程序空间
	printf("begin\n");
    HINSTANCE libHandle;
	char *dll="user32.dll";
    libHandle=LoadLibrary(dll);
 /*
	__asm
   {
	push eax
	  sub esp,0x454
	  xor ebx,ebx
	  push ebx
	  push 0x61626364
	  push 0x65666768
	  mov  eax,esp
	  push ebx
	  push eax
	  push eax
	  push ebx
 //	call dword ptr[MessageBox]  
	  mov  eax, dword ptr[MessageBox]
	  call eax
	  pop eax
	  add esp, 12	;这个是后期加上去用于平衡堆栈的
   }
 
*/
	__asm
	{
	  lea eax,shellcode
	  push eax
	  ret

	}

	return 0;
}

问题1、shellcode是怎么执行的?

产生这个问题的代码:
在这里插入图片描述
我原以为shellcode是在push时开始执行的,可是当我单步调试分析时,发现shellcode其实是在执行完 ret 后才开始执行的,??这个就很迷了。
以下是反汇编证据:
在这里插入图片描述

问题二:shellcode的地址

最开始的shellcode是分配在哪里的呢???为什么他去了一个稀奇古怪的天国???和代码段相差甚远!!啊啊啊,孩子,回家不好吗??
在这里插入图片描述

问题三:与邻居代码争吵??

最开始我以为是自己写的汇编代码出错,但是后期发现,其实竟然是shellcode的邻居(即shellcode的下面一段代码),
等会,现在想想,他是不是因为回不来,停留在外面而报错呢??
刚刚调试,这个问题以外的没了,,,算了我还是把“邻居代码”贴出来吧。
在这里插入图片描述

问题四:Messagebox call时出现了错误。

如图,在call调用messagebox时发生了错误。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值