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個小時邊解邊打文章 挺好玩的
我是來世胸胸的...
我們下次見