恶意程序分析 | 去除恶意程序混淆

  • A+
所属分类:逆向工程
恶意程序分析 | 去除恶意程序混淆

本文为看雪论坛优秀文章

看雪论坛作者ID:天象独行



一  何为混淆


混淆说白了就是恶意程序的作者自己发明的一种壳。它会将想要隐藏执行的PE文件经过加密以后植入自身内部,当自身运行的时候,对其执行解密操作并执行,于是就达到了隐藏运行的目的。



二  如何去除混淆


2.1 去除混淆原理
 
恶意程序在解密去除混淆的过程中,一定会需要分配一个内存空间,那么可以在分配空间的函数下断点(例如:VirtualAlloc)。然后在带程序解密完成之后dump 出来。这样,我们就可以找出恶意程序的本体了。

2.2 案例调试

   
利用OD程序打开软件,并且在函数VirtualAlloc里面下断点。之后F9运行程序,程序会自动断在VirtualAlloc()位置。
恶意程序分析 | 去除恶意程序混淆
这里我们发现,它存在多个断点位置(VirtualAlloc多次调用),一般判断是否是解密混淆所需要的空间,可以通过划分的虚拟空间大致猜测判断。如下地址“7C809A81”划分空间224,一般意义的PE程序不会这么小,即排除。

恶意程序分析 | 去除恶意程序混淆

地址“7C809AA2”划分空间903680,则很有可能是一段PE程序需要的空间。

恶意程序分析 | 去除恶意程序混淆

接下来,我们将光标定位到“7c809a99”,该位置是刚好执行完VirtualAlloc。执行完之后,将申请的空间地址返回至寄存器EAX。
恶意程序分析 | 去除恶意程序混淆
我们在“D00000”位置下硬件断点。之后执行程序,程序会断在试图修改该内存空间的位置。
恶意程序分析 | 去除恶意程序混淆
程序在如下位置,再次断开,经过分析,该段程序指令得作用,就是将混淆文件,加载到“D00000”位置。
恶意程序分析 | 去除恶意程序混淆
继续程序运行,至如下图位置,这个时候我们发现PE程序已经加密完成。
恶意程序分析 | 去除恶意程序混淆
导出程序本体(备份-保存数据到文件)。

恶意程序分析 | 去除恶意程序混淆



三  分析混淆程序

  

首先,我们已经知道了,混淆程序执行了是两个功能:1、将程序复制到“D00000”位置;2、将"D00000"位置得程序解密。接下来,我们来分析,它是如何做到这两个功能的。

    

3.1 复制程序

    
我们先通过OD将程序定位到地址“0012F9D6”位置。这个时候,我们通过初步的单步执行,发现整个复制程序就在12f9cd~12f9f6之间循环。
恶意程序分析 | 去除恶意程序混淆
通过初步观察,我们得到如下信息:

  • 在“12F9D3”位置,我们发现,该程序指令就是将数据放入“D00000”位置得指令,即拷贝目标地址在该程序中使用得是[eax+edi]表示的。
  • 由“12F9CD~12F9D3”位置我们发现,拷贝源是使用[ebp+ecx*4-0x54]来表示的。我们来看表达式ebp+ecx*4-0x54,很明显知道,随着ecx寄存器得值得变化,这将是一个偏移四个单位的变化。
  • “12F9D6~12F9DE”位置指令,我们发现,在将[ebp+ecx*4-0x54]的值放入目标地址当中之后,会立刻指向[ebp+ecx*4-0x54]下一个位置的值。
  • “12F9E2~12F6E6”这些指令的作用是,ecx的值加一,用来表示循环的次数,通过cmp的比较,我们知道,它会循环8次。并且会将值放入[ebp-0x8]位置存储,方便之后重新调用。
  • “12F9F0~12F9F6”我们知道,[ebx+0x10]位置保存的值是复制程序的大大小,DEI当中的值就是用来限定复制多少进入目标地址。
    
好了,经过分析,其实,我们大概知道了,复制的原理。大致如下:

第一轮复制,是将地址“12F66C~12F688”位置的值(间隔四个单位)作为地址,然后寻找内容然后放入目标空间,执行完成之后,立刻将12F66C~12F688”位置的值加一,用来表示第二个值。如此循环。
恶意程序分析 | 去除恶意程序混淆
逻辑图如下:
    
源数据内容:


恶意程序分析 | 去除恶意程序混淆

目标数据内容:

恶意程序分析 | 去除恶意程序混淆

    

3.2 解密程序

    
接着上面,我们继续F9,让他再次断点下来,(之前,我们在“D00000”位置下的断点,在解密的步骤中一定会再次涉及该位置,所以直接断点就可以),我们发现程序再次停在如下位置。
恶意程序分析 | 去除恶意程序混淆
们从“12FA08”位置开始查看,因为在下面“12FA2E”位置处的一个jb 指令的位置就是“12FA08”。我们有理由怀疑这是循环解密的程序。

程序首先是将[ebp-0x8]位置的值放入寄存器EDI当中,我们发现该位置的值为0,结合下面“12FA13~12FA14”位置指令inc edi cmp edi,0xf 。可以合理地推测edi 在这里是扮演的一个计时器的角色。
恶意程序分析 | 去除恶意程序混淆
紧接着,“12fa08~12fa0e”执行异或操作,结合edi的计数器,我们可以想到在[edi+ebx]位置,16个数字依次参与运算。
恶意程序分析 | 去除恶意程序混淆
[eax+edx]值的位置就是目标地址“D00000”。dl 的值即为相对“00D0 0000”的偏移。
恶意程序分析 | 去除恶意程序混淆
总结:
  • 程序通过两次异或来解密。
  • 第一次异或是从“D00000”原始数据,以行为单位,以16个数据为一组,分别与0x0053FA20中的0x0F个数据分别进行异或操作。
  • 第二次异或,是将刚才的这个异或结果与它所在的位置偏移进行异或,位置偏移只取最低一个字节的内容。于是就得到了最终的PE文件。



恶意程序分析 | 去除恶意程序混淆


看雪ID:天象独行

https://bbs.pediy.com/user-home-911429.htm

  *本文由看雪论坛 天象独行 原创,转载请注明来自看雪社区。


恶意程序分析 | 去除恶意程序混淆
《安卓高级研修班》2021年秋季班火热招生中!



# 往期推荐





恶意程序分析 | 去除恶意程序混淆
公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]



恶意程序分析 | 去除恶意程序混淆

球分享

恶意程序分析 | 去除恶意程序混淆

球点赞

恶意程序分析 | 去除恶意程序混淆

球在看



恶意程序分析 | 去除恶意程序混淆

点击“阅读原文”,了解更多!

本文始发于微信公众号(看雪学院):恶意程序分析 | 去除恶意程序混淆

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: