首页| 论坛| 搜索| 消息
主题:重做论坛的Synaptics病毒修复工具
z3960发表于 2025-06-25 09:51
一、为什么要重做Synaptics修复工具很久很久以前,个人电脑和多个U盘上就被 Synaptics病毒 攻占了,使用U盘时经常会传给其它电脑,或被其它电脑上的杀毒软件以病毒之名把U盘上的专用工具给删除了,是直接删除而不是恢复文件.发现中着后,个人以前的做法时, 将Synaptics 病毒的源目录中的exe文件,用个txt代替后修改权限,从而使病毒不能运行.前些天,又被这个病毒唤醒了,就在网上搜罗. 从本论坛 下载到一个由 @cdj68765制作的Synaptics病毒专杀工具, Synaptics蠕虫病毒感染解决方案[开始还不是本站会员]由于权限所限,只能看到第一页.下载了一个1.1.1.1版本的, 也不晓得是不是最新的文件.同一时间,搜索到一篇分析报告文章 ,偷梁换柱:谨防“Synaptics”蠕虫病毒知道了病毒的运作过程.于是用下载的专杀工具,效果感觉很好, U盘空间顿时空了两三百兆出来,根据工具中扫描时提示的目录信息,我再到U盘的相关目录中去查看,用exeScope工具来检查一些文件时,发现还是存在感染文件,但是专杀工具识别不了.正如作者所说:目前已知问题,对某些exe文件会无法恢复,问题发生的原因不明,程序会自动跳过该类文件但是病毒还在要小心对长路径名的文件无法处理,这个是Win系统的通病,我也不清楚病毒是怎么做到对长路径和长文件名的感染的被感染的xlsm文件恢复还处于验证阶段,需要你们的测试结果现在以 病毒样品文件 : Oem7F7.exe (感染文件大小:1.58M,原始文件大小:881K)来测试.下面是exeScope载入后的结果,确认是感染文件,其中RC数据中DESCRIPTION, EXERESX, EXEVSNX 的内容为 :DESCRIPTION:000B139C:53 00 79 00 6E 00 61 00 70 00 74 00 69 00 63 00S.y.n.a.p.t.i.c.000B13AC:73 00 20 00 50 00 6F 00 69 00 6E 00 74 00 69 00s. .P.o.i.n.t.i.000B13BC:6E 00 67 00 20 00 44 00 65 00 76 00 69 00 63 00n.g. .D.e.v.i.c.000B13CC:65 00 20 00 44 00 72 00 69 00 76 00 65 00 72 00e. .D.r.i.v.e.r.000B13DC:00 00 00 00.... EXERESX:000B13F0:4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00MZP.............000B1400:B8 00 00 00 00 00 00 00 40 00 1A 00 00 00 00 00?......@.......000B1410:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00................000B1420:00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00................000B1430:BA 10 00 0E 1F B4 09 CD 21 B8 01 4C CD 21 90 90?...???L?悙000B1440:54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D 75 73This program mus000B1450:74 20 62 65 20 72 75 6E 20 75 6E 64 65 72 20 57t be run under W000B1460:69 6E 33 32 0D 0A 24 37 00 00 00 00 00 00 00 00in32..$7..............0018D9E0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00................EXEVSNX:0018D9F0:31 30 36 106在 exeScope将资源中的EXERESX内容导出为BIN文件后,直接就是原始文件,于是准备写一个脚本调用exeScope.exe 来批量导出原始文件, 成是成功了,但是要附带一个exeScope.exe程序在脚本中也不像个事儿.于是准备根据前辈的分析报告自己来写一个专杀的工具. 顺便用exeinfo PE查看了下载的专杀工具的编译工具是 - MS Visual C# / Basic.NET]- EPToken :0600001E.于是丢到 dnSpy中参考借鉴.经过分析源码,发现扫描不全的原因有:其一: 专杀工具先取源病毒文件/或感染文件的属性中的描述字段信息作为病毒的特征码,若不能获取到 versionInfo.FileDescription,就不能确定病毒特征码,原代码摘要:
纯文本查看 复制代码
?string text ="C:\ProgramData\Synaptics\Synaptics.exe";....FileVersionInfo versionInfo =FileVersionInfo.GetVersionInfo(text);CS$8__locals1.SynapticsDescription =versionInfo.FileDescription;....FileVersionInfo versionInfo2 =FileVersionInfo.GetVersionInfo(openFileDialog.FileName);CS$8__locals1.SynapticsDescription =versionInfo2.FileDescription;...if (string.IsNullOrEmpty(CS$8__locals1.SynapticsDescription)){MessageBox.Show("获得病毒描述信息失败,退出程序");return;}用原专杀工具来测试上面的Oem7F7.exe时,会报错:获得病毒描述信息失败,退出程序,然后退出工具.其二, 判断是否病毒的标准是以文件的描述字段是不是匹配病毒源/或感染文件 的描述字段, 另外 不能取到检测文件的描述信息,也会跳过该文件,原代码摘要:
纯文本查看 复制代码
?123456789FileVersionInfo versionInfo =FileVersionInfo.GetVersionInfo(text);if (versionInfo.FileDescription == null){continue;}if(versionInfo.FileDescription.StartsWith(A_1.SynapticsDescription)){ .... }用下面的 C# 来验证专杀工具中的代码检测样品病毒文件描述 的返回值:
纯文本查看 复制代码
?01020304050607080910private void button7_Click(object sender, EventArgs e){string text = textBox8.Text;FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(text);string desc = versionInfo.FileDescription;if ( desc is null) Console.WriteLine($"文件:n{text}n是否存在:{File.Exists(text)}n描述信息为:n{desc}n描述为:null");else Console.WriteLine($"文件:n{text}n是否存在:{File.Exists(text)}n描述信息为:n{desc}n描述信息长度为: {desc.Length}");}返回值 :文件:F:下载Download病毒Synaptics病毒病毒样本Oem7F7.exe是否存在:True描述信息为: 描述为:null结果是取不到描述值, 然后随机试了下其它exe文件, 发现很多文件都取不到描述值,如大家熟悉的程序:IDA的卸载程序,exeScope.exe ,也有能取到描述的文件如ida64.exe,下面列举几个验证结果:文件:D:ProgramFilesOllyDbgIDAuninstall.exe是否存在:True描述信息为: 描述信息长度为:0文件:D:Program FileseXeScopeeXeScope.exe是否存在:True描述信息为: 描述信息长度为:0文件:D:Program FilesollydbgIDAida64.exe是否存在:True描述信息为:The Interactive Disassembler描述信息长度为:28所以这会漏检很大一部分文件.这里测试了几个不同的文件,发现病毒文件取的返回值是null,而不是病毒文件没取到值时,返回不是null,不知这个是不是个例.其三,文件/文件夹遍历递归时,try语句位置不当, 会使遍历过程中遇到错误后,未遍历的文件会跳过,原代码:
纯文本查看 复制代码
?01020304050607080910111213141516171819202122internal static void g__AddDirFiles|4_2(stringdir, ref Program.c__DisplayClass4_1 A_1){try{DirectoryInfodirectoryInfo = new DirectoryInfo(dir);Listlist = new List();list.AddRange(directoryInfo.GetFiles("*.exe"));list.AddRange(directoryInfo.GetFiles("*.xlsm"));foreach (FileInfofileInfo in list){ A_1.files.Add(fileInfo.FullName);}DirectoryInfo[]directories = directoryInfo.GetDirectories();for (int i = 0; i 0){ List rltByte = new List(); IntPtr module = IntPtr.Zero; module = WinApi.LoadLibraryEx(file, IntPtr.Zero, flags[0]);string copyFile = ""; for (int iti = 0;iti 200) { size = 16; }//有限制时,且超长时,限制为16字节,针对"EXERESX" 的摘要信息 byte[] array = new byte; Marshal.Copy(source, array, 0,array.Length); rltByte.AddRange(array); } } WinApi.FreeLibrary(m
下一页 (1/4)
回帖(4):
4 # hanxiao129
07-02 16:10
每天的知识都是新鲜的
3 # hanxiao129
07-02 16:09
今天又学了不少新知识
2 # huwg
06-26 05:35
了解一下了
1 # huwg
06-26 05:35
谢谢分享

全部回帖(4)»
最新回帖
收藏本帖
发新帖