攻防世界 XCTF 【Mobile】APK逆向

正常 JADX 反编译,后丢到 IDEA 中审计一下

直接看 MainActivity

java 复制代码
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setTitle(R.string.unregister);
    this.edit_userName = "Tenshine";
    this.edit_sn = (EditText) findViewById(R.id.edit_sn);
    this.btn_register = (Button) findViewById(R.id.button_register);
    this.btn_register.setOnClickListener(new View.OnClickListener() { // from class: com.example.crackme.MainActivity.1
        @Override // android.view.View.OnClickListener
        public void onClick(View v) {
            if (!MainActivity.this.checkSN(MainActivity.this.edit_userName.trim(), MainActivity.this.edit_sn.getText().toString().trim())) {
                Toast.makeText(MainActivity.this, (int) R.string.unsuccessed, 0).show();
                return;
            }
            Toast.makeText(MainActivity.this, (int) R.string.successed, 0).show();
            MainActivity.this.btn_register.setEnabled(false);
            MainActivity.this.setTitle(R.string.registered);
        }
    });
}

看一下 onCreate 方法,其实关键的也就一句

java 复制代码
if (!MainActivity.this.checkSN(MainActivity.this.edit_userName.trim(), MainActivity.this.edit_sn.getText().toString().trim())) {

调用 checkSN 方法,去判断一下 edit_userName 和 edit_sn 关系。

java 复制代码
public static boolean checkSN(String userName, String sn) {
    if (userName != null) {
        try {
            if (userName.length() == 0 || sn == null || sn.length() != 22) {
                return false;
            }
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.reset();
            digest.update(userName.getBytes());
            byte[] bytes = digest.digest();
            String hexstr = toHexString(bytes, "");
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hexstr.length(); i += 2) {
                sb.append(hexstr.charAt(i));
            }
            String userSN = sb.toString();
            String tmp = new StringBuilder().append("flag{").append(userSN).append("}").toString();
            return tmp.equalsIgnoreCase(sn);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return false;
        }
    }
    return false;
}

其实很简单,就是把 userName 给 md5 一下而已,简单调试一下就行了

顺便吐槽一下 java 是真的难用,复制过来一段代码,想要运行还要改改改,不像 python ....

相关推荐
网安小学生(兼顾数据库版)9 分钟前
CRA漏洞通报义务倒计时:9.11生效要求深度解读
网络·安全·web安全
国科安芯17 分钟前
小卫星综合电子系统中功能安全与抗辐射加固的协同设计研究
嵌入式硬件·安全·架构·risc-v·抗辐射·小卫星·综合电子系统
MaiTube&Maipdf1 小时前
.maipdf 文件 + 系统级拒绝截屏 + 交付后仍可吊销
安全·pdf
一次旅行1 小时前
2026‑09‑01 AI产业深度解读|AI安全体系化升级、算力转租模式兴起、多模态模型持续开源
人工智能·安全·开源
芯盾时代9 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(二)
安全·web安全·网络安全
yunlong32671 天前
吊车选型与载荷计算:避开4个坑,安全吊装不再难
安全·方案·事故·吊装·起重·吊装重量·吊装半径
IT大白鼠1 天前
MSF二次开发与自定义模块编写
网络·安全·web安全·msf
Flynt1 天前
1200个AI Agent自己组了个群,把Hugging Face黑了
安全·openai·agent
Acrel12342 天前
筑牢用电安全防线,ARCM300 守护低压配电消防安全
安全
xiaoqiMikko2 天前
一条 CVSS 9.0 的 RCE,advisory 里没写修复版是哪个 —— fastjson 16723 的字段考古
java·安全