概念
對移動套用進行破解、再篡改或插入惡意代碼、最後生成一個新套用的過程。通常不法分子更為青睞市面上下載量最火爆的APP進行二次打包,這些APP擁有大量的用戶集群,通過插入廣告、木馬、病毒的方式竊取用戶隱私、吸資扣費、耗費流量成功的可能性大。從外觀來看,二次打包後的盜版APP與正版APP完全相同,用戶肉眼無法分別。所以一旦產生任何不可挽回的損失,用戶會直接將“罪名”扣在APP及開發者的頭上,而通常開發者和運營人員對此也是毫不知情,嚴重侵害了開發者的利益。
二次打包過程
為了避免被二次打包,有些開發者會自己對套用進行代碼混淆,但代碼混淆只是增加APP代碼的閱讀難度,並不能真正阻止破解者的反向工程。對於破解者而言,分分鐘就可以將一款APP進行篡改並二次打包。下面介紹下步驟:
通常二次打包的步驟是:解包(反編譯)-->插入/篡改代碼-->生成新包-->重簽名-->運行。
首先可以通過使用ApkTool、Jeb、baksmali/smali等反編譯工具,反編譯apk安裝包,圖1為調用baksmali檔案的截圖。
圖1 調用baksmali檔案
解包後可以看到所有檔案列表,找到需要修改的smali檔案,這裡修改的是MainActivity.smali,如圖2。
圖2 修改MainActivity.smali
解開MainActivity.smali檔案後,在裡面插入一段篡改代碼,修改登錄界面中“Button”按鈕上的文本,圖3和圖4是修改前後smali檔案中的代碼。
圖3 修改前的smali檔案
圖4 修改後的smali檔案
修改後再調用smali.jar檔案,將smali重新打包成dex檔案,如圖5所示。
圖5 將smali重新打包
接下來再將新生成的classes.dex檔案替換原安裝包中的classes.dex,並進行重新簽名,就生成了一款盜版套用。運行該款盜版套用時會發現登錄界面的登錄按鈕被修改替換成了“Fake Btn”,如圖6、圖7所示。
圖6 篡改前的界面
圖7篡改後的界面
通過簡單的幾個操作步驟,一款未經加固保護的APP就被盜版了,一個團隊一年的勞動成果幾分鐘內就被輕易竊取。通常,盜版套用會通過插入/替換廣告SDK賺取廣告收入、修改支付渠道截取開發者收入、插入病毒/木馬程式盜取用戶信息等形式出現,操作步驟與上面介紹的類似,嚴重侵害了開發者和用戶的利益。
要想保護手機APP,避免被盜版,就要從源頭進行加固保護,讓破解者無從下手。圖8是使用加固保對APP進行加固前後的對比,加固後再調用baksmali.jar進行反編譯,可以看到代碼檔案全部被隱藏,暴露的只是加固程式的一些代碼,破解者自然無法再對源程式進行篡改了。
圖8 加固後展現的代碼
對安卓套用進行加固保護,能有效避免套用被惡意破解、反編譯、二次打包、記憶體抓取等。同時給套用提供數據加密、簽名校驗、防記憶體修改、完整性校驗、盜版監測等保護功能,給予安卓套用最強保護,從源頭消滅惡意盜版套用。