-
Notifications
You must be signed in to change notification settings - Fork 1
/
4_gate4
103 lines (96 loc) · 4.47 KB
/
4_gate4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
1.第四关的入口是http://monyer.com/game/game1/d4g.php
2.可是无论是输入密码还是直接通过url输入,最后倒是调回第三关去了。
浏览器里面没有办法直接看到源码了。那就直接下载源码来看看吧。
wget http://monyer.com/game/game1/d4g.php
这样在当前目录下面就可以得到d4g.php文件啦。
3.源码如下:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex,nofollow">
<meta http-equiv="refresh" content="0;url=424178.php">
<title>梦之光芒/Monyer——Monyer's Game(第4关)</title>
<script type="text/javascript">
eval(
function(p,a,c,k,e,d)
{
e=function(c){return c.toString(36)};
if(!''.replace(/^/,String))
{
while(c--)
d[c.toString(a)]=k[c]||c.toString(a);
k=[function(e){return d[e]}];
e=function(){return'\\w+'};
c=1
};
while(c--)
if(k[c])
p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);
return p
}('a="e";d c(){b(9.8(\'7\').6==a){5.4.3=a+".2"}1{0("密码错误")}}',
15,
15,
'alert|else|php|href|location|window|value|txt|getElementById|document||if|check|function|3bhe'.split('|'),
0,
{})
)
</script>
</head>
<body>
<div align="center">
<p>欢迎您来到第4关</p>
<p>请输入密码进入第5关:
<input type="text" id="txt" value="">
<input type="button" onClick="check()" value="提交">
</p>
</div>
</body>
<script type="text/javascript">
eval("\141\75\141\56\164\157\125\160\160\145\162\103\141\163\145\50\51\53\61\73");
</script>
</html>
4.代码跳转是为什么呢?我没有仔细研究过,后面补充。我看肯定是和第三有关的地址的地方。所以去掉了
<meta http-equiv="refresh" content="0;url=424178.php">这里的意思就是马上有跳转回第三关。直接去掉这行,或者
把content改为一个超级大的数值。参考链接:http://www.360doc.com/content/10/1124/09/2703996_71931633.shtml
来分析下关键的代码。
eval(
function(p,a,c,k,e,d)
{
e=function(c){return c.toString(36)};
if(!''.replace(/^/,String))
{
while(c--)
d[c.toString(a)]=k[c]||c.toString(a);
k=[function(e){return d[e]}];
e=function(){return'\\w+'};
c=1
};
while(c--)
if(k[c])
p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);
return p
}('a="e";d c(){b(9.8(\'7\').6==a){5.4.3=a+".2"}1{0("密码错误")}}',
15,
15,
'alert|else|php|href|location|window|value|txt|getElementById|document||if|check|function|3bhe'.split('|'),
0,
{})
)
这里明显就是把js代码混淆啦。可是要怎么才能得到原来的代码是 什么呢?大概看了下return p就是返回来正在的js代码。
那我们在这个地方打个断点不久好了。断点以后查看变量p的内容还是:
"a="3bhe";function check(){if(document.getElementById('txt').value==a){window.location.href=a+".php"}else{alert("密码错误")}}"
从这里可以看出来第五个的入口地址是。3bhe.php.
好了直接进入第五关。可是提示没有这个地址。密码输入3bhe也不对!我们还要一段js没有分析:
<script type="text/javascript">
eval("\141\75\141\56\164\157\125\160\160\145\162\103\141\163\145\50\51\53\61\73");
</script>
a.直接输入3bhe提示密码错误,那么我们把上面这段代码去掉,再试试看。点击没有提示密码错误,可是跳转以后提示页面不存在。
看来还是要解密这段代码。
b.如何解密这段代码?
http://www.jb51.net/tools/eval/这个网站提供在线eval加密解密。
直接输入以后就可以得到相关内容。所以上面查看混淆出的代码,也可以用这里来做解密。
eval("\141\75\141\56\164\157\125\160\160\145\162\103\141\163\145\50\51\53\61\73");
的内容是a = a.toUpperCase() + 1;
所以通过上面的计算a=3BHE1。下一关的通过密码我们应该拿到了:
3BHE1.php