Android逆向题解攻防世界-easy-apk

Jeb反编译apk

题目比较简单,就是一个改了码表的base64编码。

java 复制代码
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(0x7F04001B);  // layout:activity_main
        ((Button)this.findViewById(0x7F0B0076)).setOnClickListener(new View.OnClickListener() {  // id:button
            @Override  // android.view.View$OnClickListener
            public void onClick(View view) {
                String s = ((EditText)MainActivity.this.findViewById(0x7F0B0075)).getText().toString();  // id:editText
                if(new Base64New().Base64Encode(s.getBytes()).equals("5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=")) {
                    Toast.makeText(MainActivity.this, "验证通过!", 1).show();
                    return;
                }

                Toast.makeText(MainActivity.this, "验证失败!", 1).show();
            }
        });
    }
java 复制代码
public class Base64New {
    private static final char[] Base64ByteToStr = null;
    private static final int RANGE = 0xFF;
    private static byte[] StrToBase64Byte;

    static {
        Base64New.Base64ByteToStr = new char[]{'v', 'w', 'x', 'r', 's', 't', 'u', 'o', 'p', 'q', '3', '4', '5', '6', '7', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'y', 'z', '0', '1', '2', 'P', 'Q', 'R', 'S', 'T', 'K', 'L', 'M', 'N', 'O', 'Z', 'a', 'b', 'c', 'd', 'U', 'V', 'W', 'X', 'Y', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '8', '9', '+', '/'};
        Base64New.StrToBase64Byte = new byte[0x80];
    }

    public String Base64Encode(byte[] bytes) {
        StringBuilder res = new StringBuilder();
        for(int i = 0; i <= bytes.length - 1; i += 3) {
            byte[] enBytes = new byte[4];
            byte tmp = 0;
            for(int k = 0; k <= 2; ++k) {
                if(i + k <= bytes.length - 1) {
                    enBytes[k] = (byte)((bytes[i + k] & 0xFF) >>> k * 2 + 2 | tmp);
                    tmp = (byte)(((bytes[i + k] & 0xFF) << (2 - k) * 2 + 2 & 0xFF) >>> 2);
                }
                else {
                    enBytes[k] = tmp;
                    tmp = 0x40;
                }
            }

            enBytes[3] = tmp;
            for(int k = 0; k <= 3; ++k) {
                if(enBytes[k] <= 0x3F) {
                    res.append(Base64New.Base64ByteToStr[enBytes[k]]);
                }
                else {
                    res.append('=');
                }
            }
        }
        return res.toString();
    }
}

解密

魔改码表与标准码表参照对比,将加密字符串还原成标准码表编码的字符串,再标准base64解码即可。

java 复制代码
        String newBase64 = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/";
        String oldBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        String target = "5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=";
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < target.length(); i++) {
            char ch = target.charAt(i);
            if (ch == '=') {
                stringBuilder.append('=');
                continue;
            }
            int index = newBase64.indexOf(ch);
            stringBuilder.append(oldBase64.charAt(index));
        }
        System.out.println(stringBuilder);
        System.out.println(new String(Base64.getDecoder().decode(stringBuilder.toString()), StandardCharsets.UTF_8));

运行结果:flag{05397c42f9b6da593a3644162d36eb01}

相关推荐
冬奇Lab11 小时前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
炸炸鱼.12 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
用户416596736935514 小时前
nextlib 项目架构与深度技术指南 (Architecture & Technical Master Guide)
android
aq553560014 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
Trouvaille ~15 小时前
【MySQL篇】数据类型:存储数据的基础
android·数据库·mysql·adb·字符集·数据类型·基础入门
2401_8858850416 小时前
开发视频短信接口好开发吗?图文视频短信接口对接教程
android·音视频
千码君201617 小时前
kotlin:Jetpack Compose 给APP添加声音(点击音效/背景音乐)
android·开发语言·kotlin·音效·jetpack compose
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.17 小时前
MySQL半同步复制与GTID实战详解
android·mysql·adb
用户416596736935518 小时前
深度解码:记一次视频时间戳(PTS)异常导致的播放故障排查
android
大白菜和MySQL20 小时前
linux系统环境常用命令
android·linux·adb