麦洛克菲-逆向病毒分析课程

上传人:第*** 文档编号:95382447 上传时间:2019-08-17 格式:PPT 页数:49 大小:895.50KB
返回 下载 相关 举报
麦洛克菲-逆向病毒分析课程_第1页
第1页 / 共49页
麦洛克菲-逆向病毒分析课程_第2页
第2页 / 共49页
麦洛克菲-逆向病毒分析课程_第3页
第3页 / 共49页
麦洛克菲-逆向病毒分析课程_第4页
第4页 / 共49页
麦洛克菲-逆向病毒分析课程_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《麦洛克菲-逆向病毒分析课程》由会员分享,可在线阅读,更多相关《麦洛克菲-逆向病毒分析课程(49页珍藏版)》请在金锄头文库上搜索。

1、2012-03-10,麦洛克菲内核开发-逆向病毒分析课程,麦洛克菲 ,麦洛克菲,提纲,病毒分析的基本工具方法 实战分析-复合类多态感染病毒 病毒结构分析及特点 混淆的解密头注意事项 单步逆向分析 分析总结,病毒分析的基本工具方法,1 调试工具:IDA,Ollydbg . 2 PE分析类工具:PEid,FFI,CFF Explorer. 3 PE文件对比分析类工具:PEinfo . 4 编辑工具:winhex,ultraEdit .,病毒分析的基本工具方法,1 先整体,后局部,从文件对比入手(文件大小,ultral Edit 简单对比,IDA bindiff 流程观察)。 2 观察PE文件各个“

2、段结构”,“大小”,“属性”(PEinfo 等对比工具)。 3 明确待分析文件是由什么编程工具编写,查明EOP异同点。 4 当简单分析后,无法发现明显代码流程劫持的情况下,可以特别关一 下这几个API的调用的变化,exit, exit, ExitProcess。 5 碰到混淆的的循环功能代码时,要多从大的文件感染特性上判断,找 思路。 6 分析时,主要观察内存变化(段的属性,是否被重新填充),寄存器的变化,eax ,ecx,esi,edi 。,实战分析-复合类多态感染病毒,win32.virus.sality -目前全球威胁趋势排名前10变形感染类蠕虫病毒) 1 内置多态引擎 2 文件型感染

3、3 p2p僵尸网络,病毒结构分析及特点,sality 感染的模型,obfuscation decryptor,host,junk code,junk data,bound PE,eop,Ori eop,病毒结构分析及特点,sality 执行流程路径,病毒结构分析及特点,感染前后,整体程序流程的差异,混淆的解密头注意事项,1 起始地址的位置,一般我们判断向上的jmp 跳转情况。,混淆的解密头注意事项,2 结束位置, 如果混淆的比较复杂情况,结束位置需要仔细找一下 。,混淆的解密头注意事项,3 看解密的方向: 向上或是向下,这一点主要是为了写解密函数时需要关注的,否则可以忽略,混淆的解密头注意事项

4、,4 看每次解密的步数:这个非常重要的一个点,一般可以在一个寄存器里面Rx,通常是ECX,但也可能是其他的寄存器或是内存的某个地址处的数据。 极端一些的情况下还有针对这个步数的混淆。,混淆的解密头注意事项,5 看解密后的跳转 这次的情况很简单,直接在解密后的指令中,复杂的情况还需要单补跟踪到。,混淆的解密头注意事项,6 观察能操作内存的操作。,混淆的解密头注意事项,7 对call 的跟踪要类似分析壳一样,哪些F7进入,哪些F8步过要试探着运行。,单步逆向分析,1 利用push imm32 , call sub_xx, ret , 原因是什么? anti - static check 目的。,单

5、步逆向分析,2 了解典型的解密代码结构,单步逆向分析,3 跨段跳转 ,是最关键的流程转换! 学会从jmp ,ja ,jl, jne ,je.中发现出口的关键跳。 学会观察寄存器的变化,找到最有效的寄存器值。,单步逆向分析,4跨段跳转 :,单步逆向分析,5大段垃圾指令中,插入有效指令,注意区分,单步逆向分析-破解病毒解密的方法,1)看段的跳转变化,进入一个新的方式的开始.,单步逆向分析-破解病毒解密的方法,2) 代码里面充满了无效的指令,但这些需要我们自己判断。需要注意的指令是 Mov Rx,Ry | Mov Rx, mem Mov Rm,Rx1 要注意的寄存器,esi ,edi 。 观察解密c

6、trl+F7,单步逆向分析-破解病毒解密的方法,3) 可以看到解密方向是向上解密。,单步逆向分析-破解病毒解密的方法,4) 如果解密的情况非常复杂,那么合适才算是解密结束,调向我们想要的代码? 方法:1 寻找在解密过程中,涉及到的跳转指令,哪些是通用解密过程中不被执行的。 2 找不是向上跳转的代码,单步逆向分析-破解病毒解密的方法,4) 如果解密的情况非常复杂,那么合适才算是解密结束,调向我们想要的代码? 方法:1 寻找在解密过程中,涉及到的跳转指令,哪些是通用解密过程中不被执行的。 2 找不是向上跳转的代码,单步逆向分析,6 小结:如何寻找到跳转入口 1) 单步跟踪,直到发现 2)tc 跟踪

7、 ,查找间隙大的指令。 3) F9 运行,各个段下断点。 可以观察到,如何解密开原函数的开头。 4)断在最后一次运行的所有跳转位置设置断点。,单步逆向分析 病毒body code,因为病毒是附着在宿主程序的代码之上的。 他要操作引用自己的变量及数据,都要用相 对的操作来完成。 一般为 mov eax,ebp + xxx / 变量 call ebp + yyy / 调用API/函数 call _delta _delta: pop ebp sub ebp,offset _delta,单步逆向分析 病毒body code,堆栈中存放病毒自身的数据,单步逆向分析 病毒body code,7当病毒重定位

8、后,ebp - 通常是用来做重定位的基址,典型结构: VIR_STRUCT struct aLoadLibrary dd ? ; 0 aCloseHandle dd ? ; 4 aGetCurrentDirectory dd ? ; 8 aMultiByteToWideChar dd ? ; 12 aFindFirstFile dd ? ; 16 aFindNextFile dd ? ; 20 aFindClose dd ? ; 24 aCreateFile dd ? ; 28 VIR_STRUCT ends,单步逆向分析 病毒body code,重定位,获得kernel32基址的办法: mo

9、v eax,fs:30h ;得到PEB结构地址 mov eax,eax + 0ch ;得到PEB_LDR_DATA结构地址 mov esi,eax + 1ch Lodsd ; 得到KERNEL32.DLL所在LDR_MODULE结构的 ; InInitializationOrderModuleList地址 mov edx,eax + 8h ;得到BaseAddress,既Kernel32.dll基址,单步逆向分析 病毒body code,830000 CreateMapping地址,copy 自身解密代码到另一块内存,单步逆向分析 病毒body code,创建病毒线程, 这是我们单步跟踪的一个

10、原因,当然当分析熟 悉后,可直接下断点 Bp CreateThread位置 通过简单分析,可知创建线程后sleep等待,线程中完成 更多的具体工作。,单步逆向分析 病毒body code,发现了stolencode ,原来的入口点代码被修复。 如何能知道是原来的入口点代码呢? 一般是靠猜测,更多是多熟悉更重编译器入口代码的特点。,单步逆向分析 病毒body code,在病毒最后一个节里面寻找PE文件,然后完成自己加载的 PE文件,执行的功能。,单步逆向分析 病毒body code,替换宿主程序的导入表,单步逆向分析,8病毒修改了GetProcAddress 在IAT中的地址,所以这 时候我们可

11、以下断点,单步逆向分析,自己展开PE文件的方式: 1 copy PE header 2 copy sections 3 fix import address table 4 jmp eop,单步逆向分析,9 解析绑定的PE结构,ImageBase ,NumberofSections, SizeOfImage + 0x100 10 VirtualAlloc 一段可读写SizeofImage 内存 ,pMem 11 把绑定的PE文件0x1026f102 - copy 到新分配的内中 pMem。,单步逆向分析,12 在edi - pMem+最后一个节点virtual address , Esi -

12、最后一个节倒数0x200字节 执行copy 操作,循环执行完所有节点扩展,单步逆向分析,13 判断重定位表(0x1071180) 重定位表达定义: Struct Image_Base_Reloction DWORD virtualAddress; DWORD SizeofBlock WORD TypeOffset; (高4bit是重定位类型,低12bit是虚拟机地址偏移) 【最终重定位地址】 = virtualAddress + typeoffset 重定位的类型: 0 - 无定义 3 - 对应的地址要修正 10- x64下PE文件的地址要修改 修正:【 最终重定位地址】 = 当前地址数据 +

13、 修正值,单步逆向分析,重定位信息,单步逆向分析,14 自己完成PEloader 功能,解析导入表,完成填充IAT的功能。,单步逆向分析,15.1 自己完成对IAT表填充工作: 对比捆绑的PE,与od的情况。 从ollydbg 中dump出捆绑的PE,单步逆向分析,15.2 填充完毕后运行,单步逆向分析,15.3 获得EOP 地址, 转向跳转到绑定展开的pe EOP 地址运行 。 那么病毒如何再次获得控制权呢? 思路我们的处理思路是否有问题,漏下来什么,如 何解决? 病毒为什么要这样做? 绑定一个PE文件 直接释放文件不就可以了吗,单步逆向分析,1 当我们已经熟悉的分析过了,再次分析可以直接在

14、cdata (最后一个节)段下F2断点。 2 F9 运行到断点,下.text段F2断点,F9运行。此时就已经跳 过了混淆的代码区域。 3 后面的分析可以单步跟踪了。,分析总结,1 把真正的代码入口加密保存在自身的body中,使得修复变得 困难。 2 改写程序新入口。 3 通过大量junk code 干扰分析。 4 控制流程,采用分段式,先是EOP的修改,而后是API的 hook 。 5 病毒有感染部分 + 捆绑的PE组成,自行展开捆绑PE并运行.,分析总结,分析时有用断点: bp 0x0100200a 多态解密头结束 bp 0x0101F000 第二次解密开始 Bp 0x0101f5be 二次解密出口关键跳 Bp 0x0101ff97 -二次解密出口 BP 0X010207d4 创建的线程工作函数 Bp 0x01020806 恢复抽掉的入口代码 Bp 0x01020e79 - hook 宿主的导入表函数 Bp 01020B06 - 修正重定位地址 Bp 01020bae - 填充导入表 BP 0102Bda - 填充导入表完成后,运行点,下断点,否则跑飞。,分析总结,如何更快的跳过解密的混淆头 如何dump出捆绑的PE 如何自己load PE展开在内存中,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号