zcc1414

博客园 首页 联系 订阅 管理


对于栈中压入字符串请看:

http://blog.csdn.net/zcc1414/article/details/9668907

对于堆中压入字符串 也就是

mov 堆,数据


下面为例子:

int main()
{
	__asm
	{
		push ebp
		mov ebp,esp
		xor ebx,ebx
		push ebx
		//尾部要加上 '\0' 也就是 0x00
		//如果是PUSH 的话 留整齐的4字节在后面
		//user32.dll   字符串转换为16进制为:
		//75,73,65,72,33,32,2E,64,6C,6C

		mov byte ptr [esp],0x6C	    //第一个"l"
		mov byte ptr [esp+1],0x6C	//第二个"l"
		push 0x642E3233     //"32.d"
		push 0x72657375		//"user"

		//可以看得出  mov 堆,数据  
		//这种方式是  取字符串前多少字节  然后逆序mov入堆中  所以最后要mov入 空

		//push 数据  这种方式将整行字符串倒叙压入  

		mov eax,esp
		push eax
		//mov ebx,0x7C801D77 xp sp2
		mov ebx,0x7C801D7B  //xp sp3
		call ebx		//LoadLibrary
		sub esp,0x80
		mov dword ptr [ebp-34h],0xBECAE1CC
		mov byte ptr [ebp-30h],0x00
		lea esi,[ebp-34h]  //提示
		
		
		//报告:0day by Panda     字符串直接转换为16进制为:
		//B1A8,B8E6,3A,30,64,61,79,20,62,79,20,50,61,6E,64,61

		//这里是堆的 对字符串的传送方式
		mov dword ptr [ebp-16h],0xE6B8A8B1 //"报告"
		mov dword ptr [ebp-12h],0x3a	   //":"
		mov dword ptr [ebp-11h],0x30	   //"0"  这里是为了配合后面4字节

		mov dword ptr [ebp-10h],0x20796164  //"day " 注意后面有一空格
		mov dword ptr [ebp-0ch],0x50207962  //"by P"
		mov dword  ptr [ebp-8h],0x61646E61	//"anda"
		mov byte  ptr [ebp-4h],0x00		    // 这里最重要  结尾
		lea edi,[ebp-16h]
		push 1
		push esi
		push edi
		push 0
		//mov eax,0x77D5058A  //xp sp2
	    mov eax,0x77D507EA  //xp sp3
		call eax
		mov esp,ebp
		pop ebp
	}
	return 0;
}


posted on 2013-08-01 03:19  zcc1414  阅读(295)  评论(0编辑  收藏  举报