Syc 10 Geek WriteUp

我好弱。。。我好弱。。。我好弱。。。我好弱。。。我好弱。。。我好弱。。。我好弱。。。我好弱。。。我好弱。。。

一、Web

1.撸猫

审查元素发现几行注释的代码
好了直接get就完事了。
http://118.25.14.40:8110/?cat=dog
访问即可得flag。

2.白给的Shell

题目给提示了
system函数万岁
先看header发现ubuntu
然后开始system(“ls -l /“);发现flag文件夹
然后开始操作system(“cd /flag;ls -l”);发现flag.txt
最后system(“cat /flag/flag.txt”);
好了,flag错误。

3.Burp

安装Burp,导入插件出flag。

二、MISC

1.签到

关注公众号回复flag。

2. 啊啊啊啊啊啊啊!!!我好兴奋!!!

一个gif 100k+,binwalk
好了foremost,出一个jpg,属性里面有。

3.翻过这座山

小飞机的连接点进去,我还以为是自动回复机器人,好尬。
好了,看Profile,github链接进去第一个repo里就有flag。
然后我就错了2333。

4. 散打黑客的压缩包

Hint说了四个数字,AAPR暴力破解走起。
好了,3130。
解压出的zip也是加密的,那接着暴力。
好了7665,flag出来了。

5. 是谁杀了谁

先点开,注意HP,然后就生成HP文件,里面就是flag。

6. RPG真是太有趣了吧

RPG游戏反正我是不会玩,这个东西先解压,然后那个500k的Game.rgssad文件很可疑,然后就百度如何解包,最后strings一下就出来了。

7. 嘿,你喜欢吃鲱鱼罐头吗?

Zip有密码,没给提示,目测伪加密,用UltraEdit改一下就能解压了。
然后就不会了

三、PWN

1. Find tools

Pwntools脚本解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import *
c = remote("pwnto.fun", 9999)
s = c.readline()
print(s)
s = c.readline()
print(s)
s = c.readline()
print(s)
s = c.readline()
print(s)
s = c.readline()
print(s)
c.send("l1ve_l0ng_and_pwn")
s = c.readline()
print(s)
s = c.readline()
print(s)

四、RE

1. jiang’s fan

strings就可以了。

2. secret

strings看到一坨base16,直接python跑一下出结果。

3. Easy VB

IDA F5是没有灵魂的,所以拖进去就看到了两串长度相等的字符串。
异或直接出结果。

4. 冰菓

拖到IDA里看到了这个
dnspy打开,看到方法EncryptStr
用c写个程序就能跑出来。

1
2
3
4
5
6
7
#include <stdio.h>
int main() {
char array[] = { 119,77,103,79,21,115,133,97,115,87,22,115,103,89,88,93,22,89,119,81 };
char array2[] = { 57,13 };
for (int i = 0; i < 20; ++i)
putc((array[i] - array2[1]) ^ array2[0], stdout);
}

5.pyc是啥子

Pyc逆向用uncompyle,pip install uncompyle,然后uncompyle6 re_py.pyc > re_py.py。
得到py文件,递归就可以。
用cpp实现如下:

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
#include <stdio.h>
#include <stdlib.h>
#include <string>
bool visited[100];
std::string res;
char map[] = "&$63";
int data[] = { -10,10,-1,1 };
void dfs(const char *str, int index, int j) {
char c = str[index];
if (visited[index]) return;
if (c == '#') return;
if (c == 'E') {
res.push_back(map[j]);
printf(res.c_str());
system("pause");
exit(0);
}
visited[index] = true;
res.push_back(map[j]);
for (int i = 0; i < 4; ++i) {
dfs(str, index + data[i], i);
visited[index + data[i]] = false;
}
}
int main() {
const char str[] = "###########S#@@@@@@##@#@####@##@#@@@@#@##@####@#@##@@@@@@#@#########@##E######@##@@@@@@@@###########";
dfs(str, 11, 0);
}

五、Android

1.Sign_In

真签到,apktool反编译看strings.xml,里面有base64,解码出结果。

2. 蒋学姐的秘密

Apktool,看到点进去的Activity是
Jadx打开apk,查看。
在geek.login.data.LoginDataSource中找到,然后看一下VersionName
然后就跑一下这个代码,用Java。
(或者不跑,一看就是Syclover的MD5包上Syc{})

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
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Test {

public static void main(String[] args) {
String versionName = "Syclover";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Syc{");
try {
MessageDigest instance = MessageDigest.getInstance("MD5");
instance.update(versionName.getBytes());
StringBuffer stringBuffer = new StringBuffer();
byte[] digest = instance.digest();
for (int i : digest) {
if (i < 0) {
i += 256;
}
if (i < 16) {
stringBuffer.append("0");
}
stringBuffer.append(Integer.toHexString(i));
}
stringBuilder.append(stringBuffer);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
System.out.println(stringBuilder.append('}'));
}
}

六、Coding

1. Dragon Quest

实在不会就穷举。

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
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int a;
int b;
int c;
int length;
} Monster;
Monster *malloc_Monster(int i, int j, int k, int l) {
Monster *p = (Monster *)malloc(sizeof(Monster));
p->a = i;
p->b = j;
p->c = k;
p->length = l;
return p;
}
int MonsterCmp(void const* left, void const* right) {
return ((Monster*)left)->length - ((Monster*)right)->length;
}
int main() {
int arr[3][3];
int i, j, k, data;
for (i = 0; i < 3; ++i)
for (j = 0; j < 3; ++j) {
scanf("%d", &data);
arr[i][j] = data;
if (data <= 0) {
printf("The monster is too weak...");
return 0;
}
}
Monster *p = (Monster *)malloc(sizeof(Monster) * 3 * 3 * 3);
for (i = 0; i < 3; ++i)
for (j = 0; j < 3; ++j)
for (k = 0; k < 3; ++k)
p[3 * 3 * i + 3 * j + k] = *malloc_Monster(i, j, k, arr[0][i] + arr[1][j] + arr[2][k]);
qsort(p, 27, sizeof(Monster), MonsterCmp);
for (i = 0; i < 27; ++i)
if (p[i].length >= 60) break;
if (i == 27) {
printf("why don't give the brave a chance to level up...");
return 0;
}
if (p[i].length >= 100) {
printf("The brave died on the way to leveling...");
return 0;
}
printf("The brave still has %dHP left to face the BOSS", 100 - p[i].length);
}

2. 挡路羊驼

试探回溯。

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
#include <stdio.h>
#include <stdlib.h>
int visited[11][11];
int mx, my;
int count;
int ans;
void makevisited(int x, int y) {
if (0 <= x && x <= mx && 0 <= y && y <= my)
visited[x][y] = 1;
}
void dfs(int x, int y) {
count++;
int i;
if (count == mx + my) {
ans++;
return;
}
if (x + 1 <= mx && !visited[x + 1][y]) {
dfs(x + 1, y);
count--;
}
if (y + 1 <= my && !visited[x][y + 1]) {
dfs(x, y + 1);
count--;
}
}
int main() {
int x, y;
scanf("%d %d %d %d", &mx, &my, &x, &y);
makevisited(x, y);
makevisited(x - 1, y - 2);
makevisited(x - 1, y + 2);
makevisited(x + 1, y - 2);
makevisited(x + 1, y + 2);
makevisited(x - 2, y - 1);
makevisited(x - 2, y + 1);
makevisited(x + 2, y - 1);
makevisited(x + 2, y + 1);
dfs(0, 0);
printf("%d", ans);
}
作者

Uchiha Kakashi

发布于

2019-11-26

更新于

2019-11-27

许可协议