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

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

2008-10-1 23:14
2647
第一步:添加导出表
PE+0x78 导出表地址
PE+0x7C 导出表大小

第二步:添加导出函数
找到.rdata段的空白处,加上OpenUrlA函数的导出

第三步:添加代码
经过分析WinExec函数的代码最段:13个字节
1
2
3
4
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的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
}

科锐学子:沙金

[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费
支持
分享
最新回复 (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
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册