对DOTNET(.NET)中的恶意远程访问进程进行分析(上)
DOTNET背景知识介绍
DOTNET就是.NET, 严格说是:.Net Framework框架 。但为什么叫DOTNET(.NET)呢?在计算机行业DOT是Distributed Object Technology的简称,意为分布式对象技术。DOT恰好与“点”的英语单词相同,DOT的音标[dɔt]。.NET是一个微软开发的编程环境,里面可以使用C#,VB等多种编程语言。
借助于.NET平台,可以创建和使用基于XML的应用程序、进程和Web站点以及服务,它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能,以向单位和个人提供定制好的解决方案。
.NET是一个全面的产品家族,它建立在行业标准和Internet标准之上,提供开发(工具)、管理(服务器)、使用(构造块服务和智能客户端)以及 XML Web 服务体验(丰富的用户体验),.NET将成为你今天正在使用的Microsoft应用程序、工具和服务器的一部分。.NET目前的版本共有:
1.2003年的 .net 1.0 1.1;
2.2005年的 .net 2.0;
3.2008年的 .net 3.0 3.5;
4.2010年的 .net 4.0;
5.2011年的 .net 4.1;
6.2015年的 .net 4.6;
在本文中,我们会对DOTNET(.NET)中的恶意远程访问工具进行分析,本文所讲的RAT样本可以在VirusBay上找到。此外,这是一个本地镜像。 为了在对样本讲解时,避免发生恶意执行,这个压缩文件的密码已被加密。不过,我可以给出一些简单的样本信息。
MD5: 5a762e5381d28524d554499a2337ae34
SHA-1: c24ce7b94588a08f4a9ddfc8554ad419f1a641d9
SHA-256: 6451dad939c9bdab292445db5668deb2059d524dcfc97fa2216c4736a2c0f3e4
File type: application/x-dosexec
File size: 605.5 KB
Detection rate: 26 / 67
编辑代码
在编辑代码时,有些人可能更喜欢IDE(Integrated Development Environment,集成开发环境),不过在本文所举的样本中,既可以使用Visual Studio,也可以使用dnSpy(dnSpy 是0xd4d 开发的 .NET 程序调试神器。说它是神器真的毫不为过!它能在完全没有源码的情况下即时调试程序,甚至还能修改程序!)中的编辑功能,只要能够完成分析即可。在本文的实操中,我使用的是由dnSpy生成的导出项目。为了打开、编辑和执行这些项目,我使用了Visual Studio 2017 Community Edition。要使用这种方式,我就不得不修改某些部分的代码,以保持反编译代码的可执行性。如果你使用的是不同的工具,则可能需要对配置进行不同的更改,这点很重要。
加载程序——第1阶段
二进制文件使用了.NET编写,dnSpy在选择LJFES.exePTX.exe时针对的是特定的.NET版本,信息如下所示。
Runtime: .NET Framework 2.0
注意,二进制文件还同时给出了应用程序的入口点,这是分析的起点。请注意,名称空间和类以及方法都是给定的。
ZTXNOIRBCXBXUMZRCRBVONMOE.CUCIZZCCOCRRXIIOZIOOEIRCUITOT.Main
主函数会调用很多函数,几乎所有函数都被存储在同一个类中。这其实是攻击者采用的一种混淆形式。此外,由于名称不可读,这些名称也被混淆了。完整的主函数如下所示,然后在后面的分析中,我们会使用一个简化了的版本。
public static void Main(string[] BNCONUTZUNZVBXZBCXCXNVIRCUXRBVRMRIUIVOIEZIMCVIZVCUZEXIUVBIBMCNCCTNMVUROMXBICBZBEIIUTMTEZBERBMRVVENVMEMTE){
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.QHJFMHF(38631, 98479);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.SNQBXWTXMUKB(new byte[53106]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.PUYFLGGDOAYJ(121312, 86355);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.LMQIIMGGOR(new byte[12476]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.GFJCCSOR(26136, 49680);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.UJFSXGAZQMBM(new byte[130305]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.UTAUPRBKY(61078, 60438);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.KDBCANTHNL(new byte[67947]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.GUPPZKMOUTHS(48613, 111162);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.SWWFQBCVE(new byte[68443]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.FMLAZRZYNVOG(50291, 77251);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.ZJMQXDLXT(new byte[92735]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.YFXJVV(29395, 92506);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.QUSDTFXR(new byte[79830]);
byte[] array = (byte[])new ResourceManager("CIUUMCBVZROMITOIVM", Assembly.GetExecutingAssembly()).GetObject("CIIVMOCZIUEZBIBMECURIIXRXROXR");
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.AXNFFLXLOSIA(63805, 46381);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.ABDLEDZAXPI(new byte[28547]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.FIYHHBBYKAQO(1077, 107426);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.WVNGHSRNNRW(new byte[7210]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.YMFKLGT(84717, 131741);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.DUGKLHAIZSIC(new byte[112375]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.GSMNUCDDYP(26809, 96205);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.RXLHFDN(new byte[70296]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.IIYFVXDCL(110008, 123655);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.YCIFEQTKIMBH(new byte[66557]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.XPJPEETESWNQ(85352, 44300);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.FRRNVGVUPKAK(new byte[26150]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.JTHDUJAD(70044, 102451);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.LXJKMUOUETOB(new byte[33786]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.KGNXTBFTLZ(126533, 49848);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.CLQMOSHU(new byte[57574]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.OYDCPYBAAAE(86430, 64473);
byte[] array2 = cunkai.notin("BVTZNORUIRCENBVRNXNTBNOVZTINBRRTZNECCUXOUTNMZMCEIRUOOZONUOEORMBTZNRENZU");
DOTNET背景知识介绍
DOTNET就是.NET, 严格说是:.Net Framework框架 。但为什么叫DOTNET(.NET)呢?在计算机行业DOT是Distributed Object Technology的简称,意为分布式对象技术。DOT恰好与“点”的英语单词相同,DOT的音标[dɔt]。.NET是一个微软开发的编程环境,里面可以使用C#,VB等多种编程语言。
借助于.NET平台,可以创建和使用基于XML的应用程序、进程和Web站点以及服务,它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能,以向单位和个人提供定制好的解决方案。
.NET是一个全面的产品家族,它建立在行业标准和Internet标准之上,提供开发(工具)、管理(服务器)、使用(构造块服务和智能客户端)以及 XML Web 服务体验(丰富的用户体验),.NET将成为你今天正在使用的Microsoft应用程序、工具和服务器的一部分。.NET目前的版本共有:
1.2003年的 .net 1.0 1.1;
2.2005年的 .net 2.0;
3.2008年的 .net 3.0 3.5;
4.2010年的 .net 4.0;
5.2011年的 .net 4.1;
6.2015年的 .net 4.6;
在本文中,我们会对DOTNET(.NET)中的恶意远程访问工具进行分析,本文所讲的RAT样本可以在VirusBay上找到。此外,这是一个本地镜像。 为了在对样本讲解时,避免发生恶意执行,这个压缩文件的密码已被加密。不过,我可以给出一些简单的样本信息。 copyright 无奈人生
MD5: 5a762e5381d28524d554499a2337ae34
SHA-1: c24ce7b94588a08f4a9ddfc8554ad419f1a641d9
SHA-256: 6451dad939c9bdab292445db5668deb2059d524dcfc97fa2216c4736a2c0f3e4
File type: application/x-dosexec
File size: 605.5 KB
Detection rate: 26 / 67
编辑代码
在编辑代码时,有些人可能更喜欢IDE(Integrated Development Environment,集成开发环境),不过在本文所举的样本中,既可以使用Visual Studio,也可以使用dnSpy(dnSpy 是0xd4d 开发的 .NET 程序调试神器。说它是神器真的毫不为过!它能在完全没有源码的情况下即时调试程序,甚至还能修改程序!)中的编辑功能,只要能够完成分析即可。在本文的实操中,我使用的是由dnSpy生成的导出项目。为了打开、编辑和执行这些项目,我使用了Visual Studio 2017 Community Edition。要使用这种方式,我就不得不修改某些部分的代码,以保持反编译代码的可执行性。如果你使用的是不同的工具,则可能需要对配置进行不同的更改,这点很重要。
加载程序——第1阶段
二进制文件使用了.NET编写,dnSpy在选择LJFES.exePTX.exe时针对的是特定的.NET版本,信息如下所示。
Runtime: .NET Framework 2.0
注意,二进制文件还同时给出了应用程序的入口点,这是分析的起点。请注意,名称空间和类以及方法都是给定的。
ZTXNOIRBCXBXUMZRCRBVONMOE.CUCIZZCCOCRRXIIOZIOOEIRCUITOT.Main
主函数会调用很多函数,几乎所有函数都被存储在同一个类中。这其实是攻击者采用的一种混淆形式。此外,由于名称不可读,这些名称也被混淆了。完整的主函数如下所示,然后在后面的分析中,我们会使用一个简化了的版本。
public static void Main(string[] BNCONUTZUNZVBXZBCXCXNVIRCUXRBVRMRIUIVOIEZIMCVIZVCUZEXIUVBIBMCNCCTNMVUROMXBICBZBEIIUTMTEZBERBMRVVENVMEMTE){
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.QHJFMHF(38631, 98479);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.SNQBXWTXMUKB(new byte[53106]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.PUYFLGGDOAYJ(121312, 86355);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.LMQIIMGGOR(new byte[12476]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.GFJCCSOR(26136, 49680);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.UJFSXGAZQMBM(new byte[130305]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.UTAUPRBKY(61078, 60438);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.KDBCANTHNL(new byte[67947]); 内容来自无奈安全网
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.GUPPZKMOUTHS(48613, 111162);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.SWWFQBCVE(new byte[68443]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.FMLAZRZYNVOG(50291, 77251);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.ZJMQXDLXT(new byte[92735]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.YFXJVV(29395, 92506);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.QUSDTFXR(new byte[79830]);
byte[] array = (byte[])new ResourceManager("CIUUMCBVZROMITOIVM", Assembly.GetExecutingAssembly()).GetObject("CIIVMOCZIUEZBIBMECURIIXRXROXR");
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.AXNFFLXLOSIA(63805, 46381);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.ABDLEDZAXPI(new byte[28547]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.FIYHHBBYKAQO(1077, 107426);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.WVNGHSRNNRW(new byte[7210]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.YMFKLGT(84717, 131741);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.DUGKLHAIZSIC(new byte[112375]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.GSMNUCDDYP(26809, 96205);
内容来自无奈安全网
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.RXLHFDN(new byte[70296]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.IIYFVXDCL(110008, 123655);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.YCIFEQTKIMBH(new byte[66557]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.XPJPEETESWNQ(85352, 44300);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.FRRNVGVUPKAK(new byte[26150]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.JTHDUJAD(70044, 102451);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.LXJKMUOUETOB(new byte[33786]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.KGNXTBFTLZ(126533, 49848);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.CLQMOSHU(new byte[57574]);
CUCIZZCCOCRRXIIOZIOOEIRCUITOT.OYDCPYBAAAE(86430, 64473);
byte[] array2 = cunkai.notin("BVTZNORUIRCENBVRNXNTBNOVZTINBRRTZNECCUXOUTNMZMCEIRUOOZONUOEORMBTZNRENZU");
内容来自无奈安全网