2024 ByteCTF Reverse BabyAPK
大家都好有实力{{(>_<)}},就只做出babyapk
分析
拿到题这都是啥啊,平时没怎么做安卓逆向,对flutter更是啥都不清楚,只知道Jadx分析再将lib拖入IDA分析。可以留意到Jadx里面的类和函数基本上是单双字母命名,分析不出什么,libapp.so里面能够搜索到wrong flag
、ByteCTF{
等相关字符串,但无法查找引用找到相关函数。
于是乎上网搜了一下flutter逆向,找到Blutter,通过这个程序简单恢复了一下libapp.so里面的函数表,然后根据网上的教程想通过onTap
相关函数找到逻辑,但基本上都是与UI相关,找不到加密验证这些代码。用Frida hook了几个函数也只能够
又留意到lib文件内还有个librust_lib_babyapk.so
,搜索得知flutter_rust_bridge这项技术,猜测加密在这个lib内,留意到m3n4b5v6
可疑,该字符串也存在于libapp.so内,但hook相关函数无果。打算使用Frida hook所有函数,提取所有函数地址,使用脚本生成所有hook函数
1 |
|
输入ByteCTF{uuid}
格式flag,成功打印出调用函数列表,一个个筛选,最后发现+0x3AEE0(arm64) +0x3C660(x86)的函数最可疑
1 |
|
打印出传入参数
可见正是传入的flag中间部分。对该函数使用IDA进行动调,可以发现上面部分没用(可能是校验是否是uuid格式?),加密主要是下面部分
然后对这块部分写脚本即可得到flag。解方程本应用z3来解,但不知为何解不出,最后直接暴力跑了
解题
1 |
|
得到32e750c8fb214562af22973fb5176b9c
,转成flag格式ByteCTF{32e750c8-fb21-4562-af22-973fb5176b9c}
复盘
这次这道题主要卡在如何找到加密函数上面,我通过调试、Frida hook等方法,直到最后把所有函数hook上一个个分析才找到加密函数
看了一下其他队伍的wp,有通过Frida报错爆出调用链的(Nepnep)
有通过flutter_rust_bridge代码分析的(W&M)
还有直接从libapp.so直接分析的(Arr3stY0u)