安卓逆向分析韻達超市app接口及其實現
1.抓包響應的操作(登錄-入庫-出庫等等接口)
2.apk文件解壓得出dex文件,然后反編譯出jar包,。
3.分析接口
3.1登錄接口
抓包得出登錄接口主要有六個參數,分別是sign_method,req_time,data,action,appver,version,sign
其中sign_method是固定值yd_md5,req_time是13位時間戳,data里面的數據就是用戶名和密碼(密碼是進行了MD5加密),action應該是固定值,登錄這個接口的值應該就是market.appMarket.login,appver和version也是固定值,那么剩下的就只有sign不知道是怎么生成的.
接下來就是分析jar包代碼了.
全局搜索login關鍵詞,找到了登錄接口的相關邏輯,但這里顯然不是登錄前的組包過程,這個是登錄成功,返回信息后賦值的過程,那么就是繼續找
找到了這個函數,很明顯這個就是登錄請求的組包過程,可以看出來,先new一個Request對象,然后setPhone,setPassword,setData,setAction,setVersion.
其中在setPassword的時候做了一個判斷,真的時候用的是rsa加密,公鑰就在源碼里,false的時候是用的md5加密,很顯然,密碼是MD5加密的.
但是還是沒有看到sign的加密方法,那就得繼續找了
找到了這個函數,但是在這個工具里看不到這個函數的內容,那就只能用比較強大的工具了,jeb登場
找到了這個函數,通過分析發現,是將請求參數進行按key的升序排序,然后拼接字符串,然后進行了g.a(g.c(v6.toString()))操作,進去里面的函數,發現是MD5加密.那么sign的生成方式就找到了.登錄接口完成.
發現登錄接口的返回響應里面有個publicKey,有可能是RSA密鑰.
{ "req_time":1589253822588, "body":{ "publicKey":"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAI6ZmE1edc709ZhZQ8dGMGLhYqHyzdU1KUCTP4mamczvqJChHSnGSy8tNBltapz8salszVaWQSp9qHkAlpp2aH0CAwEAAQ==", "message":"請求成功", "result":true, "token":"CKJBCg67eY_Z8djYgAD0ccA_", "data":{ .... }, "openid":"xxxxxxxxxxxx", "code":0 }, "success":true }