apk逆向思路_逆向练手——从一个apk简单逆向看消息摘要算法
apk隨便在百度應用市場下載的,本想找個so加密的apk進行練習……
逆向第一步,當然是抓包看看提交了什么數據,分析數據包看看哪些數據是相對固定的,哪些數據是需要進一步分析的。
01.jpg (103.64 KB, 下載次數: 2)
2019-6-5 00:35 上傳
POST https://nuc.api.mgtv.com/MobileLogin?device=vivo%20v3max%20a&osVersion=5.1.1&appVersion=6.3.6&ticket=&userId=0&mac=i865166029270231&osType=android&channel=baidu&uuid=&endType=mgtvapp&androidid=2cb935d1f69cdcb7&imei=865166029270231&macaddress=00%3A81%3Aba%3A79%3A6e%3Aa9&seqId=272a5ff8824479c52a450a0de249f6e2&version=5.2&type=10&abroad=0&src=mgtv&uid=&phonetype=vivo%20v3max%20a&testversion= HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; vivo v3max a Build/LMY49I) imgotv-aphone-6.3.6
Content-Type: application/x-www-form-urlencoded
Content-Length: 86
Host: nuc.api.mgtv.com
Connection: Keep-Alive
Accept-Encoding: gzip
_support=10100001&invoker=hunantvphone&mobile=15344556677&password=s2345678&smscode=86
依據包分析得知,大部分都是相對固定的數據,其中mac ="i" + macaddress ,macaddress顧名思義就是設備mac。
其中只有seqId加密過,而且從長度判斷,應該是一個MD5加密。
于是使用jadx反編譯apk,搜索關鍵字非常容易就找到了數據包組包的地方:
02.jpg (86.84 KB, 下載次數: 1)
2019-6-5 00:39 上傳
先跟進y.a看看,果真是一個MD5加密方法。
03.jpg (34.53 KB, 下載次數: 1)
2019-6-5 00:40 上傳
退回組包的地方繼續分析這個MD5加密傳入的數據是什么:
最主要的是d.s()是什么呢?
04.png (156.34 KB, 下載次數: 2)
2019-6-5 00:43 上傳
分析前后代碼,竟然發現……:mac的值也是d.s(),而從前面的提交數據包已經分析得知:mac = "i" + macaddress。
意思就是說seqId = "i"+macaddress +"."+時間戳
這個帖子想說的重點是:消息摘要算法的特性!
依據消息摘要算法的特性,是沒法根據加密后的數據解密出明文的,所以消息摘要算法一般常用于數據校驗。而這個apk提交的數據包中,seqId的摘要參數包含了時間戳,而包中卻沒有傳遞該時間戳,所以服務器是無法驗證此消息摘要的正確性。所以seqId,應該就是一個32個十六進制字符的隨機數……至此,就分析完畢了。
上面不是重點,主要是下面對消息摘要算法特性的一些總結:
消息摘要算法有如下特點:不管加密明文有多長,加密后的密文定長
明文不一樣,加密后的結果必定不一樣
加密后是不可逆的。
這種算法一般常見于校驗數據完整性,apk中常見于簽名,sign等
由于密文不可逆,所以后臺無法還原。也就是說他要驗證,就會在后臺以跟前臺一樣的方式去重新簽名一遍來比較。也就是說他會把源數據和簽名后的值一起提交前臺。進行文本比對。
所以逆向的時候如果要保證加密結果是一樣的,就必須要保證在簽名時候的數據和提交上去的源數據一致。這種算法還特別特別喜歡在內部加入時間戳。所以上面為什么判斷得出seqId是一個隨機數,因為每次加密的時間戳是不一樣的,而數據包并未提交時間戳。
總結
以上是生活随笔為你收集整理的apk逆向思路_逆向练手——从一个apk简单逆向看消息摘要算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【鱼眼镜头2】[鱼眼畸变模型]:评估了五
- 下一篇: 使用katana-parser解析css