對某日頭條apk的反編譯和二次打包


640?wx_fmt=jpeg


新的一周到來啦~


本篇來自 wutongke 的投稿,有關反編譯以及再次打包,想必研究過的朋友是知道的,所以這里希望能給那些還沒接觸過的朋友帶來參考。


wutongke 的博客地址:

http://www.jianshu.com/users/0e0821e94979


前言


今天閑着無聊,湊個字數寫篇文章吧。之前出於學習(主要是好玩兒,可以換換背景、換換布局什么的)的目的反編譯過幾個Apk,覺得挺好玩兒的,但一直沒有對apk中的代碼都過手腳,今兒對某日頭條進行下反編譯和二次打包,主要介紹工具和流程。


工具


window下有很多好用的gui工具,mac下就沒有那么幸運了,先說下本文用到的工具:


1. apktool


此工具必不可少,是反編譯和打包的必備工具,通過homebrew安裝。


2. dex2jar


完成dex到jar包的轉變,方便定位需要修改的代碼位置,通過homebrew安裝。


3. jd-gui


這個是mac下的gui工具,可以打開jar包查看源碼,下載地址:

https://github.com/java-decompiler/jd-gui/releases


目標


其實今天的目標很簡答,主要是體會一下過程,某日頭條中的設置界面如下,點擊右上角的意見反饋將進入到反饋界面,今天的目的就是通過修改代碼使其失效。


640?wx_fmt=png
頭條的設置界面


步驟


下載某日頭條


當然需要先下載才能修改呀~~~


尋找代碼所在路徑


要搜索到對應的代碼,當然要寫找到對應的界面,這里用到了adb工具,dumpsys 可以查看系統服務信息和狀態。


使用usb連接手機后,打開某日頭條的應用,切換到系統設置界面。


在mac上打開 iTerm,輸入命令 adb shell dumpsys activity activities


640?wx_fmt=png


查看某日頭條的任務棧:


640?wx_fmt=png


可以看到起設置界面的名字 是BaseSettingActivity,名字還是很規范的,也可以看到其路徑是 com.ss.android.article.base.feature.mine


定位代碼位置


找到界面需要定位代碼的具體位置,如果直接反編譯的話,我們看的到是 smali格式 的代碼,很難定位。通過 jd-gui工具 查看 java代碼,然后再定位 smali 中代碼的位置。


把apk包 toutiao.apk 重命名為 toutiao.zip在此要提前保存一份apk包,后邊還會用到。解壓后如下:


640?wx_fmt=png


可以看到有 個dex文件,可見頭條的代碼量還是很大的。使用 dex2jar工具 把dex文件轉為jar文件,命令為:d2j-dex2jar classes.dex,然后生成了classes-dex2jar.jar 文件,使用 jd-gui工具 打開:


640?wx_fmt=png


頭條的代碼進行了混淆,還好我們找到了 BaseSettingActivity 界面的路徑。


640?wx_fmt=png


在反編譯的代碼中我們搜索 "feedback",找到了以上的代碼,雖然進行了混淆,我們不難猜測這個就是 意見反饋文字設置和click事件設置 的位置。其混淆后的 method 為:


640?wx_fmt=png


修改smali


使用 apktool 反編譯 toutiao.apk,所以在之前把apk文件改為zip文件時一定要保存一份,不然就要重新下了,哈哈:


640?wx_fmt=png


反編譯之后目錄如下,與zip包解壓后的目錄還是挺像的:


640?wx_fmt=png

使用文本工具打開 smali目錄,本人用是 sublime,找到 p_()方法,在其下 搜索定位設置click事件的位置


640?wx_fmt=png


可以看到之前截圖的三行java代碼的 smali版本 就是上圖,把426行的代碼刪除,就等着打包試用查看結果了。


簽名打包


我們當然是不知道頭條的簽名的,這里可以使用自己的簽名對其進行簽名,不過需要先卸載原來安裝的某日頭條的正版,才可以成功安裝修改后的盜版。


安裝命令如下:


  • 先push apk包到手機:adb push toutiao.apk /data/local/tmp/com.toutiao.toutiao


  • 再安裝apk:adb shell pm install -r "/data/local/tmp/com.toutiao.toutiao"


至此安裝完成,測試發現意見反饋的按鈕已經如預期那樣失效了。


總結


  1. 工具很重要。


  2. 要有耐心,這次反編譯實現的功能很簡單,如果想實現稍微復雜一些的功能,需要非常大的耐心。




640?wx_fmt=png


如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點擊“投稿”菜單查看。


歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:

640?wx_fmt=jpeg


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com