首页
论坛
专栏
课程

[比赛题目] [结束][第二阶段◇第四题]看雪论坛.珠海金山2007逆向分析挑战赛

2007-9-7 12:00 129257

[比赛题目] [结束][第二阶段◇第四题]看雪论坛.珠海金山2007逆向分析挑战赛

2007-9-7 12:00
129257


=========================第二阶段比赛=========================

第二阶段比赛说明

参加资格:只有通过第一阶段比赛的选手,方可参与此阶段的比赛。具体名单请参考: 看雪论坛.珠海金山2007逆向分析挑战赛---第一阶段通过选手名单(65位)
本阶段采用综合计分的方式选出进入第三阶段的选手。
本阶段共四道题目,每题计分,每题的计分方法,将在题目放出时公布。
四道题不是同时给出,在第一题结束后,再放出第二题,以此类推。但无论答题正确与否,都有资格参与下一题的回答。若题目答错或未答,该题均计0分。


第二阶段第四题

StrDiggerMe,StrDiggerMe2这两个文件都是演示程序,使用到的字符都被一个函数解密后再显示出来的。尝试写一个程序,通过静态分析,获得这种加密方式解密后的字符串。并将这些字符串输出到一个out.txt的文件中(每个字符串占一行,若字符串回车用\n 表示)。

要求

1.要求是静态分析,不得使用调试API等让StrDiggerMe运行起来的方法进行解密字符串。
2.上传方式:将解密程序代码及编译好的程序以附件上传到“看雪论坛.珠海金山2007逆向分析挑战赛——答案提交区”。
3.提交答案后,请在本帖跟帖确认一下。


其他注意事项

1. 比赛答题期间,不得在论坛或群等公开场所讨论
2. 其他未通过第一阶段的朋友也可提交答题,但不计成绩,仅为友情参与。


提交机会:此题每个选手有多次提交附件的机会.但从第二次提交附件起,每提交一次分数减5分做为惩罚,详见计分公式.以最后一次提交结果为最终计分结果,之前的提交不进行计分.

答题时间:2007-9-7 12:00 至 2007-9-10 12:00止

计分公式:
评分时会拿另外一个使用相同加密算法加密的程序test.exe(此程序使用生成演示程序同样的方法进行处理),通过解密出函数的条数和答题时间得到分数。
得分 =[(4320 - 做题时间)/4320]1/3 * (正确解密条数/实际条数) *150 - (附件提交次数 - 1)*5

对于不了解此加密算法的人允许直接扣取代码的,不视为作弊处理。但总成绩按计分成绩的85%。
test.exe 里加密字符串均会 >= 10 个字节
例:

若test源码类似于以下代码:
str1 = ECRYPT("11111111111111111111");
decode(str1);
str2 = ECRYPT("22222222222222222222");
decode(str2);
strcpy(str3,str1);
strcat(str3,str2);
printf("%s",str3);

选手只要在out.txt输出
11111111111111111111
22222222222222222222
则正确条数为2


本题最高150分,最低0分。

做题时间是指从 2007-9-7 12:00开始到该次附件提交时间的总共分钟数。

更多规则请参考:看雪论坛.珠海金山2007逆向分析挑战赛――“金山杯”赛事细则

看雪论坛.珠海金山2007逆向分析比赛委员会
http://bbs.pediy.com
2007.9.7

[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

上传的附件:
最新回复 (79)
humourkyo 12 2007-9-7 12:11
2
0
今天怎么没人了?
firefly 4 2007-9-7 12:13
3
0
要求好像是上道题的吧?
老纳 2007-9-7 12:14
4
0
没看懂题的意思,要脱壳?
ccfer 13 2007-9-7 12:18
5
0
不理解题意啊
一个刀客 1 2007-9-7 12:22
6
0
我也不理解
shoooo 16 2007-9-7 12:22
7
0
这题目简直胡扯
你的加密解密函数是源码级的
不同的编译选项编译出来的二进制是不同的
就算作者吧解密函数的源码贴出来
也是不可能让别人准确的定位的
AloneWolf 3 2007-9-7 12:22
8
0
同上,不明白中
DiKeN 5 2007-9-7 12:23
9
0
我也同样不怎么理解,而且,这个算法是否可变?比方说C++不同方式编译出来的;再比方说,Delphi同样设计出来的,算法虽然一样,但是二进制代码可就很大区别了,我们是找固定的代码还是怎么处理?不是很明白啊。
shoooo 16 2007-9-7 12:24
10
0
明天换题目重出吧
AloneWolf 3 2007-9-7 12:25
11
0
VC ++ 6.0 的壳?
没见过...
zmworm 4 2007-9-7 12:27
12
0
不会变:)编译器保持一致。
DiKeN 5 2007-9-7 12:27
13
0
算法固定?密钥呢?(如果有密钥)?这个很难说了。编译器还会优化。最后很难弄
zmworm 4 2007-9-7 12:27
14
0
在上题基础上改的……,不好意思
zmworm 4 2007-9-7 12:29
15
0
密钥不变
DiKeN 5 2007-9-7 12:31
16
0
这道题太困难了。不用虚拟机要解出全部的基本不可能
zmworm 4 2007-9-7 12:35
17
0
不一定用 虚拟机的, 编译器也有规律可寻,做些反编译工作应该是要的,方法我不能说的太多否则要我要违规(可能要开除委员会)了
DiKeN 5 2007-9-7 12:35
18
0
这题需要虚拟机才行啊。如果那些变量在全局变量里可能还好处理些,关键就是搜索算法位置和函数引用地方;现在则需要做的事情太多了,编译器优化就足够让你晕头转向了。
不懂算法 2 2007-9-7 12:39
19
0
ms要要有反汇编引擎+汇编语言分析(类似编译器)
shoooo 16 2007-9-7 12:40
20
0
同意D头的
这题目貌似是前6题中最没有价值的
zmworm 4 2007-9-7 12:43
21
0
不用想那么复杂:)
test程序和 这两个程序的都是一同方法处理的,所以差不太多:)至少绝大部分的串都能找配到的,当然做到十全十美,估计也是有很大难度的
老纳 2007-9-7 12:45
22
0
我投降了
zmworm 4 2007-9-7 12:46
23
0
没那么难,有很多技巧,可以用小的代价做出好的效果,不要被上面那些牛人给吓到了。
又在相互打心理战
forgot 26 2007-9-7 12:58
24
0
无聊的算法,可以直接ida么
壹只老虎 7 2007-9-7 13:04
25
0
验证题目和测试题目是同一个编译器么?
ccfer 13 2007-9-7 13:06
26
0
搞这个算法没啥意义,首先大家不大可能自己实现算法,都是找现成的源码
不如直接xor一下算了
四个螳螂 1 2007-9-7 13:18
27
0
int i;
char a[20] = { 0, };

i = random();

for( ; i < 10; i++)
{
a[0] = (char)random();
Encrypt(a);
}

评委来看源代码来写一个答案~~~K~~~你的测试程序要是这样的话谁能找出规律
zmworm 4 2007-9-7 13:48
28
0
[QUOTE=四个螳螂;356704]int i;
char a[20] = { 0, };

i = random();

for( ; i < 10; i++)
{
a[0] = (char)random();
Encrypt(a);
}

评委来看源代码来写一个答案~~~K~~~你的测试程序要是这样的话...[/QUOTE]

貌似你这种加密没有什么意思
壹只老虎 7 2007-9-7 13:49
29
0
明白!
太明显了!
zmworm 4 2007-9-7 13:49
30
0
看大家密码学方面的功力了
zmworm 4 2007-9-7 13:50
31
0
是的,环境是完全一样的:)
老纳 2007-9-7 14:02
32
0
这方面功力为0,只好抱小芊芊去了
一个刀客 1 2007-9-7 14:04
33
0
我去找小芊芊教我Delphi
十三少 2 2007-9-7 14:39
34
0
我也找小芊芊玩去了。

不说了,投降。

2题草你3题草我4题草大家。
forgot 26 2007-9-7 14:47
35
0
找小芊芊找小芊芊。
大菜一号 21 2007-9-7 16:26
36
0
什么是小芊芊`
CNHW 2007-9-7 17:03
37
0
同问同问,顺便赞一下兄弟的头像
shoooo 16 2007-9-7 17:04
38
0
已提交
zjjmjtoot 4 2007-9-7 17:13
39
0
貌似是一种打枪的游戏!
kvllz 8 2007-9-7 17:51
40
0
嘿嘿到某几个群就知道了
你们慢慢打...
AloneWolf 3 2007-9-7 17:59
41
0
在 Test.exe 中解密的Key还是用同一Key吗?
kanxue 8 2007-9-7 20:00
42
0
根据要求应是的。

ylp1332 15 2007-9-7 20:21
43
0
还是不太明白题意。

附件的两个可执行程序我看了,IDA中能找到加密过的密文,运行后输出的是明文。
我想问的是,这道题究竟是要我们编程找出密文,还是明文?

如果是找出密文的话,只要理解反汇编代码就可以了,因为密文都在汇编语句中。
可是这些密文不一定是可显示的字符串,多数都是乱码。

如果是找出明文的话,那么不仅要找出密文,而且要提取加密算法。最后得到的结果
应该跟可执行程序输出的是一样的。

究竟是哪一种?
四个汉字 2007-9-7 20:27
44
0
回楼上的,题目是要求你写出一个程序,能够自动搜索加密算法的特征并定位调用该算法的所有位置,自动得到需要解密的字符串,并自动解密输出
ylp1332 15 2007-9-7 20:46
45
0
貌似你说的是对的!
不过我看了规则中的那个例子,我以为是要把可执行文件中的密文拔出来,但是看其他地方又不象。糊涂了半天。。。
十三少 2 2007-9-7 22:55
46
0
提交提交
lelfei 21 2007-9-7 23:12
47
0
看完所有的回复,还是看不懂规则,投降了

谁教我找小芊芊玩去?
smartsl 2007-9-8 01:04
48
0
提交了。

这几个题都太费时间,手不熟啊。
pcasa 2 2007-9-8 08:02
49
0
提交了。 请查看.
一个刀客 1 2007-9-8 09:45
50
0
提交了...
游客
登录 | 注册 方可回帖
返回