我需要分析恶意软件模块的内存转储,不幸的是该示例不是原始dll,而是内存中的dll转储。

现在修复sections headers非常容易-我只需要使Virtual address \ sizeRaw address \ size匹配,因为这是PE一次加载到内存后的内容(转储的情况是这样)

但是现在有一个不同的问题,当我打开文件时例如IDA-PRO,内存未正确对齐,因此分析不正确,并且并非所有具有相对地址的call函数都能正常工作(它们未指向正确的位置-或在PE大小方面有意义的位置) />
我觉得在ida上重新建立PE的解决方案是不完整的,并且无法按照我的需要进行修复。
我也想修复PE,以便可以动态加载后来用ollydbg(好像我有原始的一样)

所以我的问题是:
您如何建议我固定PE头ers并重新整理程序,以便我可以成功加载它?对于VirusTotal-Intelligence用户,示例MD5为:
3bb85abe51b0f96f501d2bb32ec4edef
SHA256:
83c95637712cacc0f28028046546575 />
示例:
https://www.hybrid-analysis.com/search?query=vxfamily%3AGen:Variant.Terkcop

2015_12_08_ExtraInfo:
@ ubnix,我尚未阅读您发送给我的材料的内容,但我非常了解IAT的重要性-顺便说一句,这正是将文件加载到IDA上时的问题。

dll的加载地址为0x10000000(因此,每个段的加载地址均为0x10001000-分别取决于大小,依此类推,分别为0x10000000和转发。)

恶意软件的代码期望IAT位于0x05320000,显然不是这样。当我尝试使用IDA-PRO更改IAT段的位置时(如果我记得,请按Ctrl + S或ALT + S),这使我的IDA客户端崩溃。

显然,更改地址只能作为在IDA pro上静态查看恶意软件的临时解决方案,而不能作为通过ollydbg运行恶意软件的解决方案。如果我想使用olly运行恶意软件,则需要以某种方式使dll在0x5320000的正确地址下运行。将PE的BaseAddress从0x10000000更改为我想要的地址时(使用CFF)资源管理器),它仍在ollydbg处以0x10000000加载。.不知道为什么

Edit2 2015_12_15:
示例示例我“修复”了他的标题,但仍无法正常工作(所有CRT功能都存在问题)

原始示例:
https://www.hybrid-analysis.com/sample/53dd790b1bd0588e542d33bde49dbf33c6fb7828e91a8d13c416c831108d642c?environmentId=1

我已修复示例:
https://www.dropbox.com/s/6dz7athzdja94p4/53_fixed_rebase.dll?dl=0

请注意,这两个文件都是恶意软件的示例,可能会引起防病毒警报。诸如“ Init operation”(类似c ++类初始化)之类的功能失败。

#1 楼

这将是一个评论,但是由于我仍然没有足够的声誉来发表评论,因此我将其保留为答案:

为使转储正常工作,您还需要一些其他事项除了固定节标题外,还可以执行以下操作:


遍历数据目录并确保它们都指向正确的表
一旦确定数据目录指向正确的位置确保进出口固定(在所有其他使用的表中!)。确切地说,您需要确保导入地址表(IAT)和导出地址表(EAT)正确。如果像IAT和EAT这样的概念对您来说是陌生的,我建议您在“ .idata节”和“ .edata节”下阅读正式PE文件格式规范中的那些表。
此外,因为这个问题与PE文件格式密切相关,建议您阅读以下文档:深入了解Win32便携式可执行文件格式第1部分和深入了解Win32便携式可执行文件格式第2部分


我知道我刚刚发布了许多材料以供阅读,但相信我,我是从我的亲身经历中谈论的,如果您想了解PE文件格式和操作步骤,这些资源是必需的正确转储PE文件。如果您还有其他问题,请写信询问,我会尽快答复。

评论


我更改了我的问题,并添加了有关该问题的更多信息

– 0xAK
15年12月8日在16:30

@ RE-Beginner:DLL通常在启用ASLR的情况下进行编译。检查IMAGE_FILE_HEADER中的“特征”字段以查看它是否包含IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE标志。这意味着DLL将被加载到内存中的随机地址上,并且要使其正常工作,必须指定并纠正重定位表。那么,您的恶意软件样本中是否指定了重定位表?

– ubnix
2015年12月9日在9:06

不,不是这样,我的可逆环境也是在Windows XP上设置的,所以它不会影响我

– 0xAK
2015年12月10日在7:02

@ RE-Beginner:您可以上传示例吗?

– ubnix
2015年12月10日在9:09

是的,我已经添加了一种在我的消息hybrid-analysis.com/search?query=vxfamily%3AGen:Variant.Terkcop上下载示例的方法

– 0xAK
2015年12月10日在9:40

#2 楼

在hexeditor中打开转储的文件,说hxd
从偏移量0x400 to 0xfff中选择字节并删除它们
all the bytes would be 0x00
保存导入的文件,结果应该可以确定通常为0x400
,但是由于这是一个内存,正如您所说的pe标头将为0x1000字节,因此删除多余的字节应将文本段以及入口点对齐到正确的位置

在其他部分中还有任何未对齐的地方,您可能需要根据size of raw data + pointer to raw data修剪额外的00000字节,这通常应与下一节中指向原始数据的指针匹配

评论


我通常会做的,而不是删除零字节,是更改为PE标头以匹配该额外的偏移量-因此,不是将原始大小设置为0x400,而是将其更改为0x1000,这样可以解决问题(到目前为止)我还没有尝试您的建议,但是我认为没有什么不同!稍后会返回结果

– 0xAK
2015年12月13日在7:29

任何想法,为什么只有crt函数不能在ollydbg上正常工作?

– 0xAK
15年12月17日在7:34

您无法编写一个针对给定文件自动执行的示例应用程序吗?

–T.Todua
4月10日上午11:21