【Android 逆向】【攻防世界】基础android

android,逆向,攻防,世界,基础 · 浏览次数 : 55

小编点评

**代码分析:** 该代码用于绕过防注入攻击,通过隐式输入密码的方式获取该密码。 **主要步骤:** 1. **下载和安装 APK:** - 用户通过 APK 文件下载并安装应用程序。 2. **运行应用程序:** - 启动应用程序。 3. **输入密码:** - 应用程序提示输入密码。 4. **验证密码:** - 检查输入密码是否符合密码格式要求。 5. **获取反编译代码:** - 如果密码正确,应用程序会尝试获取反编译代码。 6. **发送反编译请求:** - 应用程序创建一个 Intent 来发送反编译请求到其他应用程序。 7. **监听反编译请求:** - 当应用程序收到反编译请求时,它会处理请求。 8. **获取 flag 值:** - 从反编译代码中提取 flag 值。 9. **显示 flag 值:** - 应用程序显示 flag 值。 **绕过防注入的技巧:** - 应用程序使用隐式输入密码,绕过用户输入密码的限制。 - 代码使用反编译技术隐式地获取 flag 值。 - 该代码利用了漏洞,在输入密码之前获取反编译代码。 **注意:** - 这是一种不安全的代码,因为它可能被用于恶意目的。 - 代码中的代码可能包含漏洞,因此在运行之前应仔细审查代码。 - 这是一种简单的示例,实际应用中可能会更加复杂。

正文

1. 下载并安装apk,提示要输入密码

2. apk拖入到jadx中看一下

this.login.setOnClickListener(new View.OnClickListener() { // from class: com.example.test.ctf02.MainActivity.1
            @Override // android.view.View.OnClickListener
            public void onClick(View v) {
                String str = MainActivity.this.passWord.getText().toString();
                Check check = new Check();
                if (check.checkPassword(str)) {
                    Toast.makeText(MainActivity.this, "Good,Please go on!", 0).show();
                    Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                    MainActivity.this.startActivity(intent);
                    MainActivity.this.finish();
                    return;
                }
                Toast.makeText(MainActivity.this, "Failed", 0).show();
            }
        });

关键在 check.checkPassword(str)方法这里

public class Check {
    public boolean checkPassword(String str) {
        char[] pass = str.toCharArray();
        if (pass.length != 12) {
            return false;
        }
        for (int len = 0; len < pass.length; len++) {
            pass[len] = (char) (((255 - len) - 100) - pass[len]);
            if (pass[len] != '0' || len >= 12) {
                return false;
            }
        }
        return true;
    }
}

这里其实可以通过hook绕过去,但是担心这个密码就是flag,所以还原一下这个算法
python 还原算法

keys = []
for len in range(0, 12):
    keys.append(chr( 107 - len))
print(''.join(keys))

日志

kjihgfedcba`
adb shell input text "kjihgfedcba`" 成功进入下一关

3. 提示要输入显示码,看看反编译代码

        this.button.setOnClickListener(new View.OnClickListener() { // from class: com.example.test.ctf02.MainActivity2.1
            @Override // android.view.View.OnClickListener
            public void onClick(View v) {
                String str = MainActivity2.this.editText.getText().toString();
                Intent intent = new Intent(str);
                MainActivity2.this.sendBroadcast(intent);
            }
        });

从代码可得,输入的内容作为了Intent的内容并发送广播,直接看AndroidManifest.xml 看看有哪个广播接收器

        <receiver android:name="com.example.test.ctf02.GetAndChange" android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="android.is.very.fun"/>
            </intent-filter>
        </receiver>

输入 android.is.very.fun 点击确认,图片上就有flag了

与【Android 逆向】【攻防世界】基础android相似的内容:

【Android 逆向】【攻防世界】基础android

1. 下载并安装apk,提示要输入密码 2. apk拖入到jadx中看一下 this.login.setOnClickListener(new View.OnClickListener() { // from class: com.example.test.ctf02.MainActivity.1

【Android 逆向】【攻防世界】android2.0

这是一道纯算法还原题 1. apk安装到手机,提示输入flag,看来输入就是flag 2. jadx 打开apk查看 this.button.setOnClickListener(new View.OnClickListener() { // from class: com.example.test

【Android 逆向】【攻防世界】APK逆向

1. apk安装到手机,提示输入flag 2. jadx打开apk 定位到checkSN方法 public boolean checkSN(String userName, String sn) { if (userName != null) { try { if (userName.length(

【Android 逆向】【攻防世界】人民的名义-抓捕赵德汉1-200

1. 这一题下载下来是个jar文件,感觉很android关系不大,但还是放在了mobile这个分类下了 2. 直接java jar运行,提示需要输入密码 # java -jar 169e139f152e45d5ae634223fe53e6be.jar Enter password: 1234 Inc

【Android 逆向】【攻防世界】ill-intentions

1. apk 安装到手机, 啥输入框都没有 2. apk拖入到jadx中看看 public class MainActivity extends Activity { @Override // android.app.Activity public void onCreate(Bundle save

【Android 逆向】【攻防世界】boomshakalaka-3

1. apk 安装到手机,是一个cocos2dx 写的打飞机的游戏 题目描述跟得分有关(题目描述: play the game, get the highest score) 2. jadx 打开apk public class FirstTest extends Cocos2dxActivity

【Android 逆向】【攻防世界】easy-apk

apk 安装到手机,随便输入点内容,提示错误 2. apk 拖入到jadx中看看 public class MainActivity extends AppCompatActivity { /* JADX INFO: Access modifiers changed from: protected

【Android 逆向】【攻防世界】app1

1. apk安装到手机, 老套路了 2. jadx打开 this.btn.setOnClickListener(new View.OnClickListener() { // from class: com.example.yaphetshan.tencentgreat.MainActivity.1

【Android 逆向】【攻防世界】app2

1. 手机安装apk,随便点击,进入到第二个页面就停了 2. jadx打开apk,发现一共有三个activity,其中第三个activity: FileDataActivity 里面有东西 public class FileDataActivity extends a { private TextV

【Android 逆向】【攻防世界】easy-so

1. apk安装到手机,随便输入点内容,提示错误 2. jadx打开apk btn.setOnClickListener(new View.OnClickListener() { // from class: com.testjava.jack.pingan2.MainActivity.1 @Ove