雷迪森and乡亲们
经过了8月的洗礼
我们迎来了9月的奋斗季
在8月
我们举办了勇攀高峰flag夺旗赛
大家在云演
留下了自己的脚步
有人在中途倒下
也有人成功登顶
拿到了属于自己的奖励
今天
为大家揭秘
在攀登途中
我们遇到的那些难题
可爱的表情emoji
【题目难度】
★★
【考察知识点】
Base解密 zlib
【解题步骤】
第一步
下载题目,打开发现是一堆表情。
第二步
根据题目描述判断是base100加密,使用如下在线网站base100解密:http://www.atoolbox.net/Tool.php?Id=936
得到:
GY2TIQJXG42EKNZZGRBTOMZUIU3DONBRGQYTIOJUGI2EKNBTGU3DIQJUHE3DIMZYG44DONJUGU3DOMZSG4ZDMOJUGI3DGNJYGY2DOMZTGMZEMNJYGU2TERRVGU3TCNZZGZATMNBUGI3EMNZZGQ4TINBWIY2DSMZTGRCTEQRUIYZTSNJVGVATGNJXGY2TKNZUGM2TIRRTGQ2EGNJXG43TGRBTIQ======
第三步
解码后发现有=符号,尝试base64后是乱码,尝试使用在线网站解密base32:https://www.qqxiuzi.cn/bianma/base.php
得到:
654A774E794C734E67414149424E43564A496438787545673272694263586473332F58552F5571796A64426F7949446F49334E2B4F39555A35765574354F344C57773D3D
第四步
解出的全为大写字母,为base16解密,使用在线网站进行base16解密:
https://www.qqxiuzi.cn/bianma/base.php?type=16
得到:
eJwNyLsNgAAIBNCVJId8xuEg2riBcXds3/XU/UqyjdBoyIDoI3N+O9UZ5vUt5O4LWw==
第五步
解出的字符有=符号,但是尝试base解密均失败,使用CyberChef工具base64和zlib组合解出flag(在线网站:https://gchq.github.io/CyberChef/)。
animals
【题目难度】
★★★
【考察知识点】
【解题步骤】
第一步
public class HelloJni extends Activity {
public static int o;
public static int p;
public static Bitmap t;
public void onCreate(Bundle arg4) {
super.onCreate(arg4);
TextView v0 = new TextView(((Context)this));
v0.setText("请开始你的寻找");
this.setContentView(((View)v0));
HelloJni.t = BitmapFactory.decodeResource(this.getResources(), 0x7F020001);
}
public void a() {
int v12 = 25;
int v4 = HelloJni.t.getHeight() / 25;
int v5 = HelloJni.t.getWidth() / 25;
byte[] v3 = new byte[v12];
HelloJni.o = v4;
HelloJni.p = v5;
int v7 = 10;
int v8 = 20;
Boolean.valueOf(String.valueOf(v4).equals(String.valueOf(v5)));
int v9;
for(v9 = 0; v9 < v12; ++v9) {
int v6 = HelloJni.t.getPixel(v8, v7);
v8 += v5;
v7 += v4;
if(v9 % 3 == 0) {
v3[v9] = ((byte)Color.red(v6));
}
else if(v9 % 3 == 1) {
v3[v9] = ((byte)Color.green(v6));
}
else {
v3[v9] = ((byte)Color.blue(v6));
}
}
}
public native String stringFromJNI(String arg1, int arg2, int arg3) {
}
public native String unimplementedStringFromJNI() {
}
第二步
public class animals extends Activity {
public static byte[] a;
public static byte[] g1;
private String h;
public static mainctivity kk;
private int m;
private int n; static {
animals.a = new byte[20];
animals.kk = new mainctivity();
animals.g1 = new byte[]{0x76, 89, 71, 81, 0x76, 103, 107, 49, 55, 43, 0x30, 69, 78, 57, 80, 0x73, 67, 120, 83, 75, 71, 81, 61, 61};
}
public animals() {
super();
}
protected void onCreate(Bundle arg3) {
super.onCreate(arg3);
this.setContentView(0x7F030000);
this.findViewById(0x7F080002);
animals.textview = this.findViewById(0x7F080000);
}
public boolean onCreateOptionsMenu(Menu arg3) {
this.getMenuInflater().inflate(0x7F070000, arg3);
return 1;
}
protected void onResume() {
super.onResume();
this.m = HelloJni.o;
this.n = HelloJni.p;
String.valueOf(this.m).equals(String.valueOf(this.n));
}
protected void onStart() {
super.onStart();
animals.text = new HelloJni();
new animals().l();
}
public void a(View arg9) {
String v4 = animals.textview.getText().toString();
if(animals.kk.Checkable(v4)) {
animals.a = new HelloJni().stringFromJNI(v4, this.m, this.n).getBytes();
animals.t = new mainctivity();
mainctivity.a = animals.a;
try {
if(animals.t.off().booleanValue()) {
animals.t.ss(mainctivity.a);
if(Boolean.valueOf(new String(mainctivity.a).trim().equals(new String(animals.g1))).booleanValue()) {
Toast.makeText(((Context)this), "congratulations", 0).show();
return;
} Toast.makeText(((Context)this), "加油~~~~加油", 0).show();
return;
}
Toast.makeText(((Context)this), "努力~~~~努力", 0).show();
return;
}
catch(BadPaddingException v0) {
goto label_65;
}
catch(NoSuchAlgorithmException v0_1) {
goto label_56;
}
catch(NoSuchPaddingException v0_2) {
goto label_59;
}
catch(IllegalBlockSizeException v0_3) {
goto label_62;
}
catch(InvalidKeyException v0_4) {
goto label_48;
}
}
Toast.makeText(((Context)this), "好像不对哦~~~~", 0).show();
return;
public boolean onOptionsItemSelected(MenuItem arg3) {
boolean v1 = arg3.getItemId() == 0x7F080003 ? true : super.onOptionsItemSelected(arg3);
return v1;
}protected void onResume() {
super.onResume();
this.m = HelloJni.o;
this.n = HelloJni.p;
String.valueOf(this.m).equals(String.valueOf(this.n));
}
protected void onStart() {
super.onStart();
animals.text = new HelloJni();
new animals().l();
public Boolean off() {
Boolean v0 = mainctivity.a[16] != 8 || mainctivity.a[17] != 72 || mainctivity.a[18] != 13 || mainctivity.a[19] != 26 || mainctivity.a.length != 20 ? Boolean.valueOf(false) : Boolean.valueOf(true);
return v0;
}
if(animals.t.off().booleanValue()) {
animals.t.ss(mainctivity.a);
if(Boolean.valueOf(new String(mainctivity.a).trim().equals(new String(animals.g1))).booleanValue()) {
Toast.makeText(((Context)this), "congratulations", 0).show();
return;
}
Toast.makeText(((Context)this), "加油~~~~加油", 0).show();
return;
}
@TargetApi(value=8) public void noe() {
int v8 = 16;
int v6 = 16;
try {
byte[] v5 = new byte[v6];
int v2 = 0;
int v3;
for(v3 = 0; v2 < v8; ++v3) {
v5[v2] = mainctivity.c[v3];
v5[v2 + 1] = mainctivity.c[v3];
v2 += 2;
}
SecretKeySpec v4 = new SecretKeySpec(v5, "AES");
Cipher v0 = Cipher.getInstance("AES/ECB/NoPadding");
try {
v0.init(1, ((Key)v4));
try {
this.no();
mainctivity.a = Base64.encode(v0.doFinal(mainctivity.x), 0);
}
catch(BadPaddingException v1_3) {
try {
v1_3.printStackTrace();
}
catch(NoSuchPaddingException v1_1) {
}
catch(NoSuchAlgorithmException v1) {
}
catch(InvalidKeyException v1_2) {
try {
label_34:
v1_2.printStackTrace();
}
catch(NoSuchPaddingException v1_1) {
label_43:
v1_1.printStackTrace();
}
catch(NoSuchAlgorithmException v1) {
label_37:
v1.printStackTrace();
}
}
}
public void no() {
int v0;
for(v0 = 0; v0 < 16; ++v0) {
mainctivity.x[v0] = mainctivity.a[v0];
}
}
if(Boolean.valueOf(new String(mainctivity.a).trim().equals(new String(animals.g1))).booleanValue()) {
Toast.makeText(((Context)this), "congratulations", 0).show();
return;
}
Toast.makeText(((Context)this), "加油~~~~加油", 0).show();
return;
}
animals.g1 =newbyte[]{0x76,89,71,81,0x76,103,107,49,55,43,0x30,69,78,57,80,0x73,67,120,83,75,71,81,61,61};
第三步
中国象棋博大精深
【题目难度】
★★
【考察知识点】
Python 游戏
【解题步骤】
第一步
第二步
-
服务端检测从127.0.0.1连接(机器人)默认有99999金币,否则为0金币。 -
玩家需要通过负数购买漏洞,增加自己的金币。在chrome的F12中输入:
gamesocket.send(JSON.stringify({
type: 'on_buy',
count: -999999
}));
-
玩家购买机器人的车,从而保证一步可以获胜:
gamesocket.send(JSON.stringify({
type: 'on_buyother',
count: 45
}));
第三步
获得flag,奖品到手!
点击下方“阅读原文”直接进入CTF习题中心,复制到电脑端练习哦☺
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论