首页 > 基础资料 博客日记

吾爱2023新年红包题第四题

2023-07-24 10:43:23基础资料围观305

Java资料网推荐吾爱2023新年红包题第四题这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣

吾爱论坛2023年春节红包安卓题,随便玩一玩;

https://www.52pojie.cn/thread-1738015-1-1.html

第四题:https://www.52pojie.cn/home.php?mod=task&do=view&id=23

首先我们下载后,打开apk看下界面提示情况;

看界面是用到了, 你的吾爱uid 以及计算出来的flag 进行效验;

先定位到方法,我们又看到,用到了MD5加密和 base64;

还是先看方法逻辑吧:


obj也就是第一个输入框的内容,那不就是uid吗

  String obj = StringsKt.trim((CharSequence) editText.getText().toString()).toString();

后面这个就是第二个输入框,flag

StringsKt.trim((CharSequence) editText2.getText().toString()).toString())

进入a.m25B方法:


uid -> str ->encode ->c.cipher(mD5Utils.MD5(base64Utils.encodeToString(bytes)), 5)

flag -> str2 -> substring

显然这个方法是 返回一个 bool类型结果,那就是 true | false;

又看到最后确实是比对这两个值:


分析其逻辑,我们只要知道,c.cipher(mD5Utils.MD5(base64Utils.encodeToString(bytes)), 5)

就是比对的结果;

分析运算逻辑:

将 uid + “Wuaipojie2023” 进行 encode 方法运算:

    public static String encode(String str) {
        int length = str.length();
        char[] cArr = new char[length];
        int i = length - 1;
        while (i >= 0) {
            int i2 = i - 1;
            cArr[i] = (char) (str.charAt(i) ^ '5');
            if (i2 < 0) {
                break;
            }
            i = i2 - 1;
            cArr[i2] = (char) (str.charAt(i2) ^ '2');
        }
        return new String(cArr);
    }

后转bytes进行base64编码;
====这里的base64也都是标准的,无魔改,无改码表;

然后将base64之后进行md5加密,加密后得出32位值,再用 cipher 做运算;

public final String cipher(String str, int i) {
        Intrinsics.checkNotNullParameter(str, "str");
        StringBuilder sb = new StringBuilder();
        int length = str.length();
        for (int i2 = 0; i2 < length; i2++) {
            if (Intrinsics.compare((int) str.charAt(i2), 65) >= 0 && Intrinsics.compare((int) str.charAt(i2), 90) <= 0) {
                sb.append(cipher(str.charAt(i2), i));
            } else if (Intrinsics.compare((int) str.charAt(i2), 97) < 0 || Intrinsics.compare((int) str.charAt(i2), 122) > 0) {
                sb.append(str.charAt(i2));
            } else {
                sb.append(cipher(str.charAt(i2), i));
            }
        }
        String sb2 = sb.toString();
        Intrinsics.checkNotNullExpressionValue(sb2, "sb.toString()");
        return sb2;
    }

运算之后:

那就是 cipher之后:h8203kj86395hf8677jgj599ki82g0i9;

那么格式就是 flag{cipher之后的值了} ;


文章来源:https://blog.csdn.net/weixin_38927522/article/details/128816834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云