WINDOWS下的溢出程序编写的技巧.docVIP

  • 7
  • 0
  • 约7.84千字
  • 约 12页
  • 2018-06-03 发布于福建
  • 举报
WINDOWS下的溢出程序编写的技巧

WINDOWS下的溢出程序编写技巧 WINDOWS下的溢出程序编写技巧2010年12月29日星期三13:36曾经被cnns的人指责为抄袭的文章,具体事件参见《盲调》。 WINDOWS下的溢出程序编写技巧 作者:袁哥 看了些WINDOWS下的溢出程序,觉得不够统一、完美,决定做一个相对较统一的编写方法,试着解决了些问题。 1、JMP ESP的问题。 为了尽量统一,都使用KERNERL32。DLL的代码,因为至少同一系统KERNEL32。DLL模块装载地址变化可能小, 别的模块可能随着安装应用软件的环境不同装载地址不同,还有其模块安装是KERNEL32。DLL在比较前面,后面的 模块安装地址要随前面模块的变动而变动,所以还是决定用KERNEL32。DLL相对比较统一(就是同一系统不同版本 )。解决了JMP ESP(FF E4)代码找不到问题,增加使用 PUSH ESP(54) 。 RET(C3) 或者 PUSH ESP(54) 。 RET 00XX(C2 XX 00)(RET NUM,NUM最好不要太大,所以做限制NUM=00XX) 代码,这可以找到很多了。。为几条不定语句,但要不影响功能的。 比如找到一处代码就可以使用: PUSH ESP AND AL,08 RET 10 选择原则尽量使用模块前面的可用的,因为不同版本前面的相同可能要大。 因为9X与NT系统模块装载地址有很大区别,所以用这方法不可能统一,我看了WINNT、WIN2000竟然 KERNEL32。DLL的装载地址也不一样,真有点。具体哪个程序的溢出可以试着找那程序中的JMP ESP, 但这地址一般都是0X00XXXXXX,所以也有问题。这是否可以在程序中先识别要攻击系统的系统?下面程序是 用宏定义。 2、解决SHELLCODE的编写问题。 原来很多程序的SHELLCODE都是用先编写好后用\XAA\XBB的形式写出来,一个是不好修改,还有不好看 到底是什么SHELLCODE。所以想法是SHELLCODE和溢出程序一起编写。这对SHELLCODE编写稍微有点要求,这就 是要求SHELLCODE代码是可移动代码,就是整个代码地址移动照常运行。为了减少不兼容,函数调用地址也用 LOADLIBRARY和GETPROCADDRESS得到,这样SHELLCODE就只依靠这两个参数。其实这两个参数也可以在内存里 面找到KERNEL32。DLL模块,再根据函数引出表自己得到地址。那样就只有JMP ESP地址在WINNT、WIN200、WIN9X 下没有统一了。 程序中已经大致有了SHELLCODE编写的雏形。现在有几个问题: 一,确定SHELLCODE函数代码地址,直接指定得到的是一个JMP SHELLCODE的地址,应该有方法直接得到的。 二,SHELLCODE用C编写编译后往往有_CHKESP的一个调用,这可以改汇编编写或者找到里面的call _CHKESP 的代码用NOP填充。 3、SHELLCODE字符往往有要求,决定对SHELLCODE编码,前面加一小段代码对SHELLCODE解码,编码为符合要求的 SHELLCODE,这减轻对SHELLCODE编写的要求。不同要求主要改写这一小段编码代码。 /*oicq 199b build 0220 overflow program copy by yuange yuange@163.net 2000。04。18 新版本0410有堆溢出,用这程序可以攻击,但不能执行SELLCODE */ #include windows.h #include winsock.h #include stdio.h #define NUKEWIN2000 //#define NUKEWIN9X #ifdef NUKEWIN2000 #define RETEIPADDR eipwin2000 #define LoadLibraryfnaddress 0x77e78023//0x77E60000+0xLoadLibrary #define GetProcAddressfnaddress 0x77e7564b//0X77E60000+0x 0001564B GetProcAddress #else #ifdef NUKEWIN9X #define RETEIPADDR eipwin9x #define LoadLibraryfnaddress 0xbff77750//0xbff70000+0xLoadLibrary #define GetProcAddressfnaddress 0xbff76e28//0xbff70000+0x00006e28 GetProcAddress #else #define RETEIPADD

文档评论(0)

1亿VIP精品文档

相关文档