鬼影3分析报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
鬼影3分析报告,鬼影病毒分析,鬼影实录分析,邪降3鬼影随行,鬼影实录,瘦长鬼影,鬼影面具,鬼影病毒,瘦长鬼影降临,迷雾鬼影

鬼影3分析报告 鬼影驱动hello_tt.sys 驱动DriverEntry进去后,创建了一个内核线程,主要做了以下事情,删除beep.sys,创建文件c:\alg.exe,并且从磁盘的后几百个扇区里把鬼影exe(mb.exe)执行时放在那里的alg.exe读取出来,然后创建run启动项,设置为c:\alg.exe。 驱动还会挂钩atapi的DriverObject的StartIo函数,修改成hello_tt.sys里的一段代码,这段代码主要是防止别人尝试恢复MBR,经测试,在hello_tt.sys存在的情况下,修复MBR会失败。 鬼影主程序MB.exe 鬼影主程序MB.exe里面很多花指令,但是主要做的工作比较简单,主要做了读取物理磁盘容量,读取真实MBR,将MBR的数据进行循环左移3位加密,然后将MBR和alg.exe和hello_tt.sys一起写入到,物理磁盘的倒数0x34600个字节处,然后释放alg.exe到c:\目录,并调用winexec运行,并且释放hello_tt.sys并加载运行。 alg.exe 这个主要是弹出各种广告之类的,没太大顽固性 修复方法 MBR修复 鬼影对MBR的修改只是单纯的修改了磁盘最开始的1个扇区,对于分区表之类的没有做修改,修复方法为: 主要是读取磁盘倒数0x34600处的512个字节,然后进行解密,但是首先要patch调驱动里对atapi的hook,这个很简单。 void ROR(unsigned char * pChar, char bits) { __asm { mov ebx,pChar mov al,byte ptr [ebx] mov cl,bits ror al,cl mov [ebx],al } } void DecodeMbr(unsigned char * pMbr) { int i; for(i = 0 ;i 512; i++) { ROR(pMbr + i,3); } } void FixMbr() { HANDLE hFile = INVALID_HANDLE_VALUE; DISK_GEOMETRY DiskGeometry = {0}; DWORD dwBytesReaded = 0; ULONGLONG uTotalBytes = 0; ULARGE_INTEGER uFileOffset = {0}; unsigned char uMbr[512]; hFile = CreateFile(_T(\\\\.\\PhysicalDrive0), GENERIC_ALL, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hFile == INVALID_HANDLE_VALUE) { printf(Open Disk Failed!!\n); goto __Cleanup; } if(!DeviceIoControl(hFile, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, DiskGeometry, sizeof(DISK_GEOMETRY), dwBytesReaded, NULL)) { printf(DeviceIoControl Failed\n); goto __Cleanup; } uTotalBytes = DiskGeometry.Cylinders.QuadPart * DiskGeometry.TracksPerCylinder * DiskGeometry.SectorsPerTrack * DiskGeometry.BytesPerSector; uFileOffset.QuadPart = uTotalBytes - 0x34600; uFileOffset.QuadPart += 0x2400; SetFilePointer(hFile,uFileOffset.LowPart,(PLONG)uFileOffset.HighPart,FILE_BEGIN); if(!ReadFile(hFile,uMbr,512,dwBytesReaded,NULL) || dwBytesReaded != 512) { printf(ReadFile Failed\n); goto __Cleanup; } DecodeMbr(uMbr); __asm int 3; dwBytesReaded = 0; dwBytesReaded = SetFilePointer(hFile,0

文档评论(0)

xingkongwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档