一.涉及知識點
app脫殼
java層
so層動態注冊
二.抓包信息
POST /user/login.html HTTP/1.1
x-app-session: 1603177116420
x-app-lng: 121.xxxx
x-app-lat: 31.xxxxxx
x-app-version: 4.5.6
x-app-pushid: 1a0018970a165a9944f
x-app-locationcityid: xxxxxx
x-app-uuid: cd6df0a047ae0fbb
User-Agent: Caibeike/1.0(com.caibeike.android 4.5.6; Nexus_5;Android 6.0.1; cd6df0a047ae0fbb; zh_CN)
x-app-cityid: xxxx
x-app-platform: android
x-app-nonce: 1683473123
x-app-timestamp: 1603182403928
x-app-encrypt-text: 72157d096e1793b4f7696ea92285e93a
host: mapi.caibeike.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
Connection: Keep-Alive
Accept-Encoding: gzip
pw=2aed29ddfb50fc6f07e1a2bf3e6e3d87&mobile=xxxx
三.分析
x-app-lng: 121.xxx
x-app-lat: 31.xxxx
x-app-locationcityid: xxx
x-app-cityid: xxxx
#這些是地理信息
x-app-encrypt-text
#這個明顯是加密信息
#請求參數中pw很明顯做了加密
四.開始找參數
#首先先不管請求頭直接搞請求參數加密
#為什么呢不搞請求頭呢,因為請求頭未必有用
脫殼
日常習慣看看有沒加殼
簡單的加固而已
看我往期的博客
https://www.cnblogs.com/pythonywy/p/13536130.html
定位加密參數
這個全經驗吧,同學們自己多多專研這個很難教
#python轉一下
from Crypto.Cipher import AES
class Aes_ECB(object):
def __init__(self):
self.key = 'gSPs4aHZL1ocan1w' #秘鑰
self.MODE = AES.MODE_ECB
self.BS = AES.block_size
self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)
self.unpad = lambda s: s[0:-ord(s[-1])]
# str不是16的倍數那就補足為16的倍數
def add_to_16(value):
while len(value) % 16 != 0:
value += '\0'
return str.encode(value) # 返回bytes
def AES_encrypt(self, text):
aes = AES.new(Aes_ECB.add_to_16(self.key), self.MODE) # 初始化加密器
encrypted_text = aes.encrypt(Aes_ECB.add_to_16(self.pad(text))).hex()
# 執行加密並轉碼返回bytes
return encrypted_text
運行發現他還需要請求頭進行破解
破解請求頭
#找java層方法都一樣,日積月累關鍵字查找,你會發現x-app-encrypt-text在so文件中
反編譯so文件
1.修改apk的后綴名為zip
2.用ida打開so文件
獲取so層方法的偏移位置
我之前的代碼
https://www.cnblogs.com/pythonywy/p/13787332.html
定位位置之后找鹽
哈哈,鹽就是這個
至於入參畢竟是他人的app我就不寫的很詳細拉
方法和思路都有了大家可以去試試