題目下載:
鏈接: https://pan.baidu.com/s/1r-b0I6AitIghl8yjkyHuEA 提取碼: wjf8
Jeb打開apk
重要的是紅框的代碼
程序運行後會判斷存儲根目錄下是否有"BaoZang.apk",如果有的話按字節讀取出來,進行aes加密
加密之後的數據寫在LuoJie.bin文件裏
現在我們有LuoJie.bin文件,那我們就逆向,使用aes解密,得到的就是apk文件
此處要注意key值經過generateKey()處理過:
解密可以寫腳本,也可以使用androidkiller在 Cipher v0 = Cipher.getInstance("AES"); v0.init(1, ((Key)v2))的init函數的第一個參數修改爲2,
這個方法就是解密函數了。
修改smali文件後重新打包apk,把LuoJie.bin文件放到手機存儲根目錄,運行apk,存儲根目錄會生成一個解密後的apk文件
把得到的apk再使用jeb打開
重點看紅框代碼,獲取用戶輸入的用戶名給v4,密碼給v5,分別經過函數處理,得到的數據分別與"==QN1E0NxAjQ@M@I?cuIAAeH" "nEYgXfm6CovdajyScU0+aCCB701JAaZWZzC+71phA0M="相等即正確
先看怎麼處理v4的:
最後一位減5給與第一位互換,循環長度爲v4的長度/2
再看如何處理v5:
寫解密代碼:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import base64
from Crypto.Cipher import AES
a = "==QN1E0NxAjQ@M@I?cuIAAeH"
b = "nEYgXfm6CovdajyScU0+aCCB701JAaZWZzC+71phA0M="
def work(a):
len_a = len(a)
result = list(a)
for i in range(len_a/2):
temp = result[len_a - i - 1]
result[len_a - i - 1] = a[i]
result[i] = chr(ord(temp) + 5)
result = base64.b64decode("".join(result))
return result
def AES_Decrypt(key, data):
vi = '1234567890123456'
data = data.encode('utf8')
encodebytes = base64.b64decode(data)
# 將加密數據轉換位bytes類型數據
cipher = AES.new(key.encode('ASCII'), AES.MODE_CBC, vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
# 去補位
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
a_decrypted = work(a)
print(a_decrypted)
key = "EaRncVfLgIPMaygA"
b_decrypted = AES_Decrypt(key, b)
print(b_decrypted)
答案:A18ADF01A69342F9