尝试使用 IDAPython 将缓冲区解析为 PE

逆向工程 蟒蛇 聚乙烯 idapro-sdk ida插件
2021-06-15 14:12:33

file_buffer = requests.get(file_url)

buf_size = len(file_buffer)

pe_file = pefile.PE(data=file_buffer)

print("这真的是一个 pe imphash %s。" % pe_file.get_imphash())

addr = hex(id(file_buffer))

print("PE 起始内存在 %s 长度为 %d。" % (addr, len(file_buffer)))

new_loader = ida_idaapi.loader_input_t()

mem_inp = ida_diskio.create_memory_linput(addr, buf_size)

1个回答

经过一段时间的研究,我找到了一种在 CPP 中而不是在 python 中的方法。

https://github.com/SentineLabs/Memloader/blob/main/MemoryLoader/MemoryLoader/MemoryLoader.cpp

处理从缓冲区到内存加载 PE 的代码中最相关的部分:

void destroy_linput(linput_t* li)
{
    close_linput(li);
}

linput_t* create_linput(std::vector< bit7z::byte_t >& file_buffer)
{
    return create_bytearray_linput(file_buffer.data(), file_buffer.size());
}

void destroy_linfos(load_info_t* linfos)
{
    free_loaders_list(linfos);
}

load_info_t* create_linfos(linput_t* li)
{
    return build_loaders_list(li, "");
}

const unique_ptr_s1<linput_t, destroy_linput> li2{
  create_linput(file_buffer)
};
        
const unique_ptr_s1<load_info_t, destroy_linfos> linfos{
  create_linfos(li2.get())
};