吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 252|回复: 3
收起左侧

[Android 求助] 这个ctf怎么解

  [复制链接]
s1986q 发表于 2024-11-5 17:44
本帖最后由 s1986q 于 2024-11-5 20:24 编辑

[Java] 纯文本查看 复制代码
//
// Decompiled by Jadx (from NP Manager)
//
package com.ctf.dadroid;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Arrays;

public class MainActivity extends ActionBarActivity {
    private void crack(String str) {
        char[] b = new char[]{'M', '=', '+', 198, 250, 192, 226, 254, 236, 232, 224, 233, 214, 227, 255, 171, 254, 209, 225, 255, 229, 205, 231, 252, 240, 201, 229, 253, 248, 246, 196, 250, 241, 255, 248, 255, 201, 195, 203, 197, 205, 199, 207, 201, 193, 203, 195, 205, 197, 207, 210};
        System.out.println(b.length);
        char[] c = str.toCharArray();
        int l = c.length;
        char m = c[l - 1];
        for (int i = 0; i < l; i++) {
            int i2 = (c[i] ^ m) & 255;
            m = (char) (m + 1);
            c[i] = (char) i2;
        }
        result(c, b);
    }

    private void result(char[] cArr, char[] cArr2) {
        if (Arrays.equals(cArr, cArr2)) {
            Toast.makeText(this, "yes", 1).show();
        } else {
            Toast.makeText(this, "no", 1).show();
        }
    }

    public void confirm(View view) {
        crack(((EditText) findViewById(2131296320)).getText().toString());
    }

    public boolean onOptionsItemSelected(MenuItem menuItem) {
        return menuItem.getItemId() == 2131296321 ? true : super.onOptionsItemSelected(menuItem);
    }

    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(2130968599);
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(2131558400, menu);
        return true;
    }
}


这个ctf可以逆推吗

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

__▂寒江雪▂__ 发表于 2024-11-5 21:44
本帖最后由 __▂寒江雪▂__ 于 2024-11-5 21:47 编辑

题目意思是输入的字符串通过一系列计算后,能够和预先给出的char字符一致

这个题关键点在于m值  假设是最后一次循环,那最后一次计算是 x ^(x+50)  &255= 210,写个0-255的循环爆破能算出来一堆x值,其中一个x值就是循环第一次的m值
那这么多m哪个才是呢?  其实这里靠脑子,CTF flag答案一般是以}结尾的, } 的字符值是125 所以猜m是125

有了m的值,爆破flag的每个字符即可
[Python] 纯文本查看 复制代码
chars = [77, 61, 43, 198, 250, 192, 226, 254, 236, 232, 224, 233, 214, 227, 255, 171, 254, 209, 225, 255, 229, 205, 231, 252, 240, 201, 229, 253, 248, 246, 196, 250, 241, 255, 248, 255, 201, 195, 203, 197, 205, 199, 207, 201, 193, 203, 195, 205, 197, 207, 210]

size = len(chars)
key = []
def crack(index, m):
    for x in range(256): 
        if x ^ (m+index) & 255 == chars[index]:
            key.append(chr(x))


index = 0
while index < size:
    crack(index, 125)
    index += 1

print "".join(key)




结果:0CTF{Bazinga_it's_not_the_real_flag_hahahahahahaha}
emmmm  算了半天,好像你走错路了
syzry 发表于 2024-11-5 21:44
可以逆推,但你这推出来的是fake flag啊,是0CTF{Bazinga_it's_not_the_real_flag_hahahahahahaha}。
真正的flag藏在你那题的其他地方吧
 楼主| s1986q 发表于 2024-11-5 21:54
__▂寒江雪▂__ 发表于 2024-11-5 21:44
题目意思是输入的字符串通过一系列计算后,能够和预先给出的char字符一致

这个题关键点在于m值  假设是 ...

谢谢你的回复
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 12:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表