418 发表于 2023-8-31 16:57

大吉大利杯 ctfshow Matara Okina 题解

本帖最后由 418 于 2023-8-31 17:04 编辑

# ctfshow Matara Okina

app下载:https://ctfshow.lanzoui.com/i4PQEkn6vch

网上已经有大佬写了过程但都不太详细,本菜鸡以小白的角度记录一下思考过程 :D

参考:
http://t.csdn.cn/MsYd3

https://www.cnblogs.com/crfshadow/p/14380315.html#_label2

## 反编译

app安装到手机上,打开一看没什么用。。。

把app拖进jadx里

由于我是上课时摸鱼做出这道题的,过程全在手机上完成,就用了NP管理器代替

提取安装包后找到AndroidManifest.xml这个文件,打开方式选择编辑



可以看到有两个入口,show.zxc.matarokina.MainActivity 就是默认打开运行的activity,还有一个 show.zxc.mataraokina.FlagActivity,进去这个类看看。

选中那个dex文件,打开方式选择DEX编辑PLUS, 找到 FlagActivity 点进去,默认显示的是 smali 代码



点右上角的三个点,转为 java



由此可知,让ans等于bytes就行

## 分析代码

```java
byte[] bytes = scheme.getBytes();
```

找 scheme ->

```java
scheme = data.getQueryParameter("secret");
```

找 data ->

```java
Uri data = getIntent().getData();
```

看不懂在干什么,复制它上网搜

搜啊搜,搜到这篇文章

https://www.cnblogs.com/hwb04160011/p/13960578.html

可以看到java代码里,获取了data,scheme,hose,对照着可以构造出 `sh0w://p4th/70/1nput`

后面又在获取 ` data.getQueryParameter("secret");`

也就是需要构造 `sh0w://p4th/70/1nput?secret=?????`

于是问题就转为了求 secret=什么玩意儿

这是上课摸鱼撸出来的分析过程:



## 逆向求解

核心加密代码就在那个while循环里,它把 scheme 转成 byte 后一通运算的结果和 ans 比较

也就是说,要使 scheme 计算后得到的结果是 ans 就行。

先搞明白while循环里面在算什么,可以带几个数进去,如上图,自己动手试试吧 :)

题目就变成了 y = x ^ n, 这里的 n(就是i,每次循环增加1) 和 y(ans的每个byte)是已知的,要求未知x.

做的是异或运算,搜索一下这种运算的特点:https://www.ruanyifeng.com/blog/2021/01/_xor.html



等式两边同时 ^n

也就求得 x = y ^ n

于是写出代码







## 浏览器跳转

于是可以凑出这个链接 `sh0w://p4th/70/1nput?secret=Android_scheme_is_FUN`

打开NP/MT管理器,新建文档 aaa.html 根据 https://www.cnblogs.com/hwb04160011/p/13960578.html 里学到的知识,写出如下代码

```html
<a href="sh0w://p4th/70/1nput?secret=Android_scheme_is_FUN">hahaha</a>
```

保存退出后,点它选择打开方式,选择浏览器




左上角有个很小的字 ,点它,会跳转到应用



看到flag

tanglikecuan 发表于 2023-9-1 14:54

做个标记,来学习学习。

业余小徐 发表于 2023-9-4 08:38

上课撸题,难道这就是真爱:eee,向大佬学习

CBL-XG 发表于 2023-9-4 14:40

1. 两个相同的数异或为0;
2. 任何一个数和0异或得到数的本身;
3. 异或运算满足结合律;
页: [1]
查看完整版本: 大吉大利杯 ctfshow Matara Okina 题解