tips:這是一篇有小知識的睡前小故事
一、抓包
電腦端工具使用Fiddler,Fiddler配置及手機代理設定百度一大堆,不再贅述,下面說一下抓包時遇到的坑,這些坑都是配置沒問題前提下的,
1、證書不安全,據百度描述,是因為Android7以后用戶添加的證書默認不安全,解決方法百度又是有很多,因為我的root不徹底,無法把system磁區掛載讀寫,所以使用的是Xposed+JustTrustMe,使用以后即可正常抓包,如果Fiddler一直顯示tunnel to,看我的這篇帖子 https://blog.csdn.net/qq_45704978/article/details/113801752,
2、為了照顧新手,把Xposed+JustTrustMe說的詳細一點點,我的機型為OPPO R11,機型較老,百度有使用奇兔刷機工具解鎖刷機的教程,按著一步一步來就可以,再去下載個有root和xposed的刷機包,如果只有root也行,自己再裝個xposed,我的xposed沒用root,直接rec刷入的,xposed裝成后,百度下載.4版本的JustTrustMe,在xposed模塊里面勾選重啟即可,
請求頭中有一項屬性為signature,每次請求,前面大部分不變,結尾一部分一直變化,可以猜測為固定值+時間戳,退出重新登錄,絕大部分都變了,所以可以猜測明文組成為 固定值+access_token+時間戳,加密方法為Base64(未知加密方法),經過這番分析,好像沒什么用,先用最簡單的方法測驗一下能不能拿到加密方式,還是Xposed模塊,名字叫Inspeckage,結果沒抓到加密方式,對于一些簡單的加密,這個方法簡單快速,好吧,開始走上了一條反編譯的不歸路,
反編譯
1、用MT看了一下顯示 未加固(偽騰訊御安全),鬧不明白到底有沒有加固,百度好多教程都是脫殼打包完顯示 “偽”,還是實戰一下,發現代碼被混淆了,不能草率了,只能認真反編譯了,
2、首先使用大佬在GitHub開源的drizzleDumper,直接百度就有,需要用到終端模擬器,終端模擬器需要root權限,重點在su口令可以獲取root權限,也就是在命令列輸入su,然后回車,用法百度也有,,,,,但是我用著有例外,一直在匯出dex檔案,而且代碼中并沒有有價值的signature關鍵字(怎么看代碼一會就會說),
3、然后換工具,沒錯,又用到了Xposed,模塊用反射大師,在反射大師里面打開易班,然后點中間紅色的星星,點當前的ACTIVITY,點寫出DEX,dex檔案就被成功寫出了,然后傳到電腦,使用dex2jar-2.0把dex檔案轉為jar包,拖入jd-gui,搜索signature,即可找到關鍵演算法


可以看出機密演算法為Base64(DES()),明文為 id+access_token+時間戳,和猜的格式一樣,然后把代碼復制到eclipse測驗一下,我只學過一點點Java,反編譯也是看著百度一點一點操作的,加密也沒學過,所以好多代碼看不懂,只能是jd-gui里面的用到的類都復制進去,這可是一個大工程,費了好大勁,發現在反編譯的Base64類里面的方法有bug,我絕望了,經過百度,原來所有的Base64演算法都是一樣的,并不是某班自己寫的,于是百度了java Base64用法,演算法就這么寫出來了,
4、怕什么來什么,得到的結果和正確的signature并不完全一樣,不是不一樣,是不完全一樣,只有開始的一部分是一樣的,后面的不一樣,這很上頭,如果演算法有錯誤的話,應該是全都不一樣,如果明文不對的話,,,通過代碼能看出來明文一定是對的,思緒一下子斷了,
5、不知百度了多少篇文章,Windows端和Android端的Base64加密結果可能不一樣,所以百度了一份SDK里面的Base64原始碼,作為自己的一個類,自己的演算法不用JDK的Base64,用SDK的Base64類,然后測驗,激動人心的時刻來了,沒錯,結果沒有變!!!又一次崩潰!!!靜下來,再想一想,會不會是DES的問題,因為我自己的代碼里的getInstance()的引數必須是"DES/CBC/PKCS5Padding",不然會報錯,而反編譯的代碼里是"DES",經過一番百度,果然有好多Windows端和Android端加密結果不一樣的情況,我再復制一份SDK的DES演算法就行了唄,萬分開心,但是現實總是那么殘酷,SDK并沒有開源,,,,
6、DES還只是個猜想,我現在需要驗證我的猜想,所以我只能搞個安卓環境自己測驗一下,開始在eclipse裝環境,裝了兩個小時,失敗了,,,改戰IDEA,還是輸了,,,看了看磁盤,還有十幾個G就要滿了,不知不覺下載了一百多個G的東西,,,統統刪掉,最后的希望,Android Studio,兩個多小時,搞定了,Android Studio的錯誤主要就是虛擬機跑不起來,原因是我CPU是ADM R7 4700U的原因,試了百度的幾個方法終于奏效了,但是,后來發現我用不到虛擬機,,,還有就是gradle下載好慢好慢,最后超時,去官網下載一個對應版本就OK了(飛機場,香!),就這樣環境搞定了,
7、開始擼代碼,寫了個main方法,發現列印不出結果,百度發現安卓入口竟然不是main!好吧,找對了寫代碼的地方,開始運行,結果正確!!!!!!!!!!!
8、我從一開始,我就打算用eclipse寫這個演算法的,現在只能安卓端結果正確,又到死胡同了,還沒想到好的解決辦法,可能要轉戰安卓了,但是時間太緊了,,,,
感悟
正所謂,開車無難事,只怕有新人,一個加密演算法搞了五天,但也印證了只要功夫深鐵杵磨成針這句話,期間想過很多次放棄,但是有很多人以不同的方式激勵著我,感謝生命中的每一個人,謝謝,
tips:上面的所有工具和用法百度都有,因為我都是自己百度的,所以沒有過多的描述,因為是測驗出最后結果才寫的這篇文章,所以連接忘了用的哪個了,還有什么不足的地方歡迎指正,



終于可以關掉了,舒服!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260363.html
標籤:其他
上一篇:搭建堡壘機 jumpserver
下一篇:C/C++演算法競賽代碼框架
