iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
1
Security

Android System Security系列 第 18

[Day 18] CTF Challenge

Wo man

最近喵喵隊長提供了一些資訊給我看

所以我就偶然地點進去看了一圈

發現有個很好玩的題目

因為我也沒解過

所以邊解題目邊紀錄一下拆APK之後怎麼找到關鍵拿到flag

當然拉 依照之前拆APK的經驗

First Step 當然是看Manifest

很明顯他就只有一個activity-MainActivity

這時候因為只有一個頁面

決定直接看程式在幹嘛
trace了一下MainActivity的smali code

看到if-nez特別興奮(?
昨天的判斷bypass就是依據compare result
那這包是做什麼的比對呢

他會去比對v0是不是0 如果不是0則branch到cond_0
那他v0是怎麼來的?
看起來是從呼叫access$100函式回傳

看起來他會在準備兩個字串丟進去checkSN函式
trace checkSN的smali code還蠻長的
省時間請容許我直接做decompile看他邏輯是啥

前面都只是在判斷是不是null啊長度不要為0啊啥的
直到中下區段時,程式會創建一個MD5的物件
接著他會把第一個參數拿去MD5計算
算完之後再做ToHex的轉換

最後他以一個迴圈的方式來對i+=2的每個char取出來做append
其實看到這裡可以知道他是迴圈,只是decompiler可能哪裡沒抓好
不過回去看smali code就很明顯

直到全部抓完之後把這字串接上flag的pattern

G00d!
PoC:
計算MD5的template網路上很多
隨便找一個改一下

#!/usr/bin/python

# -*- coding: utf-8 -*-

import hashlib
m = hashlib.md5()

data = "Tenshine"

m.update(data)
h = m.hexdigest()

flag = ""
for i in range(0,len(h),2):
  flag += h[i]

print("flag{"+flag+"}")

對了 如果你想問參數第一個為什麼是"Tenshine"
smali code也有跟你說喔
雖然decompile一樣沒顯示
第一個是username 而這變數也有被定義在MainActivity裡面


:)
花了1個小時邊解邊打文章 挺好玩的

我是來世胸胸的...
我們下次見


上一篇
[Day 17] Android Practical - (7)
下一篇
[Day 19] CTF Challenge(2)
系列文
Android System Security30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言