Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android逆向之115網盤5.2.2apk簽名校驗so破解並干掉長廣告

Android逆向之115網盤5.2.2apk簽名校驗so破解並干掉長廣告

編輯:關於Android編程

在使用115網盤的時候,發現裡面的離線下載功能的在線視頻觀看功能竟然有10分鐘的廣告時間,於是開始萌生嘗試破解的它的想法,首先聲明,本帖只作為技術研究,請讀者遵守相關法律法規,不要侵犯以他人的商業利益為目的進行相關破解行為。

由於之前破解過多個apk 修改裡面的smali代碼研究相關的技術,所以剛開始我解開115網盤apk的時候,雖然看到裡面的代碼混淆了,經過一番研究之後,還是找到了廣告的兩個關鍵位置,一個開始播放前的10分鐘內廣告,一個是滑動進度條的時候的5到11秒隨機長度廣告,兩個都是在VideoVitamioPlayActivity這個類裡面,如下圖:

\\

找到VideoVitamioPlayActivity.smali文件,並找到上面圖中兩個位置的smali代碼並刪掉,重新編譯成classes.dex文件,替換原來apk 包裡面的相應文件,重新簽名,放到手機安裝成功。可總是打不開,我立刻把手機連接上電腦,看logcat輸出,發現裡面輸入一個error,大大的“Illigal APP...”幾個字出現在我眼前,我頓時興奮了,決定繼續玩它下去。

在logcat中,我看到這是native層裡面報出的錯誤,心想這肯定是在第一個activity或application裡面調用native代碼,果然在DiskApplication這個類的onCreate方法裡面找到了一行代碼EncryptNative.init(getApplicationContext());,於是跟蹤進去 ,發現其調用了yyw_encrypt.so庫,並有兩個對外方法:

<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">public static native String getLoginSign(String paramString1, String paramString2, String paramString3); public static native void init(Object paramObject); 我開始嘗試性的把DiskApplication裡面的EncryptNative.init(getApplicationContext());刪除掉再重新編譯、運行。果然不出所料,APP可以運行起來了,可是在登陸的時候還是被強制關閉了,logcat依然輸出大大的“Illigal APP...”。

這會我開始把yyw_encrypt.so扔進IDA pro,研究這兩個方法的實現邏輯,如下圖

\

\

從上圖的方法可以看出來,init方法裡面獲取apk當前的簽名經過sha1轉換後與設定的兩個sha1值進行相等比較,並把比較結果放到IS_CORRECT全局變量裡面,只要一個相等,就會正常結束方法,否則跳轉到loc_1720地址處彈出提示並關閉APP。而第二個方法:

\

從getLoginSign 方法的執行流程中可以看出這方法首先會判斷IS_CORRECT是否等於1,如果不等於的話就跳轉到loc_1458處執行,執行提示“Illigal APP...”和關閉app動作。而等於的話就直接進行登陸sign字符串的轉換,而這個地方恰恰是沒有和當前簽名的sha1值進行相關運算,只是把參數裡面的幾個字符串進行相關運算返回一個結果 ,所以破解它的方法就輕松看出來了,只到把init的CMP處理的R9改成1就可以了,而為了達到這個目的,可以在很多地方入手,經過一番研究,最後我選擇了equals函數入手,因為這是最簡單方便的,只有init方法裡面的兩處調用,不會影響其它地方:

\

如圖,在equals方法執行的最後面,R0作為返回數據存入的寄存器,裡面存入的是判斷結果,只要把R0存入立即數1,就可以返回相等的判斷結果,於是開始查閱ARM的指令機器碼(ARMv7-M Architecture Application Level Reference Manual),查詢16位的Thumb指令的MOV立即數,在A6.7.75章節找到了這指令的相關說明:

\

根據文檔說明 可以得到MOV R0,#1的機器碼為:20 01,接著找到equals方法MOV R0,R5指令的所在位置為000015FB,打開Ultraedit,把000015FB的28 46改成01 20,改了之後再從IDA打開libyyw_encrypt, 裡面的指令已經變成MOVS R0,#1,如下圖所示:


由於修改的是armeabi-v7a裡面的so,還需要修改armeabi裡面的so, 雖然會有點區別,但是這個MOVS R0,#1指令在兩個版本的ARM指令中是一樣的,以同樣的方法替換原來的機器碼,過後替換掉原來apk中的so文件,重新簽名,運行,登陸,離線播放,一切正常,成功干掉長廣告,至此,破解終於完成。




  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved