首页
社区
课程
招聘
[原创]『深圳腾讯2010安全技术竞赛』 [第二阶段 第一题] VM指令转换
发表于: 2010-11-1 12:10 13448

[原创]『深圳腾讯2010安全技术竞赛』 [第二阶段 第一题] VM指令转换

2010-11-1 12:10
13448
收藏
免费 7
支持
分享
最新回复 (40)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你又NB了,和谐前留名
2010-11-1 12:11
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
3
囧……比赛延时了吧……
2010-11-1 12:11
0
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
nb~~~~~~~~
2010-11-1 12:12
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
5
我编辑不了, 管理员删贴吧.
2010-11-1 12:14
0
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
6
~~~~~~~~~
2010-11-1 12:16
0
雪    币: 29253
活跃值: (7784)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
7
..............
2010-11-1 12:16
0
雪    币: 6051
活跃值: (1441)
能力值: ( LV15,RANK:1473 )
在线值:
发帖
回帖
粉丝
8
哈哈,这贴杯具了
2010-11-1 12:17
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
虚拟机,貌似有点面熟
2010-11-1 12:19
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
10
楼主不用怕
貌似只是第二题出题时间的延时,没说第一题答题时间延时
2010-11-1 12:19
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
百度快照里面还有~~~~~~~~
2010-11-1 12:21
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
12
浪费我一篇精华...
2010-11-1 12:21
0
雪    币: 29253
活跃值: (7784)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
13
修正了...........
2010-11-1 12:23
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
14
管理员动作真快,修改、恢复挥手之间。
多谢了!
2010-11-1 12:29
0
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
貌似题意理解有偏差
2010-11-1 12:31
0
雪    币: 296
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
剑走偏峰!!!
2010-11-1 12:35
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
17
应该是这样估计
DWORD GetVerifyValue(LPCTSTR Str,DWORD Len)
{
	DWORD VerifyValue=0xFFFFFFFF,Temp;
	DWORD i=0;

	for (i=0;i<Len;i++)
	{
		Temp=VerifyValue&0xFF;
		Temp^=*(PBYTE)(Str+i);
		VerifyValue>>=8;
		Temp*=4;
		Temp=*(PDWORD)(Key+Temp);
		VerifyValue^=Temp;//Bug 原本该异或运算的 写成了或运算了
	//	VerifyValue|=Temp;
	}
	return ~VerifyValue;
}
2010-11-1 12:36
0
雪    币: 59
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
楼主第一个问题解决貌似不是本质吧。
应该是
0040DC38  0D 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
还原:MOV  VM_Stack[9], ZFSF(VM_Stack[8])  
OP1=2 意思是检测ZF位,应该检测SF
这条指令原来意图应该是检测SF位而不是ZF位,所以这里传递02参数不对改成04就检测SF位。
2010-11-1 12:42
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
19
题目的言外之意是如果正确解决了问题,再给你若干个输入文件,都要有正确的输出结果
题目提供的3个输入文件只是3种不同的样本,答题者完美的解决方案要适用于所有的样本
2010-11-1 13:00
0
雪    币: 7318
活跃值: (3793)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
20
不急,还有2天时间,大家讨论一下,给个最完美的方案一起提交,都是满分
2010-11-1 13:07
0
雪    币: 206
活跃值: (186)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
楼主对问题二解决的也不是很完美啊,应该要改为检测byte长度,如果按楼主的解决办法修改EXE文件。那把.dat文件中记录的字串长度由0x10016改为0xFFFF,楼主的改法仍然会引起Crash。
2010-11-1 13:17
0
雪    币: 59
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
22
你如何知道用户要输入多大范围。
2010-11-1 13:18
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
23
局部变量里有个文件大小的值[ebp-20h],可以用来参考计算
2010-11-1 13:22
0
雪    币: 206
活跃值: (186)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
限定字串的计算长度即可。不管dat中记录的字符串有多长,最多只计算前面的0xFF字节的CRC32。
既然题目要求的是修正EXE读取DAT时判断字串长度有错误的语句,而不是修正读crash.dat文件错误的问题,按楼主所说的去修改当然会显得不完美了。

题目要求:
1 描述正确文件也会检验失败的问题的原因并进行修正
2 描述异常文件会导致Crash的原因并进行修正

评分标准
4 修正题目要求中的第二点得20分。
2010-11-1 13:26
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
题目要求一
描述正确文件也会检验失败的问题的原因并进行修正?
原因:校验函数(地址401000) 成功与否标志变量未初始化
正确bool result=?
变量result未初始化
解决方法 变量定义时给result=1或者true就可以了

题目二
描述异常文件会导致Crash的原因并进行修正?
原因:两次关闭同一打开文件句柄
解决方法 NOP掉其中一处CALL即可
2010-11-1 13:27
0
游客
登录 | 注册 方可回帖
返回
//