当前位置:网站首页>山西省第二届网络安全技能大赛(企业组)部分赛题WP(十)
山西省第二届网络安全技能大赛(企业组)部分赛题WP(十)
2022-07-30 04:17:00 【菜@就一个字】
前言
有幸参加了2022年山西省第二届网络安全技能大赛企业组的比赛,这是第一次参加ctf比赛,本着积累实战经验的目的去的,排名有点意外。
提示:以下是本篇文章正文内容。
一、题目
题目:
apk逆向题。
附件:
schoolboy.apk
二、解题步骤
1.解题思路
反汇编apk文件,找出启动页,查看算法,撸代码。
2.解题过程
反编译后,在com/example.worker/MainActivity可看到如下代码:
package com.example.worker;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.UnsupportedEncodingException;
/* loaded from: classes.dex */
public class MainActivity extends AppCompatActivity {
public static int num = 0;
public String b64Decrypt(String encodeWord) throws UnsupportedEncodingException {
String decodeWord = new String(Base64.decode(encodeWord, 2), "utf-8");
return decodeWord;
}
public String getFlag(String flag) throws Exception {
String flag2 = b64Decrypt(flag); // 2.复盘:对flag进行base64解密
byte[] c = flag2.getBytes();
for (int i = 0; i < flag2.length(); i++) {
c[i] = (byte) (c[i] ^ i); // 3.复盘:对Base解密字串按位异或,推出原始字串
}
String result = new String(c, 0, c.length);
return result;
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button studyButton = (Button) findViewById(R.id.button);
final TextView studyTime = (TextView) findViewById(R.id.studytime);
studyButton.setOnClickListener(new View.OnClickListener() { // from class: com.example.worker.MainActivity.1
@Override // android.view.View.OnClickListener
public void onClick(View v) {
MainActivity.num++;
studyTime.setText("\n你已经学习了" + MainActivity.num + "个小时\n");
if (MainActivity.num == Integer.MAX_VALUE) {
try {
TextView textView = studyTime;
StringBuilder sb = new StringBuilder();
sb.append("\n");
MainActivity mainActivity = MainActivity.this;
sb.append(mainActivity.getFlag(mainActivity.getResources().getString(R.string.mysecret))); // 1.复盘:flag由此而来
sb.append("\n");
textView.setText(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
}由
sb.append(mainActivity.getFlag(mainActivity.getResources().getString(R.string.mysecret))); // 1.复盘:flag由此而来
可知,flag为资源文件里的mysecret字串。
在如下目录里找到mysecret字串:
资源文件/resources.arsc/values/strings.xml
<string name="mysecret">REBRQFBDfWY5MDgzOj9vbiNzdCcicXBxeiwteS0vfHtDQhZAFRwfWggJCgsMDQ4P</string>
万事具备,开始撸码:
>>> mysecret='REBRQFBDfWY5MDgzOj9vbiNzdCcicXBxeiwteS0vfHtDQhZAFRwfWggJCgsMDQ4P'
>>> import base64
>>> flag2=base64.b64decode(mysecret).decode("utf-8")
>>> flag2
'[email protected]@PC}f9083:?on#st\'"qpqz,-y-/|{CB\[email protected]\x15\x1c\x1fZ\x08\t\n\x0b\x0c\r\x0e\x0f'
>>> flag=[chr(ord(flag2[i])^i) for i in range(len(flag2))]
>>> flag
['D', 'A', 'S', 'C', 'T', 'F', '{', 'a', '1', '9', '2', '8', '6', '2', 'a', 'a', '3', 'b', 'f', '4', '6', 'd', 'f', 'f', 'b', '5', '7', 'b', '1', '2', 'b', 'd', 'c', 'c', '4', 'c', '1', '9', '9', '}', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
>>> print(''.join(flag))
DASCTF{a192862aa3bf46dffb57b12bdcc4c199}
>>> flag为:
DASCTF{a192862aa3bf46dffb57b12bdcc4c199}三、总结
比赛时APK反编译软件有脾气,没能正常反编译。线下换了一个OK了。
边栏推荐
- Drools (7): WorkBench
- (题目练习)条件概率+权值线段树+FWT+后缀数组
- New LaaS protocol Elephant Swap provides ePLATO with sustainable premium space
- Roperties class configuration file & DOS to view the host network situation
- Flink学习第一天——什么是批量、流式计算?
- 验证addShutdownHook钩子生效
- Shell脚本基本编辑规范及变量
- After 5 years of Ali internship interview~
- MySQL data query (subtotal and sorting)
- 逆向理论知识3【UI修改篇】
猜你喜欢

宇宙的尽头是银行?聊聊在银行做软件测试的那些事

使用EFR32作为Zigbee/Thread的sniffer的用法

国内首家沉浸式高逼真元宇宙,希元宇宙正式上线

05全局配置文件application.properties详解

ospf 综合实验(重发布,特殊区域)

新型LaaS协议Elephant Swap给ePLATO提供可持续溢价空间
![[ 云原生之谜 ] 云原生背景 && 定义 && 相关技术详解?](/img/eb/0cd6891fcc00d2c01ba8bd7f8d0822.png)
[ 云原生之谜 ] 云原生背景 && 定义 && 相关技术详解?

我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福

Why is the Kirin 9000 5G version suddenly back in stock?

Pytorch framework learning record 3 - the use of Transform
随机推荐
Pytorch框架学习记录4——数据集的使用(torchvision.dataset)
Arrays and Structures
QT(39)-vs开发qt程序提示无法打开源文件
弘玑再度入围Gartner 2022 RPA魔力象限并实现位置大幅跃升
Based on all volunteers - H and D1 XR806 rare plant monitoring device
为什么突然间麒麟 9000 5G 版本,又有库存了?
数组和结构体
SSM框架简单介绍
海外多家权威媒体热议波场TRON:为互联网去中心化奠定基础
Is the end of the universe a bank?Talk about those things about doing software testing in the bank
The first immersive and high-fidelity metaverse in China, Xiyuan Universe is officially launched
恐造成下一个“千年虫”的闰秒,遭科技巨头们联合抵制
Azure 开发者新闻快讯丨开发者7月大事记一览
Roperties类配置文件&DOS查看主机网络情况
高并发框架 Disruptor
网页元素解析a标签
Go书籍大全-从初级到高级以及Web开发
[SQL] at a certain correlation with a table of data update another table
MySQL data query (subtotal and sorting)
redis分布式锁的原子保证