-
-
[原创][第一阶段◇第一题]看雪论坛.腾讯公司2008软件安全竞赛 答案
-
发表于:
2008-10-1 23:14
2497
-
[原创][第一阶段◇第一题]看雪论坛.腾讯公司2008软件安全竞赛 答案
第一步:添加导出表
PE+0x78 导出表地址
PE+0x7C 导出表大小
第二步:添加导出函数
找到.rdata段的空白处,加上OpenUrlA函数的导出
第三步:添加代码
经过分析WinExec函数的代码最段:13个字节
003D10CA . 6A 05 push 5
003D10CC . 68 60303D00 push 003D3060
003D10D1 . FF15 08203D00 call dword ptr [<&KERNEL32.WinExec>]
003D10D7 . C3 retn
第四步:添加字符串
找到.data段的空白处,加上
"C:\Program Files\Internet Explorer\IExplore.exe http://www.pediy.com"
字符串
第五步:添加导入函数
修改导入表 在KERNEL32.dll里加上WinExec函数的导入
第六步:修改重定位索引
由于OpenUrlA函数有一个字符串和CALL地址需要重定位,所以,加上这两个地址的重定位索引。
同时,修改重定位表的大小
将两处0x20改为0x24
修改完成。
上传改好的pediy.dll和测试用的exe 文件
exe的代码:
extern "C" typedef void (_stdcall *OpenUrlA)(void);
OpenUrlA Fn=NULL;
void CTestPediyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HMODULE hModule = LoadLibrary("pediy.dll");
if (hModule == NULL)
{
return;
}
Fn=(OpenUrlA)GetProcAddress(hModule,"OpenUrlA");
if (Fn == NULL)
{
FreeLibrary(hModule);
return;
}
Fn();
FreeLibrary(hModule);
}
科锐学子:沙金
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!