【flutter對抗】blutter使用+ACTF習題

最新的能很好反編譯flutter程序的項目

‍1、安裝

git clone https://github.com/worawit/blutter --depth=1

image

然後我直接將對應的兩個壓縮包下載下來(通過瀏覽器手動下載)

不再通過python的代碼來下載,之前一直卡在這個地方。

如果讀者可以正常運行init_env_win.py,手動這一步可以省略。

cd .\blutter\
python .\scripts\init_env_win.py

image

再次運行就可以安裝成功

image

2、blutter反編譯使用

image

運行該工具,進入目標文件夾

提供libapp.so 和 libflutter.so 的目錄

image

image

python blutter.py C:\Users\Le\Desktop\flutter\chall\lib\armeabi-v7a .\output

然後報錯。。。

image

但是問題不大,好像是我們的架構不支持,我們換一個

image

再次運行,發現正在下載對應Dart版本的信息

image

全程代理!

image

要不然還會報錯

正常情況下:

image

安裝完成後,再次運行命令:

image

報錯:0x22說明權限不夠,使用管理員模式運行即可

image

反編譯成功

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備註 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

查看文件目錄:

image

到此,blutter模塊反編譯flutter成功!

3、IDA恢復libapp.so符號

image

拖進IDA64

發現符號全無,不利於我們分析,此時blutter工具的用法就體現出來了

image

運行生成的腳本:

image

見證奇蹟的時刻到了

image

4、分析

image

flutter中:onTap函數是按鈕點擊響應函數,CTF中以此作爲入口進行分析

進入1DE500函數

image

進入分析發現一堆代碼

image

目前不知道什麼加密,因爲“面目全非”(有256,%符號)

image

使用blutter生成的frida腳本,對該函數進行hook,觀察其返回結果

frida -U -f com.example.flutter_application_1 -l blutter_frida.js

image

image

hook目標函數

image

然後發現沒有觸發

image

猜測flag長度有限制,後面知道了原來是模擬器有bug,我換了真機纔可以

image

得到了比較的數組,也就是密文

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的一個動調

image

image

選擇same

image

找到module

image

運行程序

image

讀者可以使用高級語言來看,爲了理解更深刻,我這裏採用了彙編來看

image

可以看到比較256次

RC4的經典特徵

image

image

image

在異或出添加輸出斷點:

image

搜索指令

  EOR             X5, X3, X2

image

import idc
print(idc.get_reg_value("X2"),",",end="")

image

image

拿到異或的所有值

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師傅的分享

更多網安技能的在線實操練習,請點擊這裏>>

‍  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章