恶意程序报告在线查询工具|

  • A+
所属分类:神兵利刃

*本文原创作者:鬼魅羊羔,本文属FreeBuf原创奖励计划,未经许可禁止转载

前言

有些时候,我们在使用电脑或者为客户去做一些安全检查的时候,难免碰见一些恶意程序或者病毒,大部分都是常见的,不稀奇的东西,当然了,也有可能会遇到一些特殊的病毒(例如那些一言不合就免杀了,而且相当顽固的病毒),特殊的病毒先不说,碰见常见的病毒,或者疑似病毒的东西,我们要怎么去查呢?常规的病毒分析步骤多,门槛高,对于初学者有些困难,老司机也得花不少时间去分析。虽然现在有很多主流的在线分析平台,可以供我们上传样本去实现自动化分析。

先说下写这个工具的初衷,因为工作中,经常做一些恶意程序分析工作,做的时间长了,真心比较枯燥,又累。。自己懒得分析的时候,还得去各种网站上查询某个程序的MD5样本是否被其他人发现过,或者提交过,但是轮番的打开网站,填写MD5,然后搜索,如果没有结果,还得再去上传,然后再等待结果,即便如此,那些我们查过的,遇到过的病毒或恶意程序的MD5,我们谁也不会记住在哪提交过啊。等再次遇到了,依旧重复各种动作,再去一堆网站上查,算是偷懒吧,顺手所以写了个小工具,去帮助我去互联网搜集一下相关病毒或可疑程序的信息。

这个工具呢,是用C#写的,主要通过MD5,自动去特定的网站搜索历史信息,并且把自己查过的内容,选择性的保存到本地,以便日后再查。

开发思路

找在线分析平台的MD5的查询地址和规律

主要涉及到的在线分析平台为:

https://habo.qq.com/file/showdetail?md5=

http://fireeye.ijinshan.com/analyse.html?md5=

http://www.threatexpert.com/report.aspx?md5=

http://md5.virscan.org/

https://virusscan.jotti.org/zh-CN/search/hash/

http://a.virscan.org/

获取查询到,和未查询到的网页信息特征

比如用哈勃分析系统举例,查询到的页面,和未查询到的页面,最明显的一个区别是,查询到的页面代码中,有var md5 = “关键字,而未查询到的木有。

所以,代码可以这么写:

string s0 = "var md5 = \"";
            string url = "https://habo.qq.com/file/showdetail?md5=" + textBox1.Text;
            WebRequest wRequest = WebRequest.Create(url);
            WebResponse wResponse = wRequest.GetResponse();
            Stream stream = wResponse.GetResponseStream();
            StreamReader reader = new StreamReader(stream, System.Text.Encoding.Default);
            string r = reader.ReadToEnd();   //url返回的值
            wResponse.Close();
             if (!r.Contains(s0))
            {
                MessageBox.Show("未找到匹配样本");
            }

先将特征保存到s0变量中,将网站查询页面地址+textBox1.Text输入的内容保存到url变量中

然后通过webrequest方法进行操作,并将捕获到的页面内容存到r遍历中。

通过if进行判断,如果r变量中不包含s0变量中的信息,则提示“未找到匹配样本”,用else输出你想展示的东西;

例如:

else
            {
                Process.Start(url);
                System.Threading.Thread.Sleep(5000);
                if (MessageBox.Show("是否将该MD5本地保存?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    StreamWriter fs3 = new StreamWriter(@"d:\MD5.txt", true);
                    fs3.WriteLine(url);
                    fs3.Close();
                }
                else
                { 
                    //
                }
                
                 
            }

如果匹配成功,则通过process来打开完整的url页面。

这里用到了sleep,先说下原因。。。

因为打开链接后,我还想将这次打开的链接保存到本地,所以就选择性的弄了个提示框,延迟5秒的意思是,先打开浏览器,让大家先看到自己查看的内容是什么,有没有危害,是高风险呢,还是安全的,再决定这个MD5信息该不该保存到本地。

如果确定要保存的话,就通过:

StreamWriter fs3 = new StreamWriter(@"d:\MD5.txt", true);
                    fs3.WriteLine(url);

来写入文件。。本来打算把这个MD5.TXT创建到程序当前目录的,但是怕有人放到桌面,不小心删除了,或者系统重新做了,自己辛苦积累的MD5信息就没了。。所以就直接强迫大家存到D:\盘下了。。。

保存到本地,如何利用起来

这个有人觉得没什么卵用,但是个人觉得,还是有这么一个功能的好,将查询过的链接保存到本地,是为了让大家在没有网络的时候,也能知道自己有没有查过某个MD5信息。前边在查询完,让大家自主选择性保存MD5,也是这个意思,安全的,么有问题的,相信没人想保存,高风险的,有问题的,保存起来,等下次即使没有网了,还可以通过历史记录的方式,来判断下这个MD5所涉及的程序,有没有问题了。。。

下面说下本地如何去读取和操作。。。这个方法百度很多,很多。。我简单说下。。。

 StreamReader objReader = new StreamReader(@"d:\MD5.txt");
            ArrayList arrText = new ArrayList();
            if (objReader.ReadToEnd().Contains(textBox1.Text))
            {
                string url2 = "https://habo.qq.com/file/showdetail?md5=" + textBox1.Text;
                StreamReader objReader1 = new StreamReader(@"d:\MD5.txt");
                if (objReader1.ReadToEnd().Contains(url2))
                {
                    Process.Start(url2);
                }
                    
                else
                {
                    MessageBox.Show("该MD5值还你还没有检索过");
                }
                
            }
            else
            {
                MessageBox.Show("该MD5值还你还没有检索过");
            }
            objReader.Close();

方法都一样,还是将文件存放路径保存到变量中,然后通过objReader.ReadToEnd().Contains(textBox1.Text)来匹配输入框中的内容,如果匹配成功,就打开网站链接。。这个就不多说了,简单的

整体搜索历史记录

这里我直接贴代码吧。。

StreamReader objReader = new StreamReader(@"d:\MD5.txt"); 

 ArrayList arrText = new ArrayList(); 

 string url1 = "https://habo.qq.com/file/showdetail?md5=" + textBox7.Text; 

 string url2 = "http://fireeye.ijinshan.com/analyse.html?md5=" + textBox7.Text; 

 string url3 = "http://www.threatexpert.com/report.aspx?md5=" + textBox7.Text; 

 string url4 = "http://md5.virscan.org/" + textBox7.Text; 

 string url5 = "https://virusscan.jotti.org/zh-CN/search/hash/" + textBox7.Text;

 string url6 = "http://a.virscan.org/" + textBox7.Text;

 if (objReader.ReadToEnd().Contains(textBox7.Text)) 

 { 

 StreamReader objReader1 = new StreamReader(@"d:\MD5.txt"); 

 if (textBox7.Text != null) 

 { 

 if (

objReader1.ReadToEnd().Contains(url1)) 

 Process.Start(url1); 

 }

 StreamReader objReader2 = new StreamReader(@"d:\MD5.txt"); 

 if (objReader2.ReadToEnd().Contains(url2)) 

 {

 Process.Start(url2); 

 } 

 StreamReader objReader3 = new StreamReader(@"d:\MD5.txt"); 

 if (objReader3.ReadToEnd().Contains(url3)) 

 { 

 Process.Start(url3);

 } 

 StreamReader objReader4 = new StreamReader(@"d:\MD5.txt");

 if (objReader4.ReadToEnd().Contains(url4)) 

 { 

 Process.Start(url4); 

 } 

 StreamReader objReader5 = new StreamReader(@"d:\MD5.txt"); 

 if (objReader5.ReadToEnd().Contains(url5)) 

 { 

 Process.Start(url5); 

 } 

 StreamReader objReader6 = new StreamReader(@"d:\MD5.txt"); 

 if (objReader6.ReadToEnd().Contains(url6))

 { 

 Process.Start(url6);

 } 

 } 

 else 

 { 

 MessageBox.Show("该MD5值还你还没有检索过"); 

 }

这里实现的功能是,在历史的MD5.txt中,搜索指定的MD5的相关历史链接,如果匹配到,则会将所有匹配到该MD5值的链接全部打开,这样就一目了然了。。。。

https://habo.qq.com/file/showdetail?md5=32d6c35357afc1df3378233a80cb1646

http://fireeye.ijinshan.com/analyse.html?md5=71989e3543b32330c43ea6a5acc41382

http://md5.virscan.org/54d833fbeed1015f079139d4c674efb3

http://a.virscan.org/54d833fbeed1015f079139d4c674efb3

http://www.threatexpert.com/report.aspx?md5=FD6260195E783C275D0F90047F5A3069

http://md5.virscan.org/c5a3bc9d76d42aacf4610c440657d27e

https://virusscan.jotti.org/zh-CN/search/hash/c5a3bc9d76d42aacf4610c440657d27e

http://a.virscan.org/c5a3bc9d76d42aacf4610c440657d27e

https://habo.qq.com/file/showdetail?md5=32d6c35357afc1df3378233a80cb1646

比如说:当我们查询c5a3bc9d76d42aacf4610c440657d27e这个MD5时,历史文件中,有3个网站都匹配过这个MD5值,点击查询,则会依次打开这三个网站,有关c5a3bc9d76d42aacf4610c440657d27e这个MD5的信息

http://md5.virscan.org/c5a3bc9d76d42aacf4610c440657d27e

https://virusscan.jotti.org/zh-CN/search/hash/c5a3bc9d76d42aacf4610c440657d27e

http://a.virscan.org/c5a3bc9d76d42aacf4610c440657d27e

使用这个小工具有两个前提:

①电脑装了.NET4.0环境;

②你有一个查询MD5值的工具;

工具推荐使用winMD5,简单,轻便,还能批量。。

本来打算在工具里集成MD5查询功能,但是实在是懒得不行了。明天又得各种开会,这个留着后期再说吧。。。

工具截图:

1.jpg

2.jpg

如果查询的MD5值能匹配到的话,就会提示是否保存MD5信息。。

3.jpg

当查询历史记录时,MD5信息没有匹配到,就会有如下提示,在线查询也是如此:

4.jpg

这个截图,是历史记录一键查询功能,它会自动匹配到本地MD5.TXT中所查询过的内容,匹配成功后,则会依次打开相关联的所有站点。

6.jpg

注:里面那个上传样本功能直接忽略,只做了个打开按钮,打开的链接是对应平台的上传页面,为了好看。。

其实这个还少写了一个功能,就是批量查询,整个界面其实两个功能足够,一个批量查询,一个批量读取。。。

最近有些繁忙,没时间做更改了,将就着用吧。

网盘地址:传送门

*本文原创作者:鬼魅羊羔,本文属FreeBuf原创奖励计划,未经许可禁止转载

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin