記一次噩夢般的經歷——論學會反編譯的重要性


 

 

  最近在做一個android項目,因為非開源,github上也沒購有私有庫,所以就沒有提交github管理。昨天我感覺寫到了一定程度,一個小的版本已經出來了,於是就想U盤和網盤都備份一下。結果出現了下面的一幕.......

 

      

 

       

  我點了兩次重試,沒用;再點跳過,然后什么都沒有復制。我再看想要復制的文件夾,找不到了........

      

   尼瑪坑爹的微軟……不讓我復制也不要把原來的弄丟啊......無奈之下我趕緊上網搜一下“一個意外錯誤使你無法復制該文件夾”,發現也有不少人遇到同樣的問題,但都沒有解決辦法。於是我又想試試能不能數據恢復,然后下載了好幾個數據恢復軟件,不僅掃描過程要很久,而且根本找不到剛剛莫名其妙丟失的文件。  

    

 

       要是丟失的是其他文件,可能到這也就結束了,但丟失的是android項目文件,而且我是用真機調試過的,於是我就想能不能獲取手機的安裝文件,再想辦法恢復源文件。我之前接觸過一點反編譯,對於沒有經過特殊處理的apk,反編譯的效果還是非常好的。就算不好也要試一試了,反正已無其他辦法.....

 

1.獲取apk

  要進行反編譯,首先要獲取目標文件。我一開始想的是如何獲取已安裝的dex文件,但在手機上安裝文件被系統隱藏起來了,沒root根本沒辦法查看。那,只能 root ? 我又上網搜了各種從已安裝程序獲取安裝包的方法,發現有一個說android系統在安裝完程序后,會保留一份apk的,可以通過adb連接手機,通過 pull 命令獲取到。既然這樣,那就試試吧。

* 首先將手機通過usb線連接到電腦

* 進入android sdk 安裝目錄:SDK\platform-tools\

* 按住shift鍵並右鍵鼠標,選擇“在此處打開命令窗口(W)”

* 輸入 adb pull data/app/你的apk包名-1.apk 輸出目錄\你的apk包名.apk

  Android系統備份的apk會在apk包名的后面加上"-N",但N的具體數據一般是1,但我第一次輸入的是 “-1”,結果沒找到,第二次輸入“-2”然后就找到了。第一次因為沒有制定目錄具體目錄,不知道pull到哪了,我又重新試了一次。如圖:

有了apk,接下來就好辦了。

 

2.獲取xml文件

  一般經apk解壓后獲取的xml文件,打開是亂碼的,但用Apktool 將沒有經過特殊處理的apk反編譯后得到的xml文件恢復程度非常高,只是屬性的順序、屬性值的格式會稍微改變一下,比如match_parent 換成fill_parent等,且會增加了一些默認屬性,稍微修改一下即可。

具體操作步驟:

* 下載Apktool 的jar包;

* 將Apktool 和要反編譯的apk文件放在同一個目錄下,以方便操作;

* 在上步目錄下打開命令行窗口,輸入:

    java -jar Apktool的jar包名稱  d  要反編譯的apk名

回車;

 

3. 反編譯獲取java文件

* 下載dex2jar軟件包;

* 將apk解壓,獲取classes.dex文件,並將該文件復制到dex2jar目錄下(方便操作);

* 進入dex2jar軟件包下打開命令行窗口,輸入:

    d2j-dex2jar.bat classes.dex

回車,如圖:

    

按以上步驟操作后即可獲得classes-dex2jar.jar文件,即我們的源文件的jar包;

* 下載jd-gui軟件,打開該軟件后直接將jar包拖進去即可看到我們的程序文件;

     

 

  至此,反編譯工作就全部完成了,終於可以松一口氣。不過我這次反編譯出的java文件出了點錯誤——反編譯軟件在每個類里面都自動添加了一些莫名其妙的代碼,必須手動刪除,還有一些程序資源的ID必須重新設置一下才好....

   

  這次意外導致的問題終於解決了,但過程也極其痛苦,花費的時間也無法挽回。所以以后對於重要文件我們一定要及時備份、及時備份、備份(雖然備份時也可能出錯,比如我這次,但備份越早損失越小)!!!不然真不知道什么時候機器或系統會突然惡心你一下......當然一些挽救技術也最好了解一下,關鍵時刻有可能就會成為我們的救命稻草。

  

  本文地址:http://www.cnblogs.com/laishenghao/p/5577722.html

  作者博客:( •̀ ω •́ )y

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM