全国大学生信息安全竞赛初赛_珍贵资料

忙着考试、做各种东西、拖着拖着就半个月了(ノಠ益ಠ)ノ彡┻━┻

这篇是全国大学生信息安全竞赛初赛珍贵资料的writeup

第一次参加这种比赛起码还是做出了一道200分的题,然而还是自己太弱

可惜一堆咸鱼忙着期末考试,最终没能进到复赛(不能去上海玩啊擦擦擦擦)

好了,进入正题吧= =

珍贵资料

题目链接:http://www.ichunqiu.com/racing/54391

压缩包解压出来两个文件

unknown unknown2

通过工具易知(例如ida),unknown2是apk文件, 而unknown刚开始我并不知道是什么

通过文件头可以Google出来

1

这是一个android的备份文件

apk安卓类的逆向,先apktool反编译下,装上虚拟机或真机调试

2

直接点击登录会出现提示

3

所以就是需要找出password是什么

可以定位代码到LoginActivity.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private SharedPreferences sp;

public void onClick(View paramAnonymousView)
{
LoginActivity.this.userNameValue = LoginActivity.this.userName.getText().toString();
LoginActivity.this.passwordValue = LoginActivity.this.encode(LoginActivity.this.password.getText().toString());
if ((LoginActivity.this.userNameValue.equals(LoginActivity.this.sp.getString("USER_NAME", ""))) && (LoginActivity.this.passwordValue.equals(LoginActivity.this.sp.getString("PASSWORD", ""))))
{
Toast.makeText(LoginActivity.this, "登录成功", 0).show();
paramAnonymousView = new Intent(LoginActivity.this, LogoActivity.class);
LoginActivity.this.startActivity(paramAnonymousView);
return;
}
Toast.makeText(LoginActivity.this, "登录失败", 1).show();
}

输入的用户密码跟存在sharepreference里的账户密码做比较

密码的加密算法如下

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
public static String Encryption(String paramString)
{
StringBuilder localStringBuilder = new StringBuilder();
if ((paramString == null) || (paramString.length() < 1))
{
System.out.println("you Input nothing.");
return null;
}
paramString = paramString.toLowerCase();
int m = paramString.length();
int k = 0;
for (;;)
{
if (k >= m) {
return localStringBuilder.toString();
}
int j = "ijklmstuvwxyz0123abcdenopqrfgh456789".indexOf(paramString.charAt(k));
int i = j;
if (j == LEN - 1) {
i = -1;
}
j = i;
if (i == LEN - 2) {
j = -2;
}
i = j;
if (j == LEN - 3) {
i = -3;
}
localStringBuilder.append("ijklmstuvwxyz0123abcdenopqrfgh456789".charAt(i + 3));
k += 1;
}
}

对于安卓备份文件恢复

用adb restore file命令,在设备上点击恢复,不需要输入密码

adb shell在/data/data/com.example.login/shared_prefs中可以找到存储用户信息的xml文件userInfo.xml

1
2
3
4
5
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="PASSWORD">dudqlvqrero1</string>
<string name="USER_NAME">user</string>
</map>

可以看到加密后的password = dudqlvqrero1

针对加密算法,写出解密程序(其实那就是一个偏移3位的凯撒加密)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#--coding:utf-8--

password = 'dudqlvqrero1'
str1 = 'ijklmstuvwxyz0123abcdenopqrfgh456789'
LEN = len(str1)
ans = ''

for c in password:
i = str1.find(c)
i -= 3
if i == -3:
j = LEN - 3
elif i == -2:
j = LEN -2
elif i == -1:
j = LEN - 1
else:
j = i
ans += str1[j]

print(ans)

得出 flag = amanisnobody

×

赞助gif换电脑、吃双皮奶(逃

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 珍贵资料
,