0

我会通过声明我是一个大三的恶意软件分析师,我希望有人谁已编程/分析头可以有一些建议,以启动这一问题。自定义命名的PE文件和头

通常,当编译器将.exe放在一起时,您会看到.text,.data,.rdata,.rsrc等......但作者如何去模糊这些名称以混淆执行静态分析的人?

回答

1

据我所知,这些只是部分的名称和一些加壳喜欢UPX改变这些名称UPX0或别的东西,但这些其实并不重要,因为它们只是名字,你可以把它改成什么你要。 PE文件中的重要信息包括这些部分的地址。您可以在here中阅读有关PE文件的更多信息。这是一个关于体育教育结构的非常好的教程。这也是我读过的有关PE文件的最佳教程(here

1

dumpbin visual studio实用程序可与/HEADERS参数配合使用来查看所有节标题。您可能会感兴趣的会是这个样子的输出部分:

 
SECTION HEADER #1 
    .text name 
    1000 virtual size 
    1000 virtual address (00401000 to 00401FFF) 
    200 size of raw data 
    200 file pointer to raw data (00000200 to 000003FF) 
     0 file pointer to relocation table 
     0 file pointer to line numbers 
     0 number of relocations 
     0 number of line numbers 
60000020 flags 
     Code 
     Execute Read 

正如你可以看到它的名字命名为“的.text”这个特定的exe的代码段。这部分可被限制,只要其符合对Microsoft specification重命名为任何内容:

对于[名称大于8个字节],此字段包含后跟一个十进制的ASCII表示一斜杠(/)数字是字符串表中的偏移量。可执行映像不使用字符串表,并且不支持长度超过8个字符的段名称。

有几种方法可以找到某个部分的名称,而不管名称如何。

对于.text段他们将需要至少Execute标志置位。而.text部分的虚拟地址应该与可选标题中定义的入口点相同。

导入部(通常命名的.idata)必须具有其地址在目录的阵列附带在可选的报头的末端的第二元件设置。再次查看一部分dumpbin输出:

 
    2 number of directories 
    0 [  0] RVA [size] of Export Directory 
2000 [  0] RVA [size] of Import Directory 

在这种情况下.idata节开始于虚拟地址0x2000。此外,此部分至少需要Read标志。

甲.data段可能更难以追查。与导入部分一样,它至少必须设置Read标志,但要确保您可以扫描.text部分以获取将数据移入或移出地址的操作码。该地址应位于其中一个数据部分,您可以通过查看可选标题中的部分对齐来找到该部分的开头。
例如,如果您发现68 17 32 40 00转换为PUSH 0x00403217并且段对齐为0x1000,则.data段的起始位置可能为0x3000(其中0x00400000是图像库)。

1

据我所知,这些名字并不重要,可以是任何东西。加载器查看标题和节标志以及其他数据以了解程序需要多少内存,哪里(如果没有重定位),哪些部分需要可执行,哪些可写,哪些可读等等。加载器负责处理这些事情,并执行其他操作,如重定位和绑定DLL。您可以只有一个部分包含大部分内容,代码,常量数据,非常量数据,导入信息。例如,我的编译器收集了.data下的所有数据和导入信息。目前最多有3个不同的部分产生:.text,.data,.reloc(重定位是可选的,顺便说一句),Windows很高兴。

真正的模糊应该在编译好的机器代码的不同层次上完成,它在做什么以及如何做。例如。使用代码作为数据,反之亦然,使用自修改或在运行时代码中生成代码,使用手动编写的代码,这些代码会导致异常并将执行转移到异常处理程序中,所有那些难以正确执行的事情或者如果您没有实际执行代码(奖励点:调试器下的不同执行)。人们还可以插入相当多的代码,这些代码基本上什么都不做,只是令人困惑并增加了代码的复杂性。人们也可以利用分析工具中的缺陷和限制,例如做一些非常规的事情,使用数字太大,并会导致计算溢出。而在互联网时代,该程序可能不完整,可能会在运行时从互联网上下载缺失的部分。有趣!