菜鸟最近在努力学习《加密》, 在DLL脱壳的重建重定位表环节遇到个坎。。。。。。 为了突破者坎, 跟着13章的思路自己写了个重定位工具, 其中也参考了《加密》的PE分析工具源码 。 ************************************* 下面写下大概的思路。。。 这个工具需要输入带有重定位RVA的BIN文件,每个RVA以DWORD对齐,最后以一个为0的DWORD结束 程序循环读取每个重定位RVA,计算得到IMAGE_BASE_RELOCATION中的VirtualAddress、TypeOffset和SizeOfBlock; typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD TypeOffset[1]; } IMAGE_BASE_RELOCATION; 其中, VirtualAddress=重定位RVA/0x1000*0x1000; TypeOffset=重定位RVA%0x1000+0x3000; 0x3000表示高 4位的标志 SizeOfBlock为整个重定位块的大小 以链表的形式储存以上数据 再写入到文件的指定RVA处 最后修改下OPTIONAL_HEADER中的重定位数据目录的地址和偏移; 总之,菜鸟表示很努力学习,求鼓励,求邀请码。。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课