日常破解--XCTF easy_apk


一、題目來源

    來源:XCTF社區安卓題目easy_apk


二、破解思路

    1、首先運行一下給的apk,發現就一個輸入框和一個按鈕,隨便點擊一下,發現彈出Toast驗證失敗。如下圖所示:

2.PNG

    2、將該APK直接拖進AndroidKiller中反編譯,搜索關鍵字驗證失敗,如下圖所示:

4.PNG

    3、關鍵代碼就在MainCtivity.java處,使用jeb直接查看Java代碼(偷懶不看smali匯編了,看到腦殼痛),發現代碼邏輯為將用戶輸入的字符串使用Base64New類中的Base64Encode()函數加密后和一個字符串相比較,若相等,則驗證通過,否則驗證失敗,點擊跳轉到Base64New類中,發現Base64Encode()函數首先將用戶輸入得到的字符串轉為字節數組作為參數,然后每3個字節為一組,擴展為4個字節,最后查表即可(感覺很眼熟的樣子,emmmm就是base64編碼,只是對照表跟base64對照表不同,可惜我在寫完解密腳本之后才發現是這東西),那么解密過程也很簡單了,直接對字符串4個字節一組分組,縮減為3個字節一組(語文水平感覺很差的樣子寫道這里。。。。),然后轉為字符拼接成字符串即可。

6.PNG
3.PNG

    4、將解碼過程寫出python腳本跑出flag,填入驗證通過!!!

2.PNG
1.PNG


三、總結

    總結:很基礎的一道題,唯一的難點就在必須寫base64解碼腳本了吧,emmmm要是像我一樣木有認出來是base64,那一開始就有點難受了!!!下面附上Base64編碼解碼原理以及相關腳本!!!
    Base64編碼原理:
    1、將字符串轉為字節數組,然后每3個字節一組,一個24個比特,不足3個字節直接補0
    2、在每一組3個字節24bit中,以6個bit構成一個字節(高兩位補0),形成4個字節為一組
    3、根據編碼后的字節查找對照表,拼接成字符串,自此,Base64編碼完成!!!

    Base64解碼原理:
    1、將編碼后的字符串查找對照表后的字節以4個字節為一組,出現=直接去掉即可
    2、將這4個字節每個字節的高兩位去掉,有32bit變為24bit,將這24bit以8個bit構成三個字節
    3、將第二步得到的字節數組轉為字符串即可!!!

    附上python腳本(ps:由於markdown問題,所以有需要的主機更改一下某些地方的縮進):

def Base64Decode(str_list):
list_base = []
a = str_list[0] << 2
c = str_list[1] & 15
b = str_list[1] >> 4
a = a | b
list_base.append(a)
c = c << 4
a = str_list[2] & 3
b = str_list[2] >> 2
c = c | b
list_base.append(c)
a = a << 6
a = a | str_list[3]
list_base.append(a)
return list_base

CodingTable = 'vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/'
Ciphertext = '5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs='

i = 0
flag = 'flag{'

while i <= (len(Ciphertext) - 1):
list1 = []
n = 0
for k in range(4):
	if Ciphertext[i + k] == '=':
		list1.append(0)
		n = n + 1
	else:
		list1.append(CodingTable.index(Ciphertext[i + k]))
ba = Base64Decode(list1)
for j in range(3 - n):
	ch = chr(ba[j])
	flag = flag + str(ch)
i = i + 4

flag = flag + '}'
print(flag)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM