最新公告
  • 欢迎您光临悠哉网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 如何编写一段内存蠕虫?

    我们怎么写一段代码,能够在程序内存里面不停移动?就是让shellcode代码能在内存中不停的复制自己,并且一直执行下去,也就是内存蠕虫。我们要把shellcode代码偏移出蠕虫长度再复制到蠕虫后面的内存中,然后执行。

    如何编写一段内存蠕虫?

    我们在实现过程中同时把前面同长度代码变成x90,那个就是虫子走过的路,最终吃掉所有的内存。实现这个我们要知道shellcode长度,并且计算好shellcode每次移动的位置是多少。我们的shllcode以调用printf函数为例。

    1. 写出printf程序

    1. #include "stdio.h" 
    2. int main() 
    3.     printf("beginn"); 
    4.     char *str="a=%dn"
    5.      
    6.     __asm{ 
    7.         mov eax,5 
    8.         push eax 
    9.         push str 
    10.         mov eax,0x00401070   
    11.         call eax 
    12.         add esp,8 
    13.         ret 
    14.     } 
    15.         return 0; 

    0×00401070 是我机子上printf的地址,将自己机子上的printf地址更换一下就行,还要在最后加一个ret,因为执行完shellcode还要回到复制shellcode的代码执行。

    上面汇编转成shellcode形式,shellcode为:

    1. char shellcode[]="xB8x05x00x00x00x50xFFx75xFCxB8x70x10x40x00xFFxD0x83x**x08xc3"; 

    2. 编写蠕虫代码

    1. insect:mov bl,byte ptr ds:[eax+edx] 
    2.        mov byte ptr ds:[eax+edx+20],bl 
    3.        mov byte ptr ds:[eax+edx],0x90 
    4.        inc edx 
    5.        cmp edx,20 
    6.        je ee 
    7.        jmp insect 
    8.         
    9. ee:     add eax,20 
    10.         push eax 
    11.         call eax 
    12.         pop eax 
    13.         xor edx,edx 
    14.         jmp insect 

    shellcode长度是20,假设数据的地址是s,我们把数据复制到地址为s+20处,原来的数据变为0×90,表示数据曾经来过这里,insect段是用来复制数据用到,复制了20次,刚刚好把shellcode复制完。

    因为shellcode相当于向下移动20位,所以我们要把eax加上20,还要把edx恢复成0,方便下次接着复制,然后去执行我们的shellcode,接着跳转到insect段继续执行,这是ee段干的事。

    inscet和ee段加起来是复制我们的shellcode到其他地方,然后去执行shellcode,然后再复制,循环下去。

    3. 最终程序

    1. #include "stdio.h" 
    2.  
    3. char shellcode[]="xB8x05x00x00x00x50xFFx75xFCxB8x70x10x40x00xFFxD0x83x**x08xc3"; 
    4. int main() 
    5.     printf("beginn"); 
    6.     char *str="a=%dn"
    7.      
    8.      
    9.     __asm{ 
    10.          
    11.         lea eax,shellcode 
    12.         push eax 
    13.         call eax 
    14.         pop eax 
    15.         xor edx,edx 
    16.              
    17. insect:mov bl,byte ptr ds:[eax+edx] 
    18.        mov byte ptr ds:[eax+edx+20],bl 
    19.        mov byte ptr ds:[eax+edx],0x90 
    20.        inc edx 
    21.        cmp edx,20 
    22.        je ee 
    23.        jmp insect 
    24.         
    25. ee:     add eax,20 
    26.         push eax 
    27.         call eax 
    28.         pop eax 
    29.         xor edx,edx 
    30.         jmp insect 
    31.  
    32.  
    33.          
    34.     } 
    35.      
    36.      
    37.     return 0; 

    调试的时候找到shellcode位置,一步步调试能看见shellcode被复制,原来的转成0×90,并且printf还被执行

    没有复制前:

    如何编写一段内存蠕虫?

    复制后:

    如何编写一段内存蠕虫?

    4. 总结

    我们要先计算出shellcode的长度,计算好shellcode每次移动的位置是多少,然后写出复制程序,并且还要有调转到复制后的shellcode首地址程序,执行复制后的shellcode,接着在复制再执行,循环下去,当然在一段内存里循环执行也可以,只要找到位置,跳转过去就行

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"www.yoozai.net",如遇到无法解压的请联系管理员!
    悠哉网 » 如何编写一段内存蠕虫?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    悠哉网 WWW.YOOZAI.NET
    悠哉网,用户消费首选的网站,喜欢你就悠哉一下。

    发表评论

    • 1069会员总数(位)
    • 40643资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 479稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情