最新的能很好反編譯flutter程序的項目
1、安裝
git clone https://github.com/worawit/blutter --depth=1
然後我直接將對應的兩個壓縮包下載下來(通過瀏覽器手動下載)
不再通過python的代碼來下載,之前一直卡在這個地方。
如果讀者可以正常運行init_env_win.py,手動這一步可以省略。
cd .\blutter\
python .\scripts\init_env_win.py
再次運行就可以安裝成功
2、blutter反編譯使用
運行該工具,進入目標文件夾
提供libapp.so 和 libflutter.so 的目錄
python blutter.py C:\Users\Le\Desktop\flutter\chall\lib\armeabi-v7a .\output
然後報錯。。。
但是問題不大,好像是我們的架構不支持,我們換一個
再次運行,發現正在下載對應Dart版本的信息
全程代理!
要不然還會報錯
正常情況下:
安裝完成後,再次運行命令:
報錯:0x22說明權限不夠,使用管理員模式運行即可
反編譯成功
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備註 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
查看文件目錄:
到此,blutter模塊反編譯flutter成功!
3、IDA恢復libapp.so符號
拖進IDA64
發現符號全無,不利於我們分析,此時blutter工具的用法就體現出來了
運行生成的腳本:
見證奇蹟的時刻到了
4、分析
flutter中:onTap函數是按鈕點擊響應函數,CTF中以此作爲入口進行分析
進入1DE500函數
進入分析發現一堆代碼
目前不知道什麼加密,因爲“面目全非”(有256,%符號)
使用blutter生成的frida腳本,對該函數進行hook,觀察其返回結果
frida -U -f com.example.flutter_application_1 -l blutter_frida.js
hook目標函數
然後發現沒有觸發
猜測flag長度有限制,後面知道了原來是模擬器有bug,我換了真機纔可以
得到了比較的數組,也就是密文
Unhandle class id: 46, TypeArguments
GrowableList@750038d0f1 = [
188698,
0,
{
"key": "Unhandle class id: 46, TypeArguments"
},
34,
{
"key": [
184,
132,
137,
215,
146,
65,
86,
157,
123,
100,
179,
131,
112,
170,
97,
210,
163,
179,
17,
171,
245,
30,
194,
144,
37,
41,
235,
121,
146,
210,
174,
92,
204,
22
]
},
0,
0,
0
]
接下來使用IDA進行so的一個動調
選擇same
找到module
運行程序
讀者可以使用高級語言來看,爲了理解更深刻,我這裏採用了彙編來看
可以看到比較256次
RC4的經典特徵
在異或出添加輸出斷點:
搜索指令
EOR X5, X3, X2
import idc
print(idc.get_reg_value("X2"),",",end="")
拿到異或的所有值
xor = [14, 14, 68, 80, 29, 201, 241, 46, 197, 208, 123, 79, 187, 55, 234, 104, 40, 117, 133, 12, 67, 137, 91, 31, 136,
177, 64, 234, 24, 27, 26, 214, 122, 217]
然後還有密文
這裏使用了oacia師傅的腳本
final = [184, 132, 137, 215, 146, 65, 86, 157, 123, 100, 179, 131, 112, 170, 97, 210, 163, 179, 17, 171, 245, 30, 194,
144, 37, 41, 235, 121, 146, 210, 174, 92, 204, 22]
xor = [14, 14, 68, 80, 29, 201, 241, 46, 197, 208, 123, 79, 187, 55, 234, 104, 40, 117, 133, 12, 67, 137, 91, 31, 136,
177, 64, 234, 24, 27, 26, 214, 122, 217]
flag = [chr(xor[i]^final[i]^0xff) for i in range(len(final))]
print(''.join(flag))
感謝oacia師傅的分享
更多網安技能的在線實操練習,請點擊這裏>>