前言
最近看了一个国外大佬对恶意软件分析的总结,我自己也接触过一丢丢,感觉大佬总结的还是很不错的,根据自己的理解把它翻译了过来。
python
相信作为安全爱好者,再熟悉不过。无论是ctf
还是渗透测试
或是逆向工程
都可以极大的提高我们的工作效率。python
具有很好的可读性和快速开发的潜力,学习成本也相对较低。它也可以很好的跨平台使用,我主要工作环境还是windos。
操作恶意软件
利用python可以很好的复制恶意软件的组件,或者与恶意软件本身进行交互进而分析它的工作方式,加快分析速度,可以解决一些逆向恶意软件并把转换成模块化时遇到的问题等。帮助处理一些繁琐的工作。分析恶意软件不可能直接在联网的环境中运行,但是可以通过python控制它的作用,阻断发送真实数据给黑客或让它访问蜜罐
。
调试器扩展
通常分析过程都是重复并且枯燥的,非常耗时间,利用python自动化处理是非常棒的,每个调试器和反汇编工具都有自己内置的脚本语言,学一堆不同的脚本语言是非常没有意义的,现在大多数调试工具都支持python,比如IDA pro
。
有时候可以使用python脚本遍历二进制文件中的每个加密字符串,然后解密并存储,不需要运行恶意软件。
任务自动化
python第三方库非常丰富,可以实现各种功能,很方便的编写脚本完成任务,不需要自己从头开始编写代码,比如可以使用脚本检查命令和控制域,上传文件或查询virustotal上的文件,加载虚拟机用来分析恶意软件,配置服务器,python号称编程的瑞士军刀
,对于日常任务和恶意软件分析来说,学习python是很有意义的。
C语言
一般入门学习的第一门语言都是C语言,对于C语言不太建议用来编写程序(效率相对较低),但是学习和理解它是必要的。
文档
在分析恶意软件的工程中经常会遇到不熟悉的功能,想要理解函数的功能和参数,以及初始化和返回值,最好的办法就是查找阅读文档。
如何引用如何使用都可以查看它的定义和包含的数据类型,然后查找每个单独数据类型了解它是什么。
源码
像windows这种封闭源操作系统,有很多数据结构和功能没有文档,通常是不应该给非Microsoft以外的员工使用的,这些通常被称为windows internals。恶意软件开发人员喜欢滥用内部部件绕过安全机制,或者混淆不熟悉这些部件的分析人员。虽然可以对操作系统本身进行逆向工程来理解其内部结构,但是它非常耗时并且困难,如果直接阅读C代码可能会更快的理解。
ReactOS源代码
ReactOS是一个用C语言编写的开源操作系统,旨在与window server 2003可执行文件兼容,为了保持与window二进制文件兼容性,开发人员不得不对大部分NT5.2(驱动windows 2000,windows sever 2003和windows XP的windows操作系统核心版本)进行逆向工程和重新实现,因此可以通过阅读ReactOS来理解windows内部。
Windows Research Kernel
Windows Research Kernel(WRK)是微软为研究人员提供的NTOS内核源代码的一个子集,它包含了大部分核心内核源代码,虽然WRK只包含windows的内核部分,仍然可以帮助我们理解非内核恶意软件,因为内核的某些部分通过“Native API”暴露给用户态应用程序,而Native API经常被rootkit滥用。最初WRK很难获得(它仅作为各种基于计算机科学的程序的一部分提供给认可的大学),但从那时起,一些旧版本已经发布到GitHub,因此是公开的。虽然WRK不如ReactOS完整,但它有一些好处,例如包含64位Windows内核的代码。
IDA pro伪代码
IDA pro可以选择将程序集显示为伪代码
,导致它提供与程序集匹配的代码。
虽然IDA伪代码在技术上并不是有效的C语言,但是对于熟悉C语言的人来说已经非常清晰了,提供阅读伪代码就可以知道这些代码进行了什么操作,非常节省时间,不用费力的理解汇编代码。
汇编语言
汇编语言(assembly language,通常缩写ASM)是人类可读的最底层语言,计算机CPU实际理解的唯一语言,C,C++,Golang等语言都被编译为机器代码,所以大多数软件都可以使用反汇编程序。
不同类型的CPU接受不同类型的指令,因此学习汇编时,实际上是学习CPU指令集
,目前只有2个指令集是常用的。
i386
i386(Intel 80386
的缩写)是X86指令集的32位版本,几乎所有32位台式计算机,服务器和笔记本电脑都是使用它,这和机器运行windows还是linux或者mac,不重要,如果它是32位,那么CPU可能是基于i386的,我们通常谈论的是i386汇编,在64位操作系统,32位的应用程序仍然正常运行,所以大部分windows恶意软件开发人员只会编写32位恶意软件,既适应32位又兼容64位系统。
X86_64
这是X86的64位版本,也是现代计算机最常用的指令集,由于X86系列中的体系结构保持了强大的向后兼容性,大多数64位指令非常类似i386指令,一般是先学习i386汇编再学习X86_64。
总结
没有任何捷径可以直接从脚本小子跳到恶意软件逆向工程师,所以学习编程是非常有必要的,特别是C语言和汇编,可以让你更快速了解计算机的工作原理,学习其他编程语言。不管是否要成为恶意软件分析师,学习编程语言只会有利无弊,语言基础就像砖头,没有砖头就盖不了大厦。