browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

rundll32.exe无差别杀灭

Posted by on 2007 年 06 月 22 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

今天发现了360安全卫士(以下简称360)的一个bug。如果你手头上有这个工具的话,可以一起和李马玩这个游戏。
首先是制作一个恶评软件的残留,最简单的方法是打开注册表编辑器,并在HKEY_CURRENT_USERSoftware下建立子项“3721”。然后打开360,就可以扫描到这款恶评软件的残留了,如图:

然后在桌面上点鼠标右键,选择“属性”,弹出显示属性的标签对话框。
最后选中360中的雅虎助手项,进行清理。你会发现,刚才你打开的显示属性对话框消失了。
原因是什么?李马发现,在360清理的时候,系统防火墙SSM报警:

现在心里有点数了,因为显示属性是通过rundll32.exe启动的,如下:

真相大白——360会对rundll32.exe进行无差别杀灭。下面是技术分析:
用反汇编工具拆了AntiAdwa.dll,定位进程特征库处理的代码如下。

汇编代码
  1. .text:10012172 ; int __stdcall sub_10012172(LPCSTR lpSrch)   
  2. .text:10012172 sub_10012172 proc near ; CODE XREF: sub_10003A24+1A p   
  3. .text:10012172   
  4. .text:10012172 lpSrch = dword ptr 10h   
  5. .text:10012172   
  6. .text:10012172 push ebx   
  7. .text:10012173 push esi ; <— 进程特征串   
  8. .text:10012174 push edi   
  9. .text:10012175 mov esi, ecx   
  10. .text:10012177 xor ebx, ebx   
  11. .text:10012177   
  12. .text:10012179   
  13. .text:10012179 loc_10012179: ; CODE XREF: sub_10012172+3E j   
  14. .text:10012179 mov eax, [esi+8]   
  15. .text:1001217C test eax, eax   
  16. .text:1001217E jz short loc_100121B2   
  17. .text:1001217E   
  18. .text:10012180 mov ecx, [esi+0Ch]   
  19. .text:10012183 sub ecx, eax   
  20. .text:10012185 sar ecx, 2   
  21. .text:10012188 cmp ebx, ecx   
  22. .text:1001218A jnb short loc_100121B2   
  23. .text:1001218A   
  24. .text:1001218C mov edi, [eax+ebx*4]   
  25. .text:1001218F test edi, edi   
  26. .text:10012191 jz short loc_100121AF   
  27. .text:10012191   
  28. .text:10012193 push [esp+lpSrch] ; lpSrch   
  29. .text:10012197 lea eax, [edi+4]   
  30. .text:1001219A push eax ; lpFirst   
  31. .text:1001219B call ds:StrStrIA   
  32. .text:100121A1 test eax, eax   
  33. .text:100121A3 jz short loc_100121AF   
  34. .text:100121A3   
  35. .text:100121A5 push 1   
  36. .text:100121A7 push edi   
  37. .text:100121A8 mov ecx, esi   
  38. .text:100121AA call sub_10012205 ; Kill it!   
  39. .text:100121AA   
  40. .text:100121AF   
  41. .text:100121AF loc_100121AF: ; CODE XREF: sub_10012172+1F j   
  42. .text:100121AF ; sub_10012172+31 j   
  43. .text:100121AF inc ebx   
  44. .text:100121B0 jmp short loc_10012179 ; 循环处理由逗号分隔的特征串   
  45. .text:100121B0   
  46. .text:100121B2 ; —————————————————————————   
  47. .text:100121B2   
  48. .text:100121B2 loc_100121B2: ; CODE XREF: sub_10012172+C j   
  49. .text:100121B2 ; sub_10012172+18 j   
  50. .text:100121B2 pop edi   
  51. .text:100121B3 pop esi   
  52. .text:100121B4 xor eax, eax   
  53. .text:100121B6 pop ebx   
  54. .text:100121B7 retn 4   
  55. .text:100121B7   
  56. .text:100121B7 sub_10012172 endp   
  57. .text:100121B7  

在函数入口处,用OllyDbg可以看到进程特征串,如图。

由此可以下结论,360利用进程特征串来杀灭恶评软件进程,该特征串仅包含进程名称并以逗号分隔,因此,在遇到rundll32.exe时会忽略其命令行的判断而进行无差别杀灭。

———-传说中的分隔线———-

声明 本篇blog的内容已优先提交到了360论坛上,原贴地址为:
http://bbs.360safe.com/viewthread.php?tid=224006&extra=page%3D1
请SB枪手们自重,勿摘抄本文作为攻击手段。

订阅本站

2 Comments

  • At 2007.06.22 21:50, Luther said:

    沙发

    • At 2007.06.26 23:47, said:

      唉 由于我有360 所以我就认真的看你的文章 结果是一如既往的没看懂 哈哈哈 不过看来你最近过得不错 我和舟都在因工作而痛苦中呢

      (Required)
      (Required, will not be published)