小夥伴分享了一個開車軟體,但是有播放次數限制。對此小夥伴放言要制裁它,無奈APP加固了。

咳咳,本著學(wei)習(le)研(fu)究(li)的態度,嘗試著脫殼並重打包。

為證清白,伸出雙手,上操作。

右鍵直接解壓APK,查看特徵是360加固:

使用apktool工具反編譯APK作為我們的工程目錄(能成功運氣還不錯):

總結下大致思路:

脫殼拿到DEX --- 替換smali源碼 --- 修復AndroidManifest.xml --- 重打包 --- 簽名運行

一、脫殼獲取DEX文件

看特徵是360加固,用我之前的方法脫之(bbs.pediy.com/thread-21),拿到兩個dex,分別改名classes.dex,classes2.dex。

使用baksmali反編譯,由於是兩個dex,分別修改下目錄名,並替換:

classes.dex -> smali/

classes2.dex -> smali_classes2/

二、修復AndroidManifest.xml

修復AndroidManifest.xml,修改內容包括還原application入口,主activity,刪除無用的組件。

1、 查看smali,結合APP包名,確定原application類為

2、修改」 application」節點」android:name」:

改為

刪除屬性「android:protect」

3、修改主activity 的 「.DEFAULT」為「.LAUNCHER」

4、刪除所有「com.stub.stub*」的組件。

如:

三、重打包、並簽名運行

修改替換後,我們得到以下目錄:

使用apktool打包試試,打包成功了(哦也)。

簽名完、安裝啟動APP看看情況。

果然,啟動就閃退了。(果然考駕照沒那麼簡單)

現在,咱們要確定是什麼原因造成了閃退,最直接的方法就是動態調試APP。

四、調試APP

使用IDEA + smalidea調試APP(參考52pojie.cn/thread-50221)。

那麼下段點-> F8->F7->下段點 …… 不斷跟蹤代碼

最終確定退出的地方:

由於咱們刪除了殼的相關代碼,這裡就找不到com.stub.StubApp類了,所以刪除之。

重新打包安裝,運行成功!

嘿嘿,學(xing)習(fu)到(sheng)此(huo)結(lai)束(le)。

總結:這次重打包還是挺簡單的,沒有遇到反編譯工具對抗,簽名校驗,native onCreate等,算是運氣不錯。樣本就不放了,怕(liu)被(zhe)河(si)蟹(yong)。

本文由看雪論壇 DanceBird 原創 轉載請註明來自看雪社區


推薦閱讀:
查看原文 >>
相關文章