柏鹭杯 2021寻找丢失的碎片
直接拖进jadx,无法正常输出反编译结果
解压后再进行压缩为apk,就可以进行反编译了
只有一个activity组件
1 |
|
主函数有点长第一步
1 | private final boolean loadSo() { |
直接访问资源文件查看提示
1 | <string name="info">APK的某个库文件被分片隐藏了起来,找到并组合成完整文件,根据提示,获取FLAG</string> |
碎片真**难找,但都可以通过binwalk工具找出来
第一个碎片
1 | binwalk -e misc3/res/mipmap-xxxhdpi-v4/ic_launcher2.png |
第二个碎片
1 | misc3/res/raw/msg.raw |
直接打开就行
第三个碎片
1 | binwalk -e misc3/META-INF/kotlin-elf.kotlin_module |
第四个碎片
1 | binwalk -e misc3.apk #隐藏在apk安装包里 |
最终,融合召唤libcore.so
主要函数如下
1 | int __fastcall Java_com_example_c2_MainActivity_funcB(JNIEnv *a1, int a2) |
主要逻辑如下
graph TB; funcB--->|2.校验对应的hash值|funcS--->|1.传入apk的hash值|funcB-->|"3.校验成功则传入字符串的前三十位"|funcC-->|4.传入字符串的大写md5值|D0 D0-->D2 D0-->D1 D1-->|key|D3 D2-->|iv|D3 D3-->|5.AES/CBC/PKCS7Padding解密|D4 subgraph java层 funcS funcC subgraph JNI层 funcB end subgraph decryptMsg方法 direction TB D0[md5字符串] D1[前16个字符串] D2[剩余的字符串] D3[assets中msg文件] D4[解密后的文件] end end
解密exp:
1 | from Crypto.Util.number import* |
解密后发现是个图片
继续用binwalk分离,发现没有隐藏文件
尝试使用zsteg,获取到了提示PixelJihad (sekao.net)
上传后,得到了flag
- 标题: 柏鹭杯 2021寻找丢失的碎片
- 作者: runwu2204
- 创建于 : 2023-07-15 17:40:00
- 更新于 : 2023-09-07 16:33:17
- 链接: https://runwu2204.github.io/2023/07/15/CTF WP/Re/安卓/柏鹭杯 2021寻找丢失的碎片/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论