恶意代码分析小技巧-dump文件修复

恶意代码分析小技巧-dump文件修复

跟着大佬得文章进行dump,修复对应区段,继续分析的时候出现了下图所示的问题,,有些地址上的数据是红色的,查了下是重定位错误

在这里插入图片描述
对重定位修复后,如下图所示:
在这里插入图片描述

dump修复流程

1.在Xdbg中,内存布局 中找到需要dump的地址,选中右键选择将内存转存到文件
在这里插入图片描述
2. dump后的文件使用CFF打开,选择Section Headers ,如下图所示,需要对Raw Address 和 Raw Size对应的数据进行修改,因为文件是从内存中dump出来的,在内存中属于展开状态
在这里插入图片描述
3. 使用Virtual Address替换所有的Raw Address,使用Virtual Size按照0x1000对齐后替换所有的Raw Size,替换完成后如下所示:
在这里插入图片描述
4.使用IDA打开修复Sections后的文件,如下图所示,但是查看发现存在红色数据,也就是错误数据,如下图,排查发现都是重定位表中的数据
在这里插入图片描述
5.修复重定位表,利用python脚本修复,脚本和修复过程中打印信息如下

#coding:utf-8
import pefile
import struct
def read_data_at_address(file_path,dump_base,data_size):
    reloc_rvas,image_base = get_rvas(file_path)
    with open(file_path, "r+b") as file:
        # 将文件指针移动到指定地址
        for reloc_rva in reloc_rvas:
            file.seek(int(reloc_rva, 16))
            # 读取指定大小的数据
            data = file.read(data_size)
            dqword = struct.unpack('<Q', data)[0]
            # 计算新数据
            new_data = dqword - dump_base + image_base
            file.seek(int(reloc_rva, 16))
            # 将计算得到的新数据写入
            file.write(struct.pack('<Q', new_data))
            print("rva = [{}]  :  old data = [{} ] ==> new data [{}]".format(reloc_rva,hex(dqword), hex(new_data)))

def get_rvas(filename):
    pe = pefile.PE(filename)
    image_base = pe.OPTIONAL_HEADER.ImageBase
    relocation_rvas = []
    for section in pe.DIRECTORY_ENTRY_BASERELOC:
        for sec in section.entries:
            rva = hex(sec.rva)
            relocation_rvas.append(rva)
    return relocation_rvas,image_base

def main():
    filename = "./rundll32_0000000002D70000.bin"
    read_data_at_address(filename,0x2D70000,0x8)

if __name__ == "__main__":
    main()

在这里插入图片描述
6.修复完成后的文件拖入IDA进行分析,查看重定位数据位置,如下图所示,修复完成,可正常分析

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值