21.1 流氓软件

  • 定义:处在合法商业软件和电脑病毒之间的灰色地带。既有一定的实用价值,也会给用户带来种种干扰。往往采用特殊手段频繁弹广告、捆绑安装软件、窃取用户隐私等。
  • 常见行为
    • 强制/静默/捆绑安装
    • 难以卸载和清除,卸载后自我修复
    • 强行修改系统设置,如浏览器设置、自启动等
    • 强行弹出广告
    • 秘密收集用户信息和隐私

21.2 勒索软件

  • 定义:勒索软件(Ransomware)是黑客用来劫持用户资产或资源 并以此为条件向用户勒索钱财的一种恶意软件
  • 支付方式发展
    • 邮寄赎金
    • 银行汇款
    • QQ联系支付(国内)
    • 比特币(虚拟货币的出现,很大程度上加速了勒索软件的泛滥)

21.3 64位恶意代码

  • 为什么需要64位恶意代码
    • 内核代码。
      • 所有运行在64位操作系统 中的内核代码必须是64位的。由于rootkit经常 运行在内核中,所以那些以64位操作系统为目标的 rootkit必须编译成64 位机器码
    • 插件和注入代码 插件和注入代码必须是64位的,以便在64位进程中正确运行。
      • 例如,假如恶意代码要注入的目标进程是64位的,注入 的代码也必须是64位的
    • shellcode
      • 要想利用一个在64位版本Internet Explorer中的漏洞,必须编写64位 shellcode
  • Windows 64位架构与32位架构上的差别
    • 所有的地址和指针都是64位的。
    • 所有的通用寄存器,包括RAX、RBX、RCX等,在大小上都有所增长。
    • 有些通用寄存器(RDI、RSI、RBP,以及RSP)通过添加一个L后缀到它们的16位版本,被扩展成支持访问单个字节。例如,BP通常访问RBP的 低16位;BPL访问RBP的最低8位。
    • 特殊目的寄存器是64位的,并且改名了。例如RIP是64位指令指针。
    • 通用寄存器的数目翻了一番。新的寄存器被标记为R8到R15。这些寄 存器的DWORD(32位)版本 可以通过R8D,R9D等来访问。WORD(16位) 版本通过一个W后缀来访问(R8W、R9W等),并且字节版本通过一个L 后缀来访问(R8L、R9L等)。
    • x64也支持相对指令指针的数据寻址。在x86汇编中,想要通过一个不是相对某个寄存器的偏移位置来访问数据时,必须存储整个地址,这 叫作绝对寻址。但是在x64汇编中,你可以通过当前指令指针寄存器的偏移位置来访问数据,称为RIP-相对寻址。
  • x64调用约定和栈使用的差别
    • 在32位代码中,栈空间可以在函数中间使用push和pop指令分配和释放。然而,在64位代码中,函数不能在函数体的中间分配任何空间,无论是push指令,还是其他栈操作指令。
    • 对恶意代码分析而言,64位代码中函数缺乏push和pop指令,会使一个分析师更难判断一个函数有多少个参数,64 位汇编中,没有清晰的 方式来区分数据是移动到一个局部变量 中还是移动到一个被调用函数参数中
  • Windows 64位上的Windows 32位
    • 微软开发了一个子系统,叫作Windows 64位上的Windows 32位(WOW64),用来允许32位应 用程序在64位机器上正确地执行。
    • 64位二进制保存在System32目录中。对32位应用来说,这个目录被重定向到WOW64目录(64位二进制在System32目录中,而32位二进制却 在WOW64目录)。因此,在分析运行一个64位系统上的32位恶意代 码时,如果你发现它写一个文件到 C:\Windows\System32,那么你可 能需要到C:\Windows\sysWOW64中去找到那个文件。
    • 对访问HKEY_LOCAL_MACHINE\Software注册表键的32位应用而言,存在另一个重定向,对该注册表键的访问被映射到 HKEY_LOCAL_MACHINE\Software\Wow6432Node。
    • 32位应用通常并不知晓它们运行在WOW64上,但是一些机制允许这些应用看到WOW64环境。应用程序可以通过访问 C:\Windows\Sysnative进入真实的System32目录,即使当System32被重 定向到WOW64。
      21.3.jpg