1.实验目的和要求
分析PE文件的导出表结构,分析导出函数VA的获取过程,得出导出表结构;研究导出表的利用技术,尝试对DLL文件进行修改,即应用导出函数覆盖技术达到需求。
2.实验步骤
问题1、利用Winhex查看Winresult.DLL 并分析其提供函数的名字及对应入口地址。画出导出表结构图(类似图2)。
winhex打开文件,找到PE,然后从该处偏移到78H,找到导出表的RVA为2140H,计算出FOA为940H,然后偏移到940H,这就是导出表的地址。再根据导出目录表找到指向该导出表的文件名字字符串为2190H,再计算FOA为990H,可找到文件的名字字符串。然后找到nBASE为00000001H,继续找到导出函数地址表的RVA,继续找到函数名称地址表的RVA,再计算出对应的FOA,即可找到函数名称字符串。然后继续往后找到函数序号地址表,跳到对应的FOA处,即可找到函数序号。
问题2、2.1 pedtior打开本机的kernel32.DLL,其导出表RVA?导出表大小?
导出表RVA是00092A70H,导出表大小是0000E14CH
2.2找到无导入表情况下需要的两个函数的名称及其入口地址(结合实验1问题7)。
打开kernal32,在kernal32的导出表里找到GetProAddress函数和LoadLibraryA函数的RVA
问题3、实现两种方式的导出函数覆盖-1
修改winResult.dll导出结构中的函数入口地址,达到firstwindow.EXE以动画方式打开的效果。描述你所做的工作。
winHex打开winResult.dll,找到PE,偏移到78H处,找到导出表的RVA是2140,计算其FOA为940H,偏移到940H处,找到函数的入口地址,把FadeInOpen的入口地址1282H改为AnimateOpen的入口地址1022H,保存运行即可。
问题4、实现两种方式的导出函数覆盖-2
覆盖fadeinopen函数的指令代码:使得运行firstwindow.EXE程序时会弹出messagebox。
PE打开文件,找到FadeInOpen的偏移地址为682H,将FadeInOpen函数的定义部分改
为如下,注意到最后的四个字节为user32.MessageBoxA的地址,可以在OD中打开helloworld.exe,然后F7调试找到user32.MessageBoxA的地址为763EA740,替代最后的四个字节。这样就实现了导出函数的覆盖。