安卓逆向半次元app逆向分析源碼
僅供學(xué)習(xí)交流,禁止商業(yè)用途。如侵害利益,聯(lián)系必刪!
前言
最近一位小伙伴鐘愛二次元文化,于是找到半次元這個app,但是很快他就遇到了問題。
一、案例
樣本: 半次元 v5.0.6
工具: jadx-gui、ida、frida 問題描述:
POST請求body中的data加密,那要想動態(tài)模擬請求數(shù)據(jù),就需要逆向分析data如何加密的了。
二、分析
1. jadx反編譯
分析過程比較枯燥就不過多闡述了,直接上分析的結(jié)果圖。
2.ida分析so層
很清楚的可以看到"com_banciyuan_AI"就是key啦
3. Frida
代碼如下:
# -*- coding: utf-8 -*- import frida, sys def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) jscode_hook = """ Java.perform( function(){ var en = Java.use("com.banciyuan.bcywebview.utils.encrypt.Encrypt"); en.a.overload("java.lang.String").implementation = function (str){ console.log("參數(shù): "+str); var res = this.a(str); console.log("返回: "+res); return res; } } ) """ process = frida.get_usb_device().attach('com.banciyuan.bcywebview') script = process.create_script(jscode_hook) script.on('message', on_message) print('[*] Hook Start Running') script.load() sys.stdin.read()
3.1 hook結(jié)果
4. 算法還原
能看出來沒有魔改的地方,AES.ECB模式Pkcs7padding.
代碼如下:
# -*- coding:utf-8 -*- import base64 from Crypto.Cipher import AES class EncryptDate: def __init__(self, key): self.key = key # 初始化密鑰 self.length = 16 # 初始化數(shù)據(jù)塊大小 self.aes = AES.new(self.key, AES.MODE_ECB) # 初始化AES,ECB模式的實例 # 截斷函數(shù),去除填充的字符 self.unpad = lambda date: date[0:-ord(date[-1])] print(self.unpad) def pad(self, text): """ #填充函數(shù),使被加密數(shù)據(jù)的字節(jié)碼長度是block_size的整數(shù)倍 """ count = len(text.encode('utf-8')) add = self.length - (count % self.length) entext = text + (chr(add) * add) return entext def encrypt(self, encrData): # 加密函數(shù) a = self.pad(encrData) res = self.aes.encrypt(a.encode("utf-8")) msg = str(base64.b64encode(res), encoding="utf8") return msg def decrypt(self, decrData): # 解密函數(shù) res = base64.decodebytes(decrData.encode("utf-8")) msg = self.aes.decrypt(res).decode("utf-8") return self.unpad(msg) eg = EncryptDate("com_banciyuan_AI".encode("utf-8")) res = eg.encrypt('{"uid":3526863969856576,"face":"f"}') print(res) print(eg.decrypt(res))
安心使用
總結(jié)
難度適中,工具運用(jadx、ida、frida)AES的加密模式分析切勿著急。
以上就是安卓逆向半次元app逆向分析源碼的詳細內(nèi)容,更多關(guān)于半次元app逆向分析的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android音頻錄制MediaRecorder之簡易的錄音軟件實現(xiàn)代碼
這篇文章主要介紹了Android音頻錄制MediaRecorder之簡易的錄音軟件實現(xiàn)代碼,有需要的朋友可以參考一下2014-01-01Android Studio 配置忽略文件的方法實現(xiàn)
這篇文章主要介紹了Android Studio 配置忽略文件的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器
這篇文章主要介紹了Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08Android開發(fā)之基于RecycleView實現(xiàn)的頭部懸浮控件
RecyclerView是一種類似于ListView的一個滑動列表,但是RecyclerView和ListView相比,RecyclerView比ListView更好,這篇文章重點給大家介紹基于RecycleView實現(xiàn)的頭部懸浮控件,感興趣的朋友一起看看吧2019-10-10iOS開發(fā)中TableView類似QQ分組的折疊與展開效果
這篇文章主要介紹了iOS開發(fā)中TableView類似QQ分組的折疊與展開效果,其實要做這個效果我先想到的是在tableView中再嵌套多個tableView。下面通過本文給大家分享實現(xiàn)思路,需要的朋友可以參考下2016-12-12Android計時器的三種實現(xiàn)方式(Chronometer、Timer、handler)
這篇文章主要介紹了Android計時器的三種實現(xiàn)方式,Chronometer、Timer、handler計時器的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11