iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Security

picoCTF系列 第 28

[Day 28] Mob psycho

  • 分享至 

  • xImage
  •  

看到題目,知道這題和 APK 有關,提示告訴我們可以用 unzip
https://ithelp.ithome.com.tw/upload/images/20240922/20168342TXH2MPtiJH.png
hint 1:Did you know you can unzip APK files?
hint 2:Now you have the whole host of shell tools for searching these files.

首先,我們下載了題目給的 APK 檔案,然後用 unzip 指令解壓縮該 APK 檔案,解壓縮後發現了許多其他的檔案。

$ ls -l 
-rw-rw-r-- 1 user    user   4136367 Feb  7 17:56 mobpsycho.apk
$ unzip mobpsycho.apk 
Archive:  mobpsycho.apk
   creating: res/
   creating: res/anim/
  inflating: res/anim/abc_fade_in.xml  
  inflating: res/anim/abc_fade_out.xml  
  inflating: res/anim/abc_grow_fade_in_from_bottom.xml  
  inflating: res/anim/abc_popup_enter.xml  
  inflating: res/anim/abc_popup_exit.xml  
  inflating: res/anim/abc_shrink_fade_out_from_bottom.xml  
  inflating: res/anim/abc_slide_in_bottom.xml  
  inflating: res/anim/abc_slide_in_top.xml  
  inflating: res/anim/abc_slide_out_bottom.xml  
  inflating: res/anim/abc_slide_out_top.xml  
  inflating: res/anim/abc_tooltip_enter.xml  
  inflating: res/anim/abc_tooltip_exit.xml  
  inflating: res/anim/btn_checkbox_to_checked_box_inner_merged_animation.xml  
  inflating: res/anim/btn_checkbox_to_checked_box_outer_merged_animation.xml  
  inflating: res/anim/btn_checkbox_to_checked_icon_null_animation.xml  
  inflating: res/anim/btn_checkbox_to_unchecked_box_inner_merged_animation.xml  
  inflating: res/anim/btn_checkbox_to_unchecked_check_path_merged_animation.xml  
  inflating: res/anim/btn_checkbox_to_unchecked_icon_null_animation.xml  
  inflating: res/anim/btn_radio_to_off_mtrl_dot_group_animation.xml  
  inflating: res/anim/btn_radio_to_off_mtrl_ring_outer_animation.xml  
  inflating: res/anim/btn_radio_to_off_mtrl_ring_outer_path_animation.xml  
  .............

為了尋找 flag,我們嘗試使用 grep -R 'pico' 指令來搜索是否有任何檔案的內文中隱藏了 flag。然而,並沒有找到相關的內容。接著,我們轉向檔案名的方向進行思考,使用 ls -R | grep 'flag'指令尋找是否有名為 flag.txt 的檔案,最終成功找到這個檔案。

$ grep -R 'pico'
$ ls -R | grep 'flag'
flag.txt

找到 flag.txt 後,使用 findflag.txt 的絕對路徑,然後使用 cat 讀取其內容,發現了一串看起來是 16 進位的字串。

$ find | grep 'flag'
./res/color/flag.txt
$ cat ./res/color/flag.txt
7069636f4354467b6178386d433052553676655f4e5838356c346178386d436c5f61336562356163327d

接著,我們將這個 16 進位字串轉換為 ASCII 字符,最終得到了 flag。

$ echo '7069636f4354467b6178386d433052553676655f4e5838356c346178386d436c5f61336562356163327d' | xxd -r -p
picoCTF{ax8mC0RU6ve_NX85l4ax8mCl_a3eb5ac2}

補充:
這裡需要補充的是,我有嘗試使用 apktool 來 decompile 這個 APK 檔案,但發現找不到 flag.txt 這個檔案。這可能是因為 apktool 在 decompile 過程中,將一些人類看不懂的 bytecode 轉換成了人類可讀的 source code,因此沒有找到 flag.txt。但是unzip 只是單純地將 APK 檔案中的所有內容解壓縮成原始檔案,所以我們可以看到所有的文件,包括 flag.txt

$ apktool d mobpsycho.apk
I: Using Apktool 2.3.4-dirty on mobpsycho.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I:Loading resource table from file: /home/user/.local/share/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLS...
I:Baksmaling classes.dex...
I:Baksmaling classes2.dex...
I: Baksmaling classes3.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
$ ls 
mobpsycho			mobpsycho.apk
$ cd mobpsycho/
$ ls -R | grep 'flag'

小結:
了解到 unzipdecompile 的差異:unzip 是將 APK 檔案中的所有內容解壓縮成原始檔案,而 decompile 則是將 bytecode 轉換為人類可讀的 source code。在這種情況下,unzip 更適合我們的需求,因為它能夠直接解壓縮出我們需要的 flag.txt 檔案。


上一篇
[Day 27] format string 2
下一篇
[Day 29] rsa_oracle
系列文
picoCTF30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言