在Mac Linux上如何快速判断一个文件是否是恶意程序?

熟悉Mac/Linux的用户经常会使用命令行,如果遇到系统异常,如CPU使用率暴涨等,经常会使用top命令去定位到底是哪个程序出现了异常。找到相关程序后,由于许多用户自身没有安全背景或者不大懂得逆向,便无法去分析程序到底做了什么,不敢枉然kill掉程序。又如果文件夹下面无故多了非自己创建的程序,这时也不敢枉然删除。针对这一情况,本文介绍几种小技巧,让你快速判断一个程序是否是恶意样本。

1.使用file命令快速识别文件类型  

如图使用file命令识别名为bashd的文件,从结果中可以看出这个文件为ELF 64位可执行文件,Linux 2.6.18内核平台下。以上信息边可判断这个文件是一个可执行文件,而从文件名bashd中可能第一个闪过脑中的概念即这个程序是bash的守护进程,那么到底是不是呢?我们接着分析。

2. 使用xxd命令查看文件十六进制内容

如图使用xxd命令可以显示文件的十六进制格式,从文件头的前几个字节可以看出这个文件是ELF格式的可执行文件。当然为了避免满屏的十六进制这里使用head命令值显示了头部十六进制。

如果你对这个可执行文件其他行为感兴趣,也可以入上图通过grep+字段来搜索你感兴趣的内容。如图,我们找到了socket.h和curl_socket,可以猜测这个程序可能有网络行为,而且使用用curl。

3.使用strings命令快速识别文件大体功能

strings命令,熟悉Mac/Linux的用户都知道该命令是在对象或二进制文件中查找可打印的字符串。字符串是4个或者更多可打印字符的任意序列,以换行符或空字符结束。恶意文件中经常包含可以显示这个程序行为的字符串,通过该命令,即可快速显示其文件可能包含的行为。

如图,我们可以看见其字符串包含了curl几个API,说明程序由使用curl接口,也印证了我们上小节的判断。

当屏幕继续往下拉的时候,我们发现了其程序的帮助命令,从以上信息可以看出这个程序是一个挖矿程序,其版本号为cpuminer 2.3.3,编译时间为2017年7月12日。截止到这里我们基本可以判定这个程序是个恶意程序,主要功能是用来挖矿。如果你想继续深挖信息,可以通过Baidu等搜索平台搜索关键字cpuminer,可以找到该程序的源代码,这里贴出源码地址 https://github.com/pooler/cpuminer ,请大家不要作非法用途。

4.使用readelf或greadelf命令继续深入挖掘文件信息

当判断这个文件为ELF文件格式之后,我们便可以通过readelf或greadelf命令来查看文件更加详细的信息。这里以Mac平台的greadelf为例子。

如图通过greadelf -a bashd命令显示了该文件更加详细的信息,通过这些信息可以更加全面的认识该程序的功能。

通过以上简简单单的四个Mac/Linux下的命令我们迅速判断一个文件的是否为恶意样本,并且还找到该恶意样本的源代码,成功将其kill掉。期间我们没有使用太多高级的技巧,也没使用逆向的相关知识,但却快速解决问题。当然如果程序使用了更多高级的技巧,以上命令并不能得到很多信息,还是需要更加深入的分析,其分析方法我们会在以后的文章介绍到。 

原文发布时间为:2017-10-10

本文作者:GeekOnline

时间: 2024-11-03 07:53:09

在Mac Linux上如何快速判断一个文件是否是恶意程序?的相关文章

如何在 Linux 上使用 SSHfs 挂载一个远程文件系统

如何在 Linux 上使用 SSHfs 挂载一个远程文件系统 你曾经想过用安全 shell 挂载一个远程文件系统到本地吗?如果有的话,SSHfs 也许就是你所需要的.它通过使用 SSH 和 Fuse(LCTT 译注:Filesystem in Userspace,用户态文件系统,是 Linux 中用于挂载某些网络空间,如 SSH,到本地文件系统的模块) 允许你挂载远程计算机(或者服务器)到本地. 注意: 这篇文章假设你明白SSH 如何工作并在你的系统中配置 SSH. 准备 在使用 SSHfs 挂

用PHP在Linux上读取输入并进行文件操作

Perl作为Linux系统命令行脚本的首选解释语言的日子一去不复返了.今天,我们有了更多的选择,包括Python.Ruby和PHP.如果你已经为网站编写PHP代码,并熟谙这种语言,那么你会发现,在命令行使用PHP的速度之快,效果之好令人惊奇. 在脚本中,任何脚本语言的一个最大功用是对文件进行操作并获取用户输入.PHP处理这些丝毫不比其它任何脚本语言逊色. 例如,利用PHP在脚本执行期间处理读取用户提供输入,使用: #!/usr/bin/php<?phpfunction read_input(){

java-JAVA中如何判断一个文件是否存在,如果不存在则创建它?

问题描述 JAVA中如何判断一个文件是否存在,如果不存在则创建它? JAVA中如何判断一个文件是否存在,如果不存在则创建它? 求帮助 源码如下: public void SaveFile(String fileName,String content) throws IOException{ File file =new File(fileName); if(!file.exists()){ System.out.println("不存在"); System.out.println(fi

文件读取-C# 快速删除一个文件中相同行

问题描述 C# 快速删除一个文件中相同行 我要从一个较大(上G)的文件中读取数据,要保证不能重复,也就是删除相同的行,读取一行再和前面的一行行对比效率太低了,有没有更好的方法?求大牛 解决方案 把每行添加到map中,因为map不允许key重复,每行内容作为key,最后把map中的内容写回去

c语言-Linux C编程:将Linux根目录下指定的一个文件夹内的所以文件按创建时间排序

问题描述 Linux C编程:将Linux根目录下指定的一个文件夹内的所以文件按创建时间排序 Linux C编程:将Linux根目录下指定的一个文件夹内的所以文件按创建时间排序,并删除创建时间最靠前的100个文件.请大神赐教代码,非常非常感谢!! 解决方案 http://blog.csdn.net/kesaihao862/article/details/6657399

java 怎么判断一个文件已经损坏了

问题描述 java 怎么判断一个文件已经损坏了 如题:用java读取jpg.jpeg.tif.tiff.pdf文件.如何才能解析到该类文件已经损坏,返回一个false值.有没有工具包能解决这问题?

bat for循环-bat脚本问题,重复循环判断一个文件是否存在,直至该文件存在

问题描述 bat脚本问题,重复循环判断一个文件是否存在,直至该文件存在 大致说个流程,点击bat,判断文件存在,在的话就把它删了,不在的话就一直判断,直到存在,也就是说,当程序执行后,发现没有这个文件,程序还在循环的跑,当在新建finish.fl文件的时候,程序发现有这个文件,把它删了,这时候程序才结束了 不知道这样的bat脚本能不能够实现,可以的话麻烦贴出代码,非常感谢 解决方案 echo off if exist d:finish.fl del d:finish.fl loopstart:

c++编程-这是一个文件管理系统的部分程序,它是怎么实现的呢?用了什么逻辑结构?怎么寻找结点的?

问题描述 这是一个文件管理系统的部分程序,它是怎么实现的呢?用了什么逻辑结构?怎么寻找结点的? 程序源代码 解决方案 oh, it is a question

linux下fallocate快速创建大文件

以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源) 但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢 在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘 则可以 dd if=/dev/zer