首页
社区
课程
招聘
[原创][第一阶段◇第一题]看雪论坛.腾讯公司2008软件安全竞赛 答案
发表于: 2008-10-1 23:14 2497

[原创][第一阶段◇第一题]看雪论坛.腾讯公司2008软件安全竞赛 答案

2008-10-1 23:14
2497
第一步:添加导出表
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);
}


科锐学子:沙金

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
RVA:10CA
OpenUrlA函数大小=14 字节
附件提交次数=1
得分=min[1.0,(13/14)]×100-(1-1)×5=92.9
由于没改变文件大小和增加区段给加5分
最终得分97.9
2008-10-2 00:31
0
游客
登录 | 注册 方可回帖
返回
//