我将PortEx Java library for PE32 parsing与Capstone反汇编程序一起使用,我希望能够让反汇编代替deployedApp = getMBean('/Partitions/'+${partition}+'/ResourceGroups/'+${resource_group}+'/AppDeployments/'+appName>)
行{{1} }}。为此,我需要从导入表导入。我能够获取DLL名称和函数,但PortEx报告的地址很远,例如:penet Python模块报告的0x32E8与0x402004。我尝试将一些偏移视为PortEx中call 0x404040
,call SomeDLL:TheFunc
和ImportSection
类的一部分,但它并未接近。任何想法?
ImportDLL
我希望能够从汇编代码中获取地址,看看它是否在NameImport
中,如果是,请将地址替换为{{1}中的值}}
答案 0 :(得分:1)
来自作者:
public static Map<Integer,String> extract(PEData exe) throws IOException {
Map<Integer,String> importList = new HashMap<>();
SectionLoader loader = new SectionLoader(exe);
ImportSection idata = loader.loadImportSection();
List<ImportDLL> imports = idata.getImports();
for(ImportDLL dll : imports) {
for(NameImport nameImport : dll.getNameImports()) {
long iat = nameImport
.getDirEntryValue(DirectoryEntryKey.I_ADDR_TABLE_RVA);
long ilt = nameImport
.getDirEntryValue(DirectoryEntryKey.I_LOOKUP_TABLE_RVA);
long imageBase = exe.getOptionalHeader().get(
WindowsEntryKey.IMAGE_BASE);
long addr = nameImport.getRVA() + imageBase;
if(ilt != 0) addr = addr - ilt + iat;
System.out.format("0x%X\t%s:%s%n", addr, dll.getName(), nameImport.getName());
importList.put((int)addr, dll.getName() + ":" + nameImport.getName());
}
}
return importList;
}