简单逆向

思路

反编译,打开MainActivity.class文件

发现调用了getflag.so动态链接库,解压apk,在lib文件夹下面用ida反编译.so文件,即可看到flag。

贰零肆捌

思路

在游戏结束的时候会把分发往服务器,抓包base64解密后一改发过去就好。

佛洛依德

思路

先打表,把3个大写字母所有生成的m0,m1打表,一共17000多种情况,包括很多重复的。然后用pwntools提交。

加载页面

思路

binwalk或者formost提取,发现一个压缩包(需要密码)。

图片里面的进度条是一个条形码(根据系统给的工具bcTester解密):

解开zip,发现encode.py。

解密脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import numpy as np
from scipy.misc import imread, imsave

img_name = "loading.png"
words = '''ZJCTF{****************}'''

bits = ''

img = imread(img_name)
for x in range(img.shape[1]):
for y in range(img.shape[0]):
if img[y][x][0] == 2:
bits += '0'
elif img[y][x][0] == 3:
bits += '1'
print bits

二进制转字符串。

唯一的真相

思路

binwalk或者formost提取,获得一个jpg文件。

再binwalk,发现:

可知里面还有一个图片被“覆盖”了,可以用dd命令或者手动操作(使用

notepad++)。可以发现:

使用GIMP反转:

逆转思维

思路

payload:
?text=php://input&file=useless.php&password=O:4:”Flag”:1:{s:4:”file”;s:8:”flag.php”;}
然后post一下welcome to the zjctf
(useless.php的内容用filter伪协议获取)
echo一个非字符串会触发__toString魔术方法,然后就可以getflag。

反推蟒蛇

思路

用uncompyle将pyc文件反编译,通过假设第一个字母是z,爆破出大数字为102*255,用脚本爆破出flag,脚本如下:

1
2
3
4
5
6
7
8
from math import floor, sqrt
x =122
aa = [57, 183, 124, 9, 149, 65, 245, 166, 175, 1, 226, 106, 216, 132, 224, 208, 139, 1, 188, 224, 9, 235, 106, 149, 141, 80]
e = 102*255
for _ in range(len(aa)):
for i in range(30,126):
if floor(((pow((sqrt(float(e)) + sqrt(float(i))),2)) / 2) % 255) == aa[_]:
print(chr(i),end='')

万能密码

思路

“=”

清廉校园

思路

图片拉到最后,Caser解密