黑客编程之初识ShellCode技术

什么是shellcode:
1996年,Aleph One在Underground发表了著名论文《SMASHING THE STACK FOR FUN AND PROFIT》,其中详细描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。在这篇具有划时代意义的论文中,Aleph One演示了如何向进程中植入一段用于获得shell的代码,并在论文中称这段被植入进程的代码为“shellcode”。 后来人们干脆统一用shellcode这个专用术语来通称缓冲区溢出攻击中植入进程的代码。这段代码可以是出于恶作剧目的的弹出一个消息框,也可以是出于攻击目的的删改重要文件、窃取数据、上传木马病毒并运行,甚至是出于破坏目的的格式化硬盘等等。请注意本章讨论的shellcode就是这种广义上的植入进程的代码,而不是狭义上的仅仅用来获得shell的代码。

那到底什么是shellcode:
本人理解:
shellcode就是一段不依靠pe加载器加载和处理的(不需要重定位表、不需要导入表、不需要数据段);在任意进程都空间都可以执行的一段二进制代码。

编写shellcode的难点在哪里:
1.代码的自定位。
2.所用到的数据的处理。
3.获取kernel32的基址。
4.使用的API的处理

1.使用的开发语言:C/C++ ASM

shellcode是一段短小且功能强大的二进制数据,所以短小也是他的一个特点,所以在语言选择上要使用汇编语言。

2.IDE编辑器: 既然是写汇编代码最好是用汇编类的IDE例如RadAsm,RadAsm功

能强大,有汇编关键字的联想和着色功能,但事实上高级语言的IDE也支持汇编语言的编译,只需要适当的设置或者使用适当的语法。我们写这段shellcode虽然用汇编语言,但我们仍然使用vidual c++的编辑器。
对于没有任何编程基础的朋友,推荐学习一套黑马程序员C++ 网络安全渗透测试培训就业课程(课程是从C基础一直讲到网络安全渗透项目)是一部难得而又系统的C和黑客安全视频教程.

3.在c语言中使用内联汇编(参考<<加密与解密第三版>>附录B):
a.使用单条汇编语句:

                             	__asm push eax;
	                          	__asm xor  eax,eax;
	                        	__asm add  eax,0xAA;
	                         	__asm sub  eax,0xAA;
	                        	 __asm pop  eax
            b.使用汇编语句块: 
		                         		__asm{
				              					push eax
												xor  eax,eax
												add  eax,0xAA
												sub  eax,0xAA
												pop  eax
			           						};
        

c.使用完全汇由汇编写一个干干净净的函数(自己清理堆栈和返回):

   void _declspec(naked)  MyNakedFunction()
                     {
    			   __asm{
		         		 	push eax
		          		 	xor  eax,eax
		          		 	add  eax,0xAA
		           		 	sub  eax,0xAA
		           		 	pop  eax
		           			ret
	          			  };
              		 }

4.代码的自定位问题:
a.问题的提出:
在用编译器写一段代码的时候常常会把代码段放在.text段,数据段放在.data段,使用
时用该数据的VA(ImageBse+Rva)(见helloword),而我们无从知道我们shellocde所要运行的程
序的基地址,更无从知道我们的代码将在那里运行(也就是RVA),所以我们必须确定我们的代码
运行在哪里,定位到自身,然后可以通过自身的偏移来得到shellcode所用到的数据的VA。
b.问题的解决:
学习汇编时我们知道call 指令将返回的地址压入堆栈,我们可以利用这个特点用pop 指令获得
返回地址然后将这个地址-5得到当前代码的地址。

       c.实现代码:
           	__asm{           //可以定位自身的代码
				call next
				next: 
				pop ebp
				sub ebp,5 
			}

后续继续分享黑客编程技术文章,欢迎大家探讨

对于没有任何编程基础的朋友,推荐学习一套黑马程序员C++ 网络安全渗透测试培训就业课程(课程是从C基础一直讲到网络安全渗透项目)是一部难得而又系统的C和黑客安全视频教程.

你可能感兴趣的:(黑客编程)