菜鳥初次逆向某App SO層算法

聲明

? ?1. 本人初次寫技術類文章,如寫的不好請大家見諒,在這里只是想讓自己能有一個語言上的沉淀和技術經驗上的積累。

????2. 由于是逆向分析App中的登陸請求中的密碼加密跟一個s值加密的過程,為了不引起不必要的麻煩這里就不公開是什么app了(該文都以某App稱呼),只是給大家一個技術上的思路。同時也給那些Java開發或者是Andorid開發等人一個警鐘,不要認為什么都是安全的,也不要只顧著寫功能,不注重安全問題。

?????3. 由于初次寫技術類文章,如有侵權或者威脅到該App安全問題請及時聯系我。作者郵箱itdreamlmc@163.com.。

????4.版權聲明:本文為博主原創文章,未經博主允許不得私自轉載。

前言

????????周六周日閑著蛋疼總是有事沒事的找點東西研究下,當我拿起手機不知道研究啥好的時候,手機上一個App引起了我的注意。接下來就開始的了我的逆向分析之路。

準備工具

? ? ? ?工欲善其事必先利器,要想做好后邊的加密分析那點事,那么工具是不可缺少的,整個過程需要的工具主要有如下。

1.安卓手機一部(已獲取ROOT權限的)。

2.抓包神器Fiddler(主要抓取該app的登陸請求數據)。

3.安卓的adb命令工具(主要用操作手機終端)。

4.安卓逆向助手AntiDroid V1.4.3。

5.App反編譯工具Android kill。

6.SO調試工具IDA Pro。

7. Java項目開發工具IntelliJ IDEA(主要用作動態調試app和算法的測試)。

對App的登陸接口數據靜態分析

????????如果你要對一個App的某個接口分析,那么首先你不得不先抓取到接口請求的數據,然后在對其請求跟響應數據參數做分析。接下來就是對某App的登陸接口的請求數據進行分析過程。

????????首先下載某App并安裝到手機上,然后設置Fiddler抓包工具(具體如何抓包大家自行百度就行了,注需要配置證書問題,否則或抓不到htpps接口請求的數據),打開某app找到登陸頁面隨便輸入個登陸手機號跟密碼點擊登陸,然后到Fiddler中會看到如圖請求數據。

????????我們點擊WebForms查看提交表單數據會看如下請求數據,這里只對參數p登陸密碼,跟一個校驗參數s做分析,p參數還好,有經驗的程序員都能基本猜到90%就是一個RSA加密只要拿到公鑰然后自己寫一個RSA加密就可以了,對于參數S就顯得有點麻煩,本來我以為就是一個簡單的MD5之類的簽名然后截取字符串,或者是一個隨機值之類的,可事實上并非如此,多換幾個賬號登錄或換密碼就會發現S參數值每次隨著登錄賬號跟密碼的不同而改變,所以大致能猜到S應該是賬號跟密碼經過某個算法計算出的加密值,接下來我們就開始去一點點分析這兩個參數。

反編譯某App獲取它的字節碼文件

????????首先打開安卓逆向助手AntiDroid V1.4.3 然后選擇 Dex轉Jar,之后選擇下載的Apk文件,選擇jar保存路徑最后點擊Dex轉為Jar等待準換完成,如圖所示。


分析參數p的密碼加密過程

成功將dex轉為jar之后之后到AntiDroid跟目錄找到jd-gui 工具如圖

打開其應用,將轉換成功的jar拖進該工具上,我們就可以看到該apk80%以上的java代碼了(因為java代碼是逆向過來的,所以會有部分數據損壞),之后我們全文搜索RSA關鍵字如圖所示,并打開這個c文件我們會看到RSA 加密方法。


????????好了看到這個我們就大概能猜到密碼加密是調用了這里,那接下來我們就動態的調試下app在這個了下斷點,看看這里是不是密碼加密。

????????首先打開Andorid killer 將apk拖進去反編譯拿到該apk的所有smail文件,之后打開IDEA新建java工程,然后將所有的smail文件全部拷貝到IDEA java項目的src目錄下然后附加遠程調試apk(IDEA如何附加調試Apk大家自行百度下,這里不做詳細說明),找到該c文件對應的smail文件打開,在方法開始打上斷點,具體如圖所示。

????????之后打開手機app點擊登陸會看到程序會斷在這個位置我們看下傳進來的參數剛好為數據的密碼,所有可以斷定該app的密碼的密碼就是用的這個RSA公鑰進行加密的,所以我們將該公鑰拷貝出來之后就可以自己寫這個密碼加密的算法了。如圖所示。

到此某app的登陸密碼加密參數p分析就算到此結束了。

分析某app的加密參數s

????????接下來就是本文的重點了,分析加密參數s的加密過程,還是一樣老套路,我們在jd-gui工具中搜索登陸請求包的一些關鍵參數如checktoken、device_id、skin等這些參數。我們看到某app的某包下的t.class文件如圖所示。

????????在這里我們可以看到s參數是經過s類的p方法獲取的值,之后我們點擊s類會發現該s.class并不能打開,那么我們怎么辦呢?難道我們就到此放棄了嗎?哈哈。當然不能,既然他的s.class文件我們看不到,那我們就看該s.class文件對應的s.smail文件,我們在smail文件中找到p方法,然后在該方法上打下斷點,一步步跟進,看看該s值是如何計算的,如圖所示。

????????接下來一樣,打開app點擊登陸會停在這個位置,我們F8跟進會執行到invoke-virtual {v0, p0}, Lcom/***/***/***Application;->calculateS(Ljava/lang/String;)Ljava/lang/String;

這里,之后我們F7跟進,會進入***Application類的calculateS方法,之后我們打開jd-gui找到***Application類的calculateS方法看看是個什么鬼,如圖所示。

我們會看到該方法用native修飾,顯然是一個so庫中的方法,我們在jd-gui中向上看找到該方法加載了哪個so庫,如圖所示。

????????從這段代碼我可以知道該類被加載的時候執行靜態代碼塊,然后動態加載utility SO庫,之后獲取s加密參數時,傳進一個字符串參數調用該so庫中的calculateS方法獲取最終的加密結果。到這里我們知道算法在so庫中了,那么我們接下來就是用IDA pro動態的去附加調試app的so代碼了。

IDA Pro附加調試SO

附加調試so文件大致流程如下:

1.? 首先找一根數據線,然后打開手機的usb開發者調試開關,連接上你的電腦,打開cmd命令窗口執行 adb devices 命令檢測設備是否連接,如圖所示。

出現如圖中的信息則代表手機連接成功。

2.之后找到IDA Pro 跟目錄下的 dbgsrv/android_server文件并執行 adb push android_server /data/local/tmp/android_server

命令將該文件上傳到手機終端上,如圖所示。

3.文件上傳成功后執行 adb shell連接手機終端 執行 su命令獲取手機root權限,然后進入/data/local/tmp目錄下,ls查看android_server 文件是否成功上傳。


????????如果android_server文件上傳成功,那么執行 chmod 777 android_server命令,給該文件賦值上最高權限,然后執行該文件,如圖所示。

執行成功會出現23946 這個端口信息,之后另外在打開一個cmd窗口,將手機終端的23946端口轉發到電腦上,執行命令adb forward tcp:23946 tcp:23946 如圖所示

4.打開IDA Pro工具找到菜單欄中的Debugger->Attach->Remote andro/Debugger選項,點擊確定,如圖所示。

之后出現如圖所示的手機進程列表,之后根據某app的包名,找到某App的進程點擊OK即可,如圖所示。

5.App附加成功,接下來找到我們要找的utility庫,在IDA Pro中知道模塊列表,并搜索utility庫。如圖所示。

雙擊打開,然后找到java中的calculateS方法。如圖所示。


雙擊該方法進入方法位置。????????

之后我們按F5 轉為c語言格式,然后在方法開始打上斷點。如圖所示。


6.在手機app上輸入賬號密碼,點擊登陸會發現該app會端在這個位置,之后我們就開始一步步調試,查看變量值,如圖所示。

執行到到這里我們就會發現該app是將登陸用戶名加密碼加一串固定的字符串拼接在了一起然后取md5的值得到如下結果。

7.拿到MD5值后然后分別按順序取1?5?2?10?17?9?25?27幾位置的數值組成最終的加密結果,最終返回給java代碼的中s參數發送出去

到此某app的p參數加密跟s參數的加密分析就到此結束了。

結果測試

我們找到p參數的加密方法,跟s參數的參數加密方法,接著就用java簡單的測試下結果

登陸成功ok,大功告成哈哈。

總結

整個逆向過程中遇到的問題有如下:

1.IDA Pro附加調試出現 Bogus or irresponsive remote server 錯誤,解決方案? 在adb shell中執行 setenforce 0 關閉selinux安全機制(需要root權限)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,677評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,800評論 18 139
  • 22年12月更新:個人網站關停,如果仍舊對舊教程有興趣參考 Github 的markdown內容[https://...
    tangyefei閱讀 35,200評論 22 257
  • 年復一年的過,都麻木了。2015即在眼前,如何過,和2014一樣過嗎?當然2014和2013,2013和2012好...
    asker閱讀 233評論 0 2
  • 4月24日第三次更新 主要更新了sublime安裝、激活、安裝插件的教程,另外把第二次更新的添加圖片的文章中的圖片...
    Icestains閱讀 590評論 0 0