社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 867阅读
  • 2回复

[分享]熊猫烧香病毒分析

楼层直达
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
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.dllWindows Sockets应用程序接口, 用于支持Internet和网络应用程序。2. 分析熊猫烧香病毒2.1脱壳处理查看文件是否加壳,使用PEID工具进行查看,查看结果如下:7 PE文件查壳说明文件使用了FSG超级加壳,如果直接使用IDA进行分析时,只会显示start函数,需要手动脱壳,脱壳方式如下:1)寻找真正的OEP入口地址8 OEP入口地址此处为第一个特殊的JMP2)获取真正的OEP程序。F7步入后得到9 OEP入口程序以上汇编程序为真正的OEP入口程序3)利用loadPe进行脱壳10 loadPe脱壳使用loadPE进行脱壳转存。此时点击转存后的dumpd文件:11 转存后打开错误此时Dump出的程序还不可以运行,需要修复IAT表才可以。由(2)可知,OEPRVA地址为:001E7684)使用ImportREC修复IAT在软件中导入EXE文件,并修改OEP数据后获取导入表,其中获取导入表的过程如下:PE文件格式中,导入表的RVA位于option_headerdatadiretory(最后一项)中的第二个元素中,而OEPoption_header中,OEP距离datadiretory15DWORD(四个字节)8WORD(两个字节),共76个字节。所以可以通过OEP的值获取到datadiretory的位置,从而定位指向导入表的RVA地址。通过观察第一个窗口得到导入表的起始位置以及结束位置12 导入表的起始位置以及结束位置可以观察到RVA0002117C,结束位置RVA002151C,由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如下:  
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
833305
飞翔币
226606
威望
224648
飞扬币
2441377
信誉值
0

只看该作者 1 发表于: 2020-08-05
来看一下
级别: 超级版主
发帖
833305
飞翔币
226606
威望
224648
飞扬币
2441377
信誉值
0

只看该作者 2 发表于: 2020-08-05
不错,了解了