-
UID:17777
-
- 注册时间2007-05-02
- 最后登录2025-05-02
- 在线时间18636小时
-
- 发帖786303
- 搜Ta的帖子
- 精华0
- 飞翔币211574
- 威望215717
- 飞扬币2615486
- 信誉值8
-
访问TA的空间加好友用道具
- 发帖
- 786303
- 飞翔币
- 211574
- 威望
- 215717
- 飞扬币
- 2615486
- 信誉值
- 8
|
1. 火绒剑分析windows10无法被感染,测试环境为windowsXP系统未运行前任务管理器状态:熊猫烧香病毒运行后的任务管理器状态:ncscv32是显卡进程,病毒修改注册表创建系统服务项Run/nvscv32实现自启动。首先病毒会在系统目录下复制自己的程序,程序如下: 图1 系统目录显示病毒在注册表中每6秒就会检测,目的是将杀毒软件启动项删除图2 火绒剑显示杀死进程启动项其中注册表中Run下的键值会随着系统的启动而运行(自启动项)。图 3 desktop 文件 在各个目录下都会生成desktop文件,存在desktop文件如下: 图4 创建进程可以观察到panda.exe创建了病毒进程spo0lsv.exe除此之外,panda.exe未对系统产生实质性的影响,所以可以认为感染的是spo0lv.exe程序 图5 spo0lv.exe进程其中seed主要用于随机数的生成病毒会在指定目录下创建setup.exe以及autorun.inf文件,具体将U盘插入虚拟机后再插入物理机中发现如下问题: 图6 杀毒软件提醒其中autorun.inf是修改系统中自启动文件。 imm32.dll和输入法有关,如果出现问题,输入法无法使用lpk.dll: lpk.dll就会被Windows动态链接,从而激活病毒,进而导致不能彻底清除usp10.dll:unicode脚本处理器(出现在除system目录下之外的都是木马程序)wsock32.dll:windowssocket应用程序接口ws2_32.dll:Windows Sockets应用程序接口, 用于支持Internet和网络应用程序。2. 分析熊猫烧香病毒2.1脱壳处理查看文件是否加壳,使用PEID工具进行查看,查看结果如下:图7 PE文件查壳说明文件使用了FSG超级加壳,如果直接使用IDA进行分析时,只会显示start函数,需要手动脱壳,脱壳方式如下:(1)寻找真正的OEP入口地址图8 OEP入口地址此处为第一个特殊的JMP(2)获取真正的OEP程序。F7步入后得到图9 OEP入口程序以上汇编程序为真正的OEP入口程序(3)利用loadPe进行脱壳图10 loadPe脱壳使用loadPE进行脱壳转存。此时点击转存后的dumpd文件:图11 转存后打开错误此时Dump出的程序还不可以运行,需要修复IAT表才可以。由(2)可知,OEP的RVA地址为:001E768(4)使用ImportREC修复IAT表在软件中导入EXE文件,并修改OEP数据后获取导入表,其中获取导入表的过程如下:在PE文件格式中,导入表的RVA位于option_header中datadiretory(最后一项)中的第二个元素中,而OEP在option_header中,OEP距离datadiretory为15个DWORD(四个字节)8个WORD(两个字节),共76个字节。所以可以通过OEP的值获取到datadiretory的位置,从而定位指向导入表的RVA地址。通过观察第一个窗口得到导入表的起始位置以及结束位置图12 导入表的起始位置以及结束位置可以观察到RVA为0002117C,结束位置RVA为002151C,由002151C-0002117C=33A0,确定导入表大小。修改importREC中的数据值: 图13 修改importREC值点击获取导入表后得到导入函数,但是其存在无效区域如下:图14 无效区域需要手动删除,在importREC中通过右击无效函数选择“剪切函数”即可,最终结果如下:图15 脱壳结果通过importREC导出修改IAT后的程序。脱壳完成。 2.2 OD分析2.2.1 将脱壳后的exe文件拖入OD中可以观察到一个函数调用了一次,另一个函数调用了三次。图16 OD整体调用图2.2.2函数一作用为获取程序基地址以及程序实例句柄。函数二传入了两个参数,其中一个参数为一段ACSII码,其内部的作用是复制字符串,将字符串复制到了连续的内存中。2.2.3 分析三个重要函数接下来的三个函数是病毒感染的重要函数: 图17 三个重要函数(1)步入后的第一个函数如下:第一个函数首先会先调用getmoduleFileName获取程序的名称 获取文件的路径并经过处理后将字符串前部的文件名称去除并利用strcat函数将其与”Desktop_ini”连接。接下来通过FindFirstFileA()函数寻找此文件,如果找到就删除,如果没找到就跳过继续执行。 接下来程序会通过ReadFile()函数将自己读入到内存中,再调用getFileSize()函数获得文件的大小,并判断文件的最后一个字节是否是1,如果是1就证明被感染文件执行了上面的感染代码。获取当前模块名称,将获取到的模块名称转化成大写。通过getSysytemDirectory()获取系统目录路径,从系统目录中获取指定文件目录的acsii码(路径),拼接文件字符串,并将其转化为大写,将转化后的数据存储在数据寄存器中。将EAX中存储的程序自身路径与EDX中存储的系统文件路径相比较,如果相等则跳转。但是当前程序所在路径和获取到的系统路径不相等,不会跳转。接下来系统会调用openprocess()函数打开进程对象并获得句柄,并利用lookupPrivilegeValueA()查看当前系统权限值以及利用AdjustTokenPrivileges()函数提升权限。接着再次获取系统目录并利用copyfile()函数将自身复制到系统目录下并命名为和系统文件相同的名称,目的是混淆不宜被用户发现(ncscv32.exe),创建成功过后调用WinExec()函数执行此文件,并调用ExitProcess()函数结束进程。以上是分析当病毒程序第一次感染主机时流程,分支的依据是判断程序当前目录是否在系统目录下,而当第一次调用时完成第一个函数即会退出,再次感染时才会调用第二个函数(即当前病毒程序已经在系统目录下)(2)第二个函数分析想要分析第二个函数,就需要使其认为当前EXE文件已经在系统目录下,修改判断路径字符串是否相等汇编指令,使其判断函数改为JMP指令直接跳转。第二个函数内部调用三个函数:a)第一个函数内部设置了定时器(setTimer),定时器间隔为6s,并设置定时器回调地址如下: b)第二个函数第二个函数内部调用了CreateThread()函数创建线程,新创建的线程在执行完第三个函数以后进入,新创建的线程中调用的第一个函数内部调用了GetDriverTypeA()函数,并同时遍历A-Z盘,当遍历到盘时,就把存在的盘符保存在0X00000043中,在跳出当前函数后向下执行是将遍历到的盘符和:/拼接。接下来调用FindFirstFile()寻找文件,如果找不到就会跳转:接下来比较寻找的系统问价是否是setup.exe或者NIDETECT.COM文件,如果是则直接跳转: 如果都不是,那么接下来进行后缀名称的比较,分别为exe,scr,pif,com,htm,html,asp,php,jsp,axpx,找到对应文件后进行相应文件感染操作。 (3)第三个函数第三个函数主要是设置了四个定时器a) 首先进入到第一个回调函数,即上图中的第一个方框图中跳转的位置。到达位置后进入调用的第一个函数中,如下所示:进入函数后发现其功能是创建了一个线程,分析创建线程过程中传入的函数参数如下:在对应PUSH的地址下下断点,即在0041784C的位置下断点,点击运行至0041784C处可以发现,此函数通过系统函数获得桌面窗口,并将窗口的字符串加入至缓冲区中,同时扫描病毒、遍历系统反病毒进程、遍历系统安全监控进程、遍历系统修复进程,具体如下: 最后将遍历到的全部关闭。第二个功能是关闭任务管理器的一些程序,具体如下: 接下来,病毒程序会设置注册表,调用函数使其开机自启动并且设置隐藏性能。(具体如下:) b) 第二个定时器回调函数,即0041E4F4第二个函数回调函数创建了一个线程,进入线程回调函数后发现,主要是将一段密文和XBOY进行一定的操作,最后会得到一个网址。c)第三个定时器回调函数,即0041E4FC第三个回调函数主要创建了三个线程进入第一个线程函数中,得到信息如下:第一个线程主要的目的还是将加密后的密文与XBOY进行一定运算后获得网址。第二个线程利用了cmd命令删除删除了共享文件,具体信息如下:d) 第四个定时器回调函数第四个定时器回调函数创建了一个新的线程,进入线程回调函数,具体信息如下: 主要的目的是删除一些杀毒软件(例如江民杀毒软件[KvMonXP]、卡巴斯基杀毒软件[KAVPersonal50]等)。附加:开始时调用系统dll如下:
|