导入函数断点: 实现原理和OD好像是一样的(): struct Im_F{ DWORD DataAddress; //address in .text DWORD IdataAddress; //address in .idata std::string NameOfDll; //name of dll std::string NameOfFunc; //name of fucntion }ImportInfo; 在对pe结构分析的时候,获取导入函数的地址以及名字。保存在上面的结构体数组里面。 在反汇编的时候,获取FF15开头的指令对应的地址(代码段里面的地址)和被调地址(这个不一定是导入表的函数),然后通过pe分析得到的导入表的地址范围判断被调地址是否是导入函数,然后将地址保存在一个结构体数组里面。 具体的问题很多,大概说下比较烦的问题。 1,在获取导入函数名的时候,由于我是镜像到内存,所以用了ImageRvaToVa得到镜像里面的函数名位置,但是,获取导入函数的地址的时候,就不是ImageRvaToVa转换过后的地址,而是原来pe文件里面给出的RVA。 2,导入函数的地址(在pe加载器加载到内存时候对应的地址)并不是IMAGE_IMPORT_BY_NAME结构的地址,而是FirstThunk指向的IMAGE_THUNK_DATA的地址加上对应偏移量(当然,它也是在.idata段里面) 其他小问题就多了,就不具体说了,在网上都有很多介绍。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课