第三阶段比赛说明

1.本阶段共一道题目,计分方法见题目。
2.若题目答错或未答,该题均计0分。
3.本题答完之后,计算本阶段总分,据此分数排序;若有分数相同者,则根据答案提交的先后顺序排序。


第三阶段题目

题目

任意给定一个可执行程序A.exe,已知A.exe运行时会调用某外部函数F,我们称可执行程序A.exe为测试程序,称A.exe正常运行情况下,在函数F返回之后调用的第下个外部函数为目标函数。编写一个程序,用控制台输出任意测试程序的目标函数名称。

说明:
1. 本题需要参赛者提交一个test.exe文件及其完整源代码,其运行参数为一个测试程序的绝对路径、函数F的名称及所在的DLL的名称,运行后,从控制台输出目标函数名称。测试程序分为不同难度的5组,每组数据的分值为20分。

2. 测试程序可能使用任意方式导入外部函数F和目标函数,导入方式包括但不限于导入表、LoadLibrary。测试程序可能使用任意方式调用函数F和目标函数,调用目标函数使用的汇编指令包括但不限于call、jmp、retn。测试程序不使用stolen code。这里的外部函数定义为:函数的实现代码位于exe映像之外,且该函数被某个动态链接库用名称导出。

3. 测试程序调用任何函数之前可能会进行检查,检查内容可能包含但不限于检测InlineHook。

4. 测试程序为单进程用户态程序,不使用驱动,测试程序和参赛者提交的程序均使用windows xp进行测试。

5. 参赛者提交的程序中不得使用非编译器和操作系统提供的第三方静态或动态链接库。

6. 可以使用ASM、VC、BC、VB、Delphi编写程序,其他开发语言谢绝使用。

答题时间:2010-11-8 12:00 至 2010-11-15 12:00止。


提交方式

请根据题目的要求进行编码,将test.exe程序和源代码一起打包为"选手id.zip",上传至腾讯2010安全技术竞赛--答案提交区


评分标准

对于每一组测试程序,参赛程序能够在30秒内正确输出目标函数名称即可得分。
得分计算公式如下:
分数 = 20 * ( min_time / time )
其中time是程序运行所用时间, min_time是在所有选手中time的最小值。

*附件中提供的测试程序仅供参赛者调试程序使用,作为评分使用的测试程序将在比赛结束后公布。

运行命令行:
c:\>test.exe "c:\A.exe" "kernel32.dll" "Beep" 

输出:
c:\>GetTickCount

A.zip