1、使用反病毒软件确认恶意性

  • 启发式,基于行为与模式匹配
  • 查毒网站:virustotal

2、使用哈希识别恶意代码

  • 恶意代码指纹(md5、sha-1)
  • 作为标签使用

3、从文件字符串列表、函数和文件头信息中发掘有用信息

  • 通常以ASCII或unicode格式(双子节)存储,以NULL结束符表示字符串完整

4、加壳与混淆恶意代码

  • 混淆:隐藏执行过程
  • 加壳:被压缩难以分析
    处理后得到的可打印字符串很少,但是至少包含LoadLibrary和GetProcAddress函数用来加载其他函数
  • 加壳程序运行时先运行脱壳代码来解压缩加壳的文件,解析时解析的是一小段脱壳代码
  • 使用PEiD检测加壳(使用UPX加壳工具也可以用其脱壳)

5、PE文件格式

  • PE格式:windows可执行文件、对象代码、dll
  • PE文件以一个文件头开始,其中包括代码信息、应用程序类型、所需的库函数与空间要求。

6、链接库与函数

  • 获取可执行程序导入表(静态链接or动态链接)
  • LoadLibrary和GetProcAddress允许一个程序访问系统上任何库的函数
  • 使用Dependency walker工具探索动态链接函数
    常见dll程序
    (1)Kernal32.dll:包含核心系统功能,如访问和操作内存(进程、线程)、文件和硬件等等
    (2)Advapi32.dll:提供对核心windows组件的访问,比如服务管理器和注册表(Regedit)
    (3)User32.dll:包含了所有用户界面组件,如按钮、滚动条以及控制和响应用户操作的的组件
    (4)Gdi32.dll:图形显示和操作
    (5)Ntdll.dll:导入该文件意味着作者企图使用那些不是正常提供给windows程序使用的接口
    (6)Wsocks32.dll和Ws2_32.dll:联网的dll
    (7)Wininet.dll:包含了更高层次的网络函数,实现FTP、HTTP和NTP等协议
  • 导入函数:可执行文件使用的特定函数相关信息(Windows API)
  • 导出函数:别的程序可以使用的函数(在dll文件中最常见),为了将一个程序以服务方式运行,需定义ServiceMain函数

7、静态分析技术实践
(1)未加壳的键盘记录器:

  • 查看导入表:操作进程、操作文件、图形化界面(只显示给特定用户);
  • SetWindowsHookEX是间谍常使用的函数,也是键盘记录器用来接收键盘输入最流行的方法
  • RegisterHotKey:注册一个热键,用户每次按下会通知应用程序,无论当前哪个应用程序处于活动状态,热键都会将用户带到注册了热键的应用程序
  • 发现使用了注册表:查询注册表键值字符串(Software\Microsoft\Windows\CurrentVersion\Run:控制自启动项

(2)加壳的程序

  • 导入函数极少

8、PE文件头与分节

  • .text:.text节包含了CPU执行指令,唯一可执行的节
  • .rdata:包含导入与导出函数信息,存储程度只读数据
  • .data:包含程序的全局数据
  • .rsrc:包含由可执行文件所使用的资源,这些内容是不可执行的
  • IMAGE_FILE_HEADER中的时间是该可执行程序的编译时间(并不可靠,例如所有的Delphi程序统一为1992年6月19日;可伪造)
  • IMAGE_OPTIONAL_HEADER:IMAGE_SUBSYSTEM_WINDOWS_CUI(控制台程序)、IMAGE_SUBSYSTEM_WINDOWS_GUI(GUI图形界面工具)
  • IMAGE_SECTION_HEADER:描述PE文件的各个分节,比如预分配空间等,实际于此不符时说明存在问题(Virtual Size和Size of Raw Data应该相等。若虚拟大小【约定分配大小】比原始数据大得多意味着加壳代码的存在
  • PEview中查看头部分节信息
  • Resource Hacker工具用来查看资源节(.rsrc)
  • PEBrowse Professional:查看每个分节中的字节并显示出解析后的数据
  • PE EXplorer:可以浏览PE文件的各个部分,编辑PE文件的特定部分

image.png