如何编写一段内存蠕虫?

我们怎么写一段代码,能够在程序内存里面不停移动?就是让shellcode代码能在内存中不停的复制自己,并且一直执行下去,也就是内存蠕虫。 2020-04-03 10:14:57 内存蠕虫代码web安全 我们从新型冠状病毒肺炎(COVID-19)学到的安全经验 随着新型冠状病毒(COVID-19)的危机持续在全球范围内蔓延,全球各地的企业别无选择,只能做出改变并将业务持续性计划付诸行动。 2020-04-03 09:09:08 新型冠状病毒肺炎安全经验网络攻击 一网打尽!每个程序猿都该了解的黑客技术大汇总 本文罗列了一些常见的信息安全技术,主要分网络安全、系统安全和密码学三个领域展开。

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

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

[[320925]]

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

1. 写出printf程序

  1. #include"stdio.h"
  2. intmain()
  3. {
  4. printf("begin\n");
  5. char*str="a=%d\n";
  6. __asm{
  7. moveax,5
  8. pusheax
  9. pushstr
  10. moveax,0x00401070
  11. calleax
  12. addesp,8
  13. ret
  14. }
  15. return0;
  16. }

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

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

  1. charshellcode[]="\xB8\x05\x00\x00\x00\x50\xFF\x75\xFC\xB8\x70\x10\x40\x00\xFF\xD0\x83\x**\x08\xc3";

2. 编写蠕虫代码

  1. insect:movbl,byteptrds:[eax+edx]
  2. movbyteptrds:[eax+edx+20],bl
  3. movbyteptrds:[eax+edx],0x90
  4. incedx
  5. cmpedx,20
  6. jeee
  7. jmpinsect
  8. ee:addeax,20
  9. pusheax
  10. calleax
  11. popeax
  12. xoredx,edx
  13. jmpinsect

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. charshellcode[]="\xB8\x05\x00\x00\x00\x50\xFF\x75\xFC\xB8\x70\x10\x40\x00\xFF\xD0\x83\x**\x08\xc3";
  3. intmain()
  4. {
  5. printf("begin\n");
  6. char*str="a=%d\n";
  7. __asm{
  8. leaeax,shellcode
  9. pusheax
  10. calleax
  11. popeax
  12. xoredx,edx
  13. insect:movbl,byteptrds:[eax+edx]
  14. movbyteptrds:[eax+edx+20],bl
  15. movbyteptrds:[eax+edx],0x90
  16. incedx
  17. cmpedx,20
  18. jeee
  19. jmpinsect
  20. ee:addeax,20
  21. pusheax
  22. calleax
  23. popeax
  24. xoredx,edx
  25. jmpinsect
  26. }
  27. return0;
  28. }

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

没有复制前:

如何编写一段内存蠕虫?

复制后:

如何编写一段内存蠕虫?

4. 总结

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

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月6日 23:42
下一篇 2023年5月6日 23:42

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信