基本信息
样本分析
第1层
第一层是单个隔离器
第一层
第2层
第三层在第二层之后,偏移0x3F0处
第二层
第三层偏移
第2层取消原始dll内存映射,并将第三层dll映射到原始dll内存空间,并从入口点执行
第3层
从第3层开始,每个子程序都被视为一个状态机,并且以循环的形式实现。状态机是一种计算模型,它可以根据输入和当前状态转移到不同的状态。将子程序实现为状态机意味着程序的执行不是直线性的,而是根据某些条件在不同状态之间跳转,这大大增加了理解和分析程序的难度。
值表的解密
在每个子程序开始时,都会解密一个值表。这个值表作为常量值的容器,用于子程序中,同时也作为状态转移表。这意味着,程序执行的具体逻辑(包括状态转移)依赖于这个动态解密的值表,而不是静态编码在程序代码中。这种做法进一步隐藏了程序的真实逻辑和执行路径。
隐藏对其他子程序的调用
描述中提到的另一种混淆技术隐藏了对其他子程序的调用。在常规程序中,调用另一个子程序时,被调用的子程序地址直接出现在 call 指令中。然而,在这种混淆的恶意软件中,被调用的地址是通过硬编码的值和前面提到的解密值表中的值计算得出的。这个计算结果被放置在一个寄存器中,然后使用该寄存器进行间接调用。这种方法使得静态分析工具很难确定哪个子程序会被调用,因为调用目标的确定需要执行时间的动态计算。
第4层
第5层
使用不同的 RC4 密钥来解密下一阶段,以防恶意软件检测到它没有在物理计算机上运行
第8层
在第 8 层,执行分为两条路径。如果恶意软件检测到它正在被分析,它就会加载虚假的有效负载。否则,它将加载真正的有效负载。
其他
第 3 层和第 5 层具有反分析技术的能力
第4层和第7层相同
第10层和第13层相同
第8层和第14层相同
重复使用加壳程序意味着该组织正在使用单独的加壳程序。我们正在继续分析,看看这个程序是他们自己的还是外包给其他组织的,因为这种技术可以表明该组织未来对这些相同加壳器的使用。这些相同的封隔器也可以用不同的图案来替换。