-
-
解答腾讯公司2008软件安全竞赛遇到的一个问题
-
发表于:
2010-7-2 10:23
4119
-
原题目地址是:
http://bbs.pediy.com/showthread.php?t=73685&prefixid=phpforce_108
我用的是ShellExecuteA来打开网站,这里两个地址需要重定位,一个是我添加的输入函数ShellExecuteA,第二个是字符串常量.我需要在重定位表里添加者两个重定位信息,打开重定位
表:
00000a00h: 00 10 00 00 20 00 00 00 03 30 08 30 10 30 2F 30 ; .... ....0.0.0/0
00000a10h: 34 30 83 30 8E 30 96 30 9F 30 BE 30 C5 30 21 31 ; 40??????!1
00000a20h: 17 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; .1..............
如上所示是该dll文件的重定位信息,重定位的数量应该是(0x20 - 8) /2 = 12(十进制),应该是到地址a1f(21 31 )处就结束了,21 31是我添加的重定位信息,原始的数据是00 00,应该是重定位信息的结束.
现在我添加了两个重定位信息(21 31 和 17 31),然后修改重定位信息的大小,因为我添加了两个,每个大小是两个字节,所以在a04地址处将SizeOfBlock字段加上4,但是这样修改之后DLL每次都加在失败.改为原来的20 00 00 00后第一个重定位信息可以正常重定位,但是第二个地址不能正常重定位,在代码中我只能用代码自定位来做.
不知道说这么多大家看明白没,本人的表达能力...我的问题是,重定位表的修改需要注意哪些问题,如果想添加几个重定位信息,我只修改重定位表的大小,然后把需要重定位的地址(按照重定位表的的结构)补到后面.除了这些还需要注意哪些?因为这个DLL当我修改完重定位信息的大小后,DLL就不能加载成功
.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)