主流app破解—你以爲用C進行加密就可以高枕無憂了?

作者:菜鳥說

有時候我們想抓取一些app的數據用作商業用途,或者是獲取到該app中某一個技術點的實現方式,或者是想獲得其中的重要邏輯,目的的話不同人不一樣。但是有些app就是不讓你獲取接口數據,搞了各種各樣的加密,這裏其實也是攻守關係,魔高一尺道高一丈,雙方彼此在競爭中成長,推動着技術的進步。

今天給大家帶來一個百萬級日活的主流app-連尚讀書的接口數據破解,這可是獨家博客首更哈,網上不可能搜到的乾貨。看官大大們都繫好安全帶,扶好扶手,馬上開車。如果有連尚官方的兄弟希望也別生氣,我其實也不太想公開來着,但是後面想了想反編譯的大佬多了去了,如果像我這種小菜鳥都能破解,那說明早就有很多其他人已經破解過了。下面貼出連尚讀書的app截圖,界面中規中矩,顏值還是不錯的呢!

主流app破解—你以爲用C進行加密就可以高枕無憂了?

廢話少說,看完了就開幹。破解接口數據,首當其衝當然是抓包,我這裏貼個圖,抓到包了但是是加密後的字符串,完全看不出來這是什麼東東啊,連尚的兄弟們也是夠狠的。

主流app破解—你以爲用C進行加密就可以高枕無憂了?

由於是破解接口,當然是從url入手啊,首先複製host到反編譯工具中進行搜索,結果如下圖:

主流app破解—你以爲用C進行加密就可以高枕無憂了?

你覺得這些搜索結果裏你對哪個更感興趣?當然是最後兩個,因爲最後2個使用了Retrofit這網絡框架明明白白地就擺在那裏,坐等你上去點,你能不感興趣嘛?OK,那應該點哪個方法呢?問得好,當然是點a()方法啊,首先一看混淆了的就知道有鬼,其次前面部分肯定是Retrofit的基本使用,無外乎就是根據url來獲取數據,當然有空的話點進去學習一下也無所謂啦!這裏我們直接點進去a()方法,結果如下圖:

主流app破解—你以爲用C進行加密就可以高枕無憂了?

看到沒,這段代碼已經很明顯了

String string = responseBody.string(); 

這百分百是從response裏面獲取到前面那串亂碼啊,接下來將這串亂碼調用了一個decryptN方法以後,獲取到了一個值。這個值是什麼呢,我們可以根據它的使用處來猜測一下。首先這個值是傳給str,那str是給a.a()作爲參數,重點是str的默認值,看到沒,str默認值是一個json,那麼既然string是賦值給str的,那string是不是應該也是個json呢?這是當然,所以string就是最終解碼以後獲得的json數據了。

現在形勢就很明朗了,從服務端獲取到了一個加密的responseBody,然後調用Rsa.decryptN方法進行了解密獲取到了最終可供客戶端使用的正常json數據。那麼問題來了,這個解密算法是什麼呢,我們迫不及待地點進去看:

主流app破解—你以爲用C進行加密就可以高枕無憂了?

點進去發現是調用了一個nativeDecryptAD方法獲取到Byte[],最後將這個byte[]轉換成的json,所以這裏重點就是這個nativeDecryptAD方法了。點擊這個方法,定位到上面定義處,發現是個native標識的方法,也就是jni的方法。這也是正常的,既然要做加密,使用c那再正常不過了。

俗話說得好,神擋殺神,佛擋殺佛,怎麼能輕易被jni給擋住?碰到使用jni的地方,第一個想到的就應該是看下這個方法是放在哪個so下面。注意看上面的靜態方法

static { 
 System.loadLibrary("ck");
 } 

這麼直接地告訴你是在ck這個so下面,那我當然就得去拜訪一下咯。修改apk的後綴後,很容易就獲取到了這個so包,優哉遊哉地打開,如下圖

主流app破解—你以爲用C進行加密就可以高枕無憂了?

剛剛那個加密方法是在Rsa類中,叫做nativeDecryptAD方法。我們掃一眼所有的方法,一眼就找到了,當然得點開來好好研究一把,畢竟連尚的碼農爲了做加密肯定也是費了不少功夫的,不研究一把就對不住人家。程序員本身就已經很不容易了,要互相懂得尊重。廢話少說,直接打開這個方法,實現如下:

主流app破解—你以爲用C進行加密就可以高枕無憂了?

我們看該方法是由v9賦值而成,而v9是由v8轉成byte[],所以關鍵就是v8了。v8是調用了另一個c的方法,我們點進去看下

主流app破解—你以爲用C進行加密就可以高枕無憂了?

裏面都是亂七八糟的代碼,看到v1 v2一直到v20就頭痛。不過這代碼就不是讓你看的,你有發現什麼規律沒,基本所有的變量都包含xxtea開頭,這意味這個方法很可能就是第三方的一個叫xxtea的類庫,不然如果你自己寫代碼你會都用xxtea開頭不?

到這裏我們去網上搜索一下xxtea,果然是一個加密框架,確認過眼神,你就是對的人。知道了加密框架以後你就可以去搜索解密方式了,這種百度操作網上一搜一大把,肯定難不倒大家吧。我這裏就隨便貼個百度搜索到的鏈接吧,解密算法圖也貼一個:https://www.cnblogs.com/frogblog/p/8607392.html

主流app破解—你以爲用C進行加密就可以高枕無憂了?

OK,解密算法有了,我們可以看到這個算法是需要傳入2個參數,我們再回頭看看之前的c方法是不是有傳入這些參數。首先從Java那邊傳入的數組是input,這個input轉變成ret_len傳入了算法,其次傳入了一個pub_key_ad,看名字結合場景不用猜都知道這個肯定就是解密需要的Key了。

主流app破解—你以爲用C進行加密就可以高枕無憂了?

但是上面並沒有對這個pub_key_ad賦值,所以這個肯定是在之前就賦值了的變量。我們點進去

主流app破解—你以爲用C進行加密就可以高枕無憂了?

看到沒,果然一個複雜的key哇,可惜還是露出了它的真面目。這裏打了個helloworld只是爲了讓它不那麼害羞,給穿個三點衣吧,讓它有點安全感。那麼Key是不是就是這個,可以直接複製過去使用呢?答案是否定的,你需要注意的是在c的代碼中對這個key進行過修改哦,粗心的同學不小心就會拜倒在這裏,這應該是連尚的小心機吧,哈哈。

主流app破解—你以爲用C進行加密就可以高枕無憂了?

看到沒,第6個數要改成48纔可以,不然折騰了半天沒看到這裏也是白搭。把key複製出來,然後修改key中下標爲6的數,也就是第7個數爲十進制的48(因爲這裏沒用0x所以不是16進制)。然後就可以收穫成果了,這麼有名的app中關鍵數據毫無保留地出現在你面前,是不是滿滿的成就感?

主流app破解—你以爲用C進行加密就可以高枕無憂了?

總結:本次表演結束,我給大家總結一下破解接口的方法。我之前還破解過手淘的接口,後面有空也給大家分享一下。當然,根據我的經驗,破解接口數據的步驟總共分爲以下幾點:

1.是否有網頁版或者網頁客戶端

如果某個軟件有網頁版,那麼破解的難度的就降低很多,就算有js混淆,但是至少代碼都是可見的,不像客戶端各種混淆加密加固機制,動不動就是jni。可以這麼說吧,如果有網頁版,就優先對網頁版進行破解。

2.使用抓包工具進行抓包

這一步沒什麼好說的,破解接口當然是得抓包了。當然這裏需要注意看下抓到的數據有什麼加密參數,或者是獲得的數據是否是加密過的亂碼,後面好針對性的進行破解

3.找到app中的網絡框架

根據抓到的host搜索網絡框架代碼,裏面無非就兩種,加密的sign參數,或者是解密前的responseBody,反正你關心的一切在裏面肯定有。

4.順藤摸瓜,找到加密方法

找到加密數據的具體實現,其中有可能在Java中,也有可能在c中。不論在哪裏,細心分析代碼,哪怕它被混淆得面目全非也要保持有耐心。

5.認真研究加密方法,不要放過一絲一線

最後

破解app就像走鋼絲,有時候前面走得都很順利,一個不細心將前功盡棄一無所獲,所以一定要細心,查了一個字母或者大小寫不一樣都不行。這肯定不是一件簡單的事情,不然你當人家的架構師都是白搭的麼。另外需要具備一定的聯想能力,一般人家要加密,經常會出現聰明反被聰明誤的情況,關鍵代碼混淆一下,所以你就專找混淆後的代碼看。另外,需要對常用的加密方式瞭解,以便看到代碼就能聯想到解密的方法。

最後,希望連尚的兄弟們不要記恨我哈,互聯網就是這樣,有***才能促進技術的進步。就算我不去破解,我不寫博客,也會有其他人會去做,還不如早點讓你看到這帖子早點對自己加密方式進行優化,哈哈是不是很有道理!

你們有破解什麼app,其中用到了什麼樣的加密方式呢,歡迎小夥伴們一起來探討,共同進步哦!

Android學習PDF+架構視頻+面試文檔+源碼筆記


感謝大家能耐着性子看完

在這裏小編也分享一份自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習

如果你有需要的話,可以點贊+評論關注我,然後加我VX:15388039515 我發給你
(或關注微信公衆號“Android開發之家”回覆【資料】免費領取)
主流app破解—你以爲用C進行加密就可以高枕無憂了?

主流app破解—你以爲用C進行加密就可以高枕無憂了?

主流app破解—你以爲用C進行加密就可以高枕無憂了?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章